搜索速度缓慢可能是因为系统索引列表大小超过了索引列表阈值。索引列表阈值是每个索引键的最大值数。要确定是否已超过索引列表阈值大小,请检查访问日志。访问日志 RESULT 消息末尾的 notes=U 标志表明执行了未编制索引的搜索。前面的 SRCH 消息(属于同一个连接和操作)指定已使用的搜索过滤器。以下两行示例将跟踪一个未编制索引的搜索 cn=Smith,该搜索将返回 10,000 个条目。已从这些消息中删除了时间戳。
conn=2 op=1 SRCH base="o=example.com" scope=0 filter="(cn=Smith)" conn=2 op=1 RESULT err=0 tag=101 nentries=10000 notes=U |
如果您的系统经常超过索引列表阈值,请考虑增加阈值以提高性能。以下过程将使用 dsconf set-server-prop 命令修改 all-ids-threshold 属性。有关调整索引和 all-ids-threshold 属性的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“Tuning Indexes for Performance”。
可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
调整索引列表阈值。
可在以下任何级别上调整索引列表阈值:
在实例级别:
dsconf set-server-prop -h host -p port all-ids-threshold:value |
在后缀级别:
dsconf set-suffix-prop -h host -p port suffix-DN all-ids-threshold:value |
在条目级别:
dsconf set-index-prop -h host -p port suffix-DN all-ids-threshold:value |
在索引级别(按搜索类型):
dsconf set-index-prop -h host -p port suffix-DN all-ids-threshold search-type:value |
其中 search-type 为以下任一选项:
eq-enabled 等同
pres-enabled 存在
sub-enabled 子串
无法为近似索引配置 all-ids-threshold 属性。
可以使用 DSCC 在索引级别(按搜索类型)设置阈值。有关详细信息,请参见目录服务器联机帮助。
重新生成后缀索引。
请参见生成索引。
如果已针对旧的所有 ID 阈值调整了数据库缓存大小,并且服务器有足够的物理内存,请考虑增加数据库缓存大小。
可以按照所有 ID 阈值增幅的 25% 来增加数据库缓存大小。
换句话说,如果将所有 ID 阈值从 4000 增加到 6000,则根据索引列表大小的增幅,可以将数据库缓存大小大致增加 12.5%。
数据库缓存大小是使用属性 dbcachesize 设置的。在将更改应用于生产服务器之前,应该先根据经验找到最合适的大小。