Sun Java System Directory Server Enterprise Edition 6.3 管理指南

第 13 章 目录服务器索引

与书籍索引类似,目录服务器索引通过将搜索字符串与目录内容引用相关联,可以加快搜索速度。

有关索引类型和索引调整的信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的第 6  章 “Directory Server Indexing”

本章包含以下主题:

管理索引

本部分介绍如何管理特定属性的索引。本部分包含有关创建、修改和删除索引的信息。有关特定于虚拟列表视图 (Virtual List View, VLV) 操作的过程,请参见管理浏览索引

Procedure列出索引

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 要列出现有索引及其属性,请使用以下命令:


    $ dsconf list-indexes -h host -p port -v suffix-DN
    

Procedure创建索引


注 –

您无法创建新的系统索引,而只能维护由目录服务器内部定义的现有系统索引。


可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 创建新的索引配置。

    可以使用 dsconf create-index 命令行实用程序,通过指定要编制索引的属性来配置新的索引信息。

    例如,要创建 preferredLanguage 属性的索引条目,请使用以下命令:


    $ dsconf create-index -h host -p port dc=example,dc=com preferredLanguage

    注 –

    命令 dsconf create-index 将设置索引配置,但不会实际创建搜索所需的索引文件。生成索引文件可能会影响性能。要对索引编制过程进行更多的控制,请在创建新的索引配置之后手动生成索引文件。

    创建索引时应始终使用属性的主名,而不要使用属性的别名。属性的主名是在模式中列出的第一个属性名称,例如,userid 属性的主名为 uid


  2. (可选的)使用 dsconf set-index-prop 命令设置索引属性。

    dsconf create-index 命令将使用默认属性创建索引。如果要修改这些属性,请使用 dsconf set-index-prop 命令。有关修改索引属性的详细信息,请参见修改索引

  3. 生成索引文件。

    请参见生成索引

  4. 对要编制索引的所有服务器重复上述步骤。

Procedure修改索引

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 修改索引属性。


    $ dsconf set-index-prop -h host -p port suffix-DN attr-name property:value
    

    例如,要为 preferredLanguage 索引启用近似索引 approx-enabled,请使用以下命令:


    $ dsconf set-index-prop -h host -p port dc=example,dc=com preferredLanguage approx-enabled:on

    可以修改每个索引的以下属性:

    • eq-enabled 等同

    • pres-enabled 存在

    • sub-enabled 子串

    您要修改的属性可能包括可选的 nsMatchingRule 属性。此属性包含服务器已知的所有匹配规则的 OID。它将启用国际化索引的语言对照顺序的 OID,以及 CaseExactMatch 等其他匹配规则。有关受支持语言环境及其关联对照顺序的 OID 的列表,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》

    有关索引配置属性的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》

  2. 重新生成新的索引。

    请参见生成索引

  3. 对包含已修改的属性索引的所有服务器重复上述步骤。

Procedure生成索引

此过程将生成索引文件,以便可以搜索新索引或已修改的索引。如果您修改了属性的索引配置,则不会为所有包含该属性(作为过滤器)的搜索生成索引。要成功为包含该属性的搜索生成索引,请在您每次创建或修改该属性的索引配置时,使用此过程命令来重新生成现有索引。

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 使用以下任一方法生成索引文件:

    • 联机生成新的索引文件。


      $ dsconf reindex -h host -p port [-t attr] suffix-DN
      

      其中 -t 指定仅为指定的一个或多个属性(而非所有属性)重新编制索引。

      例如,要重新生成 preferredLanguage 索引,请键入:


      $ dsconf reindex -h host -p port -t preferredLanguage dc=example,dc=com

      dsconf reindex 命令运行期间,仍然可以通过服务器访问后缀的内容。但是在命令完成之前,不会为搜索编制索引。重新编制索引是一项资源密集型任务,它可能会影响服务器上其他操作的性能。

    • 脱机生成新的索引文件。


      $ dsadm reindex -t attr instance-path suffix-DN
      

      例如,要重新生成 preferredLanguage 索引,请键入:


      $ dsadm reindex -t preferredLanguage /local/ds dc=example,dc=com
    • 通过重新初始化后缀在脱机状态下快速重新生成全部索引。

      重新初始化后缀时,将自动重新生成全部索引文件。重新初始化后缀通常比为两个或更多属性重新编制索引更快(取决于目录的大小)。但是后缀在初始化期间不可用。有关详细信息,请参见通过重新初始化重新编制后缀的索引


    注 –

    如果在多个后缀上并行运行 dsconf import 和/或 dsconf reindex 命令,则事务日志将会增大,并可能对性能造成不利影响。


Procedure删除索引

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 删除为属性配置的所有索引。


    $ dsconf delete-index -h host -p port suffix-DN attr-name
    

    例如,以下命令将删除 preferredLanguage 属性的全部索引:


    $ dsconf delete-index -h host -p port dc=example,dc=com preferredLanguage

    删除默认索引时应非常谨慎,因为它可能会影响目录服务器的功能。

更改索引列表阈值

搜索速度缓慢可能是因为系统索引列表大小超过了索引列表阈值。索引列表阈值是每个索引键的最大值数。要确定是否已超过索引列表阈值大小,请检查访问日志。访问日志 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”

Procedure更改索引列表阈值

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 调整索引列表阈值。

    可在以下任何级别上调整索引列表阈值:

    • 在实例级别:


      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 在索引级别(按搜索类型)设置阈值。有关详细信息,请参见目录服务器联机帮助。

  2. 重新生成后缀索引。

    请参见生成索引

  3. 如果已针对旧的所有 ID 阈值调整了数据库缓存大小,并且服务器有足够的物理内存,请考虑增加数据库缓存大小。

    可以按照所有 ID 阈值增幅的 25% 来增加数据库缓存大小。

    换句话说,如果将所有 ID 阈值从 4000 增加到 6000,则根据索引列表大小的增幅,可以将数据库缓存大小大致增加 12.5%。

    数据库缓存大小是使用属性 dbcachesize 设置的。在将更改应用于生产服务器之前,应该先根据经验找到最合适的大小。

重新编制后缀的索引

如果索引文件已损坏,或者如果您更改了某个属性的索引,则必须重新编制后缀的索引,以便在相应的数据库目录中重新创建索引文件。在目录服务器运行期间或通过重新初始化后缀,可以重新编制后缀的索引。

在目录服务器运行期间重新编制后缀的索引

重新编制后缀的索引时,服务器将检查此后缀包含的所有条目,并重新创建索引文件。在重新编制索引期间后缀内容处于只读状态。由于服务器必须扫描整个后缀来查找要编制索引的每个属性,因此如果后缀包含数百万条目,则完成此过程可能需要几个小时的时间。时间长度还取决于您配置的索引。此外,在重新编制后缀的索引时,索引将不可用,并且服务器性能将受到影响。

Procedure在后缀上重新编制全部索引

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 在后缀上重新编制全部索引。


    $ dsconf reindex -h host -p port suffix-DN
    

    例如,要在 dc=example,dc=com 后缀上初始化全部索引,请使用以下命令:


    $ dsconf reindex -h host -p port dc=example,dc=com

通过重新初始化重新编制后缀的索引

重新初始化后缀时将会导入新内容,这意味着此后缀的内容将被替换,并将创建新的索引文件。重新初始化后缀可能比为多个属性重新编制索引更快,因为在装入条目时将为所有属性并行编制索引。但是请注意,后缀在重新初始化期间不可用。

Procedure通过重新初始化为后缀重新编制索引

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 将后缀设置为只读状态,如设置引用并将后缀设置为只读所述。

  2. 将整个后缀导出到 LDIF 文件,如备份到 LDIF所述。

  3. 导入同一个 LDIF 文件以重新初始化后缀,如从 LDIF 文件导入数据所述。

    后缀在初始化期间不可用。初始化完成后,即可使用所有已配置的索引。

  4. 再次将后缀设置为可写状态,如设置引用并将后缀设置为只读所述。

管理浏览索引

浏览索引是一种特殊索引,仅用于请求服务器端结果排序的搜索操作。《Sun Java System Directory Server Enterprise Edition 6.3 Reference》说明了浏览索引在目录服务器中的工作方式。

用于客户端搜索的浏览索引

必须手动定义用于客户端搜索结果排序的自定义浏览索引。要创建浏览索引,也称为虚拟列表视图 (Virtual List View, VLV) 索引,请使用以下过程。本部分还包括添加或修改浏览索引条目以及重新生成浏览索引的过程。

Procedure创建浏览索引

对于此过程的某些部分,可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。此过程的其他部分只能使用命令行完成。

  1. 使用 ldapmodify 命令添加新的浏览索引条目或编辑现有的浏览索引条目。

    有关说明,请参见添加或修改浏览索引条目

  2. 运行 dsconf reindex 命令以生成一组新的要由服务器维护的浏览索引。

    有关说明,请参见重新生成浏览索引

Procedure添加或修改浏览索引条目

浏览索引专用于给定基条目及其子树上的给定搜索。浏览索引配置在包含条目的后缀的数据库配置中进行定义。

  1. 为目录服务器上的每个浏览索引配置 vlvBasevlvScopevlvFilter 属性。

    这些属性用于配置搜索基、搜索范围和搜索过滤器。这些属性将使用 vlvSearch 对象类。

  2. 为每个浏览索引配置 vlvSort 属性。

    此属性指定用于对索引进行排序的属性的名称。此条目是第一个条目的子条目,并使用 vlvIndex 对象类指定要进行排序的属性以及排序顺序。

    以下示例使用 ldapmodify 命令创建浏览索引配置条目:


    $ ldapmodify -a -h host -p port -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: cn=people_browsing_index, cn=database-name,
    cn=ldbm database,cn=plugins,cn=config
    objectClass: top
    objectClass: vlvSearch
    cn: Browsing ou=People
    vlvBase: ou=People,dc=example,dc=com
    vlvScope: 1
    vlvFilter: (objectclass=inetOrgPerson)
    
    dn: cn=Sort rev employeenumber, cn=people_browsing_index,
     cn=database-name,cn=ldbm database,cn=plugins,cn=config
    objectClass: top
    objectClass: vlvIndex
    cn: Sort rev employeenumber
    vlvSort: -employeenumber
    ^D

    vlvScope 为以下任一选项:

    • 0(仅基条目)

    • 1(基条目的直接子条目)

    • 2(以基条目为根的整个子树)

    vlvFilter 是客户端搜索操作中使用的 LDAP 过滤器。由于所有浏览索引条目都位于相同位置,因此您应该使用描述性的 cn 值来命名浏览索引。

    每个 vlvSearch 条目必须至少包含一个 vlvIndex 条目。vlvSort 属性是属性名称列表,用于定义要排序的属性及排序顺序。属性名称前面的破折号 ( -) 表明使用相反的顺序。可通过定义几个 vlvIndex 条目为搜索定义多个索引。您可以为上面的示例添加以下条目:


    $ ldapmodify -a -h host -p port
     -D cn=admin,cn=Administrators,cn=config -w -
    dn: cn=Sort sn givenname uid, cn=people_browsing_index,
     cn=database-name,cn=ldbm database,cn=plugins,cn=config
    objectClass: top
    objectClass: vlvIndex
    cn: Sort sn givenname uid
    vlvSort: sn givenname uid
    ^D
  3. 要修改浏览索引配置,请编辑相应的 vlvSearch 条目或相应的 vlvIndex 条目。

  4. 要删除某个浏览索引以便服务器不再维护该浏览索引,请删除单个的 vlvIndex 条目。

    或者,如果只有一个 vlvIndex 条目,请同时删除 vlvSearch 条目和 vlvIndex 条目。

Procedure重新生成浏览索引

  1. 创建浏览索引条目之后,将为指定属性生成新的浏览索引。


    $ dsadm reindex -l -t attr-index instance-path suffix-DN
    

    此命令将扫描目录内容,并为浏览索引创建数据库文件。

    以下示例将生成您在上一部分定义的浏览索引:


    $ dsadm reindex -l -b database-name -t Browsing /local/ds \
     ou=People,dc=example,dc=com

    有关 dsadm reindex 命令的详细信息,请参见 dsadm(1M) 手册页。