9.3. 设置索引扫描限制以便在加载长 ID 列表时提高性能


在大型目录中,搜索结果列表可能会非常大。例如,具有一百万个条目的目录将通过过滤器返回所有这些条目,如 (objectclass= inetorgperson )

从数据库中加载长 ID 列表可显著降低搜索性能。ID 列表扫描限制会在考虑键与整个主索引匹配前对 ID 目录服务器读取设置限制。这意味着目录服务器将搜索视为一组不同的资源限值的未索引搜索。

对于大型索引,将任何与索引匹配的搜索视为未索引的搜索效率更高。搜索操作只需要查看整个目录(整个目录)的一个位置,而不是通过接近目录大小的索引来搜索结果,以及目录本身。

您可以在全局范围内或特定数据库设置索引扫描限制。

9.3.1. 使用命令行设置全局索引扫描限制

默认情况下,Directory 服务器中的 ID 列表扫描限值为 4000。在大多数情况下,这个值为常见的数据库大小和访问模式提供了良好的性能,您不需要更改默认值。如果数据库索引比 4000 条目稍大,但仍然比整个目录小,则 ID 列表扫描限制可提高搜索。

另一方面,降低限制可显著加快搜索速度,否则达到 4000 条目限制,但不需要扫描每个条目。

流程

  1. 更新 ID 列表扫描限制:

    # dsconf <instance_name> backend config set --idlistscanlimit=8000
    Copy to Clipboard Toggle word wrap

    这个命令将限制设置为 8000 条目。

  2. 重启实例:

    # dsctl <instance_name> restart
    Copy to Clipboard Toggle word wrap

9.3.2. 使用 Web 控制台设置全局索引扫描限制

默认情况下,Directory 服务器中的 ID 列表扫描限值为 4000。在大多数情况下,这个值为常见的数据库大小和访问模式提供了良好的性能,您不需要更改默认值。如果数据库索引比 4000 条目稍大,但仍然比整个目录小,则 ID 列表扫描限制可提高搜索。

另一方面,降低限制可显著加快搜索速度,否则达到 4000 条目限制,但不需要扫描每个条目。

流程

  1. 导航到 Database Global Database Configuration
  2. 更新 ID List Scan Limit 字段。
  3. 单击 Save Config
  4. 点右上角的 Actions,然后选择 Restart Instance

在某些情况下,定义特定索引的限制很有用,或者根本不使用 ID 列表。您可以为不同类型的搜索过滤器配置 ID 列表扫描限制。

例如,在一个大型数据库中,包含对象类 inetOrgPerson(& ( objectClass=inetOrgPerson ) (uid=user))过滤器的 大型数据库,首先创建一个 ID 列表,其中包含匹配的 1,000万个 ID,所有与 pleasenetOrgPerson 匹配的 1,000万 ID。当数据库应用过滤器的第二个部分时,它会搜索与 uid=user 匹配的对象的结果列表。在这种情况下,定义特定索引的限制很有用,或者根本不使用 ID 列表。

此流程演示了如何配置目录服务器,以记录 AND 子句中的 swig =inetOrgPerson 条件的 ID 列表。

流程

  • 设置 nsIndexIDListScanLimit 参数:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: cn=objectclass,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config
    changetype: modify
    replace: nsIndexIDListScanLimit
    nsIndexIDListScanLimit: limit=0 type=eq flags=AND values=inetOrgPerson
    Copy to Clipboard Toggle word wrap

    使用这些设置,目录服务器不会为 AND 子句中的 swig =inetOrgPerson 条件创建任何 ID 列表。在所有其他情况下,Directory 服务器应用全局 ID 列表扫描限制值。

    nsIndexIDListScanLimit 参数使用以下语法:

    nsIndexIDListScanLimit: limit=NNN [type=eq[,sub,...]] [flags=AND[,XXX,...]] [values=val[,val,...]]
    Copy to Clipboard Toggle word wrap
    • Limit: 设置 ID 列表的最大大小。有效值为:

      • -1: 无限
      • 0 :不要使用索引
      • 1 到 32 位整数的最大数量(2147483647):最大 ID 数量
    • type: 可选:设置更改扫描限制行为的标记。有效值为:

      • AND :应用扫描限制仅搜索属性出现在 AND 子句中。
      • :应用扫描限制仅搜索属性出现在 OR 子句中。
    • : 可选:以逗号分隔的值列表,值必须与搜索过滤器匹配,才能应用限制。由于匹配是一次,如果任何值匹配,这些值将匹配。

      一次仅使用带有一种类型的值。值必须与索引类型以及应用索引的属性的语法对应。例如,如果您指定基于整数的属性 uidNumber,并且它被索引为 eq 类型,则无法使用 type=eq values=abc

      如果值包含需要转义的空格、逗号、NULL 或其他值,则使用 LDAP 过滤器转义语法:反斜杠(\),后跟字符的 2 个十六进制数字代码。在以下示例中,DN 值中的逗号使用 \2C 转义:

      nsIndexIDListScanLimit: limit=0 type=eq values=uid=user\2Cou=People\2Cdc=example\2Cdc=com
      Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat