14.5. 通过资源限制提高搜索性能

使用大型目录时,搜索数据库中的每个条目可能会对服务器性能造成负面影响。有效索引在某些情况下可提高性能。但是,在大型数据库中,这不一定减少了足够减少搜索范围,以提高性能。
可以在用户和客户端帐户上设置合理的限制,以减少条目总数或单独搜索中花费的总时间,它们都可以使搜索更多响应并改进整体服务器性能。
搜索操作的服务器限制通过客户端应用程序绑定到目录的特殊操作属性值来控制。您可以设置以下搜索操作限制:
  • 查看限制。指定可以为搜索操作检查多少条目。
  • 大小限制。指定服务器返回到客户端应用程序的最大条目数,以响应搜索操作。
  • 时间限制。指定服务器处理搜索操作的最大时间。
  • 闲置超时。指定在连接被丢弃前与服务器的连接闲置的时间。
  • 范围超时。指定一个单独的查找限制,专门用于使用范围进行搜索。
为客户端应用程序设置的资源限值优先于全局服务器配置中设置的默认资源限值。
注意
Directory Manager 默认接收无限资源,但范围搜索除外。

14.5.1. 搜索性能和资源限制

详情请查看 红帽目录服务器性能调优指南 中的相应部分。

14.5.2. 精细 ID 列表大小

详情请查看 红帽目录服务器性能调优指南 中的相应部分。

14.5.3. 使用命令行设置用户和全局资源限值

通过命令行,管理员可以为特定类型的搜索设置用户级别资源限值、全局资源限值和限值,如简单页面和范围搜索。第 13.1.3 节 “搜索算法概述” 包含有关这些资源限值对目录服务器搜索性能的影响的更多信息。
第 14.5.3 节 “使用命令行设置用户和全局资源限值” 列出可通过命令行为每个条目设置的操作属性。使用 ldapmodify 将属性添加到条目。
用户级属性在单独的条目上设置,而全局配置属性则在适当的服务器配置区中设置。
备用限制
指定搜索操作检查多少条目。为此属性指定 -1 表示没有限制。
  • 用户级属性: nsLookThroughLimit
  • 全局配置:
    • attribute: nsslapd-certificationthroughlimit
    • entry: cn=config,cn=ldbm database,cn=plugins,cn=config
页面查找限制
与查找限制一样,指定要检查多少条目,但专门用于简单的页面搜索操作。为此属性指定 -1 表示没有限制。
  • User-level 属性: nsPagedLookThroughLimit
  • 全局配置:
    • attribute: nsslapd-pagedCONTROLLERthroughlimit
    • entry: cn=config,cn=ldbm database,cn=plugins,cn=config
大小限制
指定服务器返回到客户端应用程序的最大条目数,以响应搜索操作。为此属性指定 -1 表示没有限制。
  • user-level attribute: nsSizeLimit
  • 全局配置:
    • attribute: nsslapd-sizelimit
    • entry: cn=config
页面大小限制
与大小限制一样,指定服务器返回到客户端应用程序但仅适用于简单页面搜索操作的最大条目数。为此属性指定 -1 表示没有限制。
  • user-level 属性: nsPagedSizeLimit
  • 全局配置:
    • attribute: nsslapd-pagedsizelimit
    • entry: cn=config
时间限制
指定服务器处理搜索操作的最大时间。为此属性指定 -1 表示没有时间限制。
  • user-level 属性: nsTimeLimit
  • 全局配置:
    • attribute: nsslapd-timelimit
    • entry: cn=config
闲置超时
指定在连接被丢弃前与服务器的连接闲置的时间。该值以秒为单位。为此属性指定 -1 表示没有限制。
  • user-level 属性: nsidletimeout
  • 全局配置:
    • attribute: nsslapd-idletimeout
    • entry: cn=config
ID 列表扫描限制
指定从索引文件中载入的最大条目 ID 数,用于搜索结果。如果 ID 列表大小大于这个值,搜索将不会使用索引列表,而是将搜索视为未索引的搜索并查找整个数据库。
  • 用户级属性: nsIDListScanLimit
  • 全局配置:
    • attribute: nsslapd-idlistscanlimit
    • entry: cn=config,cn=ldbm database,cn=plugins,cn=config
页面 ID 列表扫描限制
与 ID 列表扫描限制一样,指定从索引文件中载入的最大条目 ID 数,但特别是针对页面搜索操作。
  • user-level 属性: nsPagedIDListScanLimit
  • 全局配置:
    • attribute: nsslapd-pagedidlistscanlimit
    • entry: cn=config,cn=ldbm database,cn=plugins,cn=config
范围查找限制
指定为范围搜索操作检查多少条目(使用 greater-than, equal-to-or-greater-than, less-than, 或 equal-to-less-than 运算符)。为此属性指定 -1 表示没有限制。
  • 用户级别属性:不可用
  • 全局配置:
    • attribute: nsslapd-rangelocatedthroughlimit
    • entry: cn=config,cn=ldbm database,cn=plugins,cn=config
有关以上列出的参数的详情,请查看 Red Hat Directory Server Configuration、命令和文件参考 中的描述。
例如,这会为用户设置大小限制:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: uid=user_name,ou=People,dc=example,dc=com
changetype: modify
add: nsSizeLimit
nsSizeLimit: 500
ldapmodify 语句将 nsSizeLimit 属性添加到用户条目中,并为它指定搜索返回大小限制 500 条目。
注意
设置访问控制列表(ACL)以防止用户更改设置。有关 ACL 的详情,请参考 第 18 章 管理访问控制

14.5.4. 在匿名绑定上设置资源限值

资源限值是在用户条目上设置的。匿名绑定,其中没有与之关联的用户条目。这意味着全局资源限值通常适用于匿名操作。但是,可以通过创建具有资源限值的模板用户条目来为匿名绑定配置资源限值,然后将该模板应用到匿名绑定。
  1. 创建模板条目并设置您要应用到匿名绑定的任何资源限值。
    注意
    出于性能原因,模板应位于普通后端,而不是在 cn=config 后缀中,该后缀不使用条目缓存。
    例如:
    # ldapadd -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
    
    dn: cn=anonymous_template,ou=people,dc=example,dc=com
    objectclass: nsContainer
    objectclass: top
    cn: anonymous_template
    nsSizeLimit: 250
    nsLookThroughLimit: 1000
    nsTimeLimit: 60
  2. 在复制拓扑中的所有供应商上,将 nsslapd-anonlimitsdn 参数添加到服务器配置,指向模板条目的 DN。可以设置 第 14.5.3 节 “使用命令行设置用户和全局资源限值” 中的任何资源限值。例如:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-anonlimitsdn="cn=anonymous_template,ou=people,dc=example,dc=com"

14.5.5. 提高范围搜索的性能

范围搜索使用运算符(第 14.3.2 节 “在搜索过滤器中使用 Operator”)设置括号来搜索并返回目录中整个条目子集。例如,这会搜索在 1 月 1 日午夜之后修改的每个条目:
(modifyTimestamp>=20210101010101Z)
范围搜索的性质是,它必须评估目录中的每个条目,以查看它是否在给定的范围内。基本上,范围搜索始终是所有 ID 搜索。
对于大多数用户,查找限制 kicks 并防止范围搜索转换为所有 ID 搜索。这提高了整体性能和加快范围搜索结果。但是,一些客户端或管理用户(如目录管理器)可能没有设置 look-through 限制。在这种情况下,范围搜索可能需要几分钟才能完成甚至无限期继续。
可以设置单独的范围查找限制。这允许客户端和管理用户具有高的查找限制,同时仍然允许在潜在的性能对范围搜索上设置合理的限制。
这在 nsslapd-rangelocatedthroughlimit 属性中配置。默认值为 5000,与默认的 nsslapd-CONTROLLERthroughlimit 属性值 相同。
例如:
# ldapmodify -a -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=config,cn=ldbm database,cn=plugins,cn=config
changetype: add
add: nsslapd-rangelookthroughlimit
nsslapd-rangelookthroughlimit: 7500