我在 CENTOS 服务器上使用 openLDAP。
为了测试,我使用带有 LDAP 查询的 JMETER 和使用这些条目的软件。
我想优化某个特定请求,我会大量搜索 OU 属性:描述。搜索使用 l 属性来查找它:搜索过滤器l=username
。如果我的索引(在 slapd.conf 中)是:
index ou,description,l eq,pres,sub
Jmeter 没有返回描述字段,并且我的软件不允许我再记录。
如果我从 slapd.conf 中删除此行或者使用:`index ou,description eq,pres,sub 我会有相同的平均响应时间。
我该如何优化我的性能?
为什么索引会从答案中删除我想要的属性,并使我的软件无法再使用我的目录?
答案1
每一个每次添加或删除索引时,您都必须运行slapindex
并记住保留数据库文件的正确权限。例如,在使用 OpenLDAP 的 Debian 上,您必须:
/etc/init.d/slapd 停止 拍击指数 chown openldap:openldap /var/lib/ldap/* /etc/init.d/slapd 启动
答案2
我最终这样做了
sudo /etc/init.d/slapd stop
sudo -u insert-your-openldap-server-user-here -c slapindex -v
sudo /etc/init.d/slapd start
因此在我的 Debian 机器上,用户是openldap
,这使得命令看起来像
sudo -u openldap slapindex -v -d 1
答案3
虽然原始发帖人的答案已经解决,但这里有一个针对 OpenLDAP 2.4 用户的解决方案。OpenLDAP 2.4 不再使用纯配置文件,但必须使用 修改所有内容ldapmodify
。
首先,您需要识别有问题的数据库。
[root@ldap-server ~]# cd /etc/openldap/slapd.d/cn=config
[root@ldap-server cn=config]# ls
cn=schema olcDatabase={0}config.ldif olcDatabase={1}monitor.ldif
cn=schema.ldif olcDatabase={-1}frontend.ldif olcDatabase={2}hdb.ldif
这里的数据库是olcDatabase={2}hdb.ldif
,使用 grep 检查索引得到的结果:
[root@ldap-server cn=config]# grep olcDbIndex olcDatabase\=\{2\}hdb.ldif
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
例如,如果我需要添加海报的索引l
,我会准备以下 ldif 文件:
[root@ldap-server ~]# cat ldap-hdb-tuning.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: ou,description,l eq,pres,sub
最后一步是使用 运行该文件ldapmodify
。
[root@ldap-server ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -D cn=config -f ldap-hdb-tuning.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"
如果你仔细查看,/var/lib/ldap
你会发现一个新的 index.file,l.bdb
如果你添加新记录,它应该会增长。请注意,我还没有发现索引创建是否正在运行中现有记录(我现在正在这样做)但当我了解更多信息时,我会调整这个答案。