2.7. コマンドラインを使用してビューのパフォーマンスを改善するためのインデックスの作成
ビューは指定のフィルターに基づいて検索結果から派生します。フィルターの一部は nsViewFilter で明示的に指定される属性です。フィルターの残りの部分はエントリー階層に基づいており、ビューに含まれる実際のエントリーの entryid および parentid 操作属性を検索します。
(|(parentid=search_base_id)(entryid=search_base_id))
(|(parentid=search_base_id)(entryid=search_base_id))
検索された属性( entryid、parentid、または nsViewFilter - の属性)のいずれかにインデックスが付けられていない場合、検索は部分的にインデックスが解除され、Directory Server はディレクトリーツリー全体で一致するエントリーを検索します。
ビューのパフォーマンスを改善するには、以下のようにインデックスを作成します。
-
entryidの 等価インデックス (eq) を作成します。parentid属性は、デフォルトでシステムインデックスでインデックス化されます。 -
nsViewFilter内のフィルターが存在 (attribute=*) をテストする場合は、テスト対象の属性の 存在インデックス (pres) を作成します。このインデックスタイプは、少数のディレクトリーエントリーに表示される属性でのみ使用する必要があります。 -
nsViewFilter内のフィルターが等価性 (attribute=value) をテストする場合は、テスト対象の属性の 等価インデックス (eq) を作成します。 -
nsViewFilterのフィルターが部分文字列をテストする場合 (attribute=value*) は、テストする属性の 部分文字列インデックス (sub) を作成します。 -
nsViewFilterのフィルターが近似値 (attribute~=value) をテストする場合、テスト対象の属性の 近似インデックス (approximate) を作成します。
たとえば、以下の view フィルターを使用する場合は、以下を実行します。
nsViewFilter: (&(objectClass=inetOrgPerson)(roomNumber=*66))
nsViewFilter: (&(objectClass=inetOrgPerson)(roomNumber=*66))
objectClass には、デフォルトで実行される 等価インデックス で、roomNumber には 部分文字列インデックス でインデックスを付ける必要があります。
前提条件
- ビューフィルターで使用する属性に注意してください。
手順
オプション: バックエンドをリスト表示し、データベースをインデックス化します。
dsconf instance_name backend suffix list dc=example,dc=com (userroot)
# dsconf instance_name backend suffix list dc=example,dc=com (userroot)Copy to Clipboard Copied! Toggle word wrap Toggle overflow (括弧で) 選択したデータベース名を書き留めておきます。
選択したバックエンドのデータベースの
dsconfigユーティリティーを使用してインデックス設定を作成します。特に国際化されたインスタンスの場合、属性名、インデックスタイプと、任意で照合順序 (OID) を設定するためのマッチングルールを指定します。
dsconf instance_name backend index add --attr roomNumber --index-type sub userroot
# dsconf instance_name backend index add --attr roomNumber --index-type sub userrootCopy to Clipboard Copied! Toggle word wrap Toggle overflow view フィルターで使用される属性ごとに、このステップを繰り返します。
新規インデックスを適用するためにデータベースを再インデックスします。
dsconf instance_name backend index reindex userroot
# dsconf instance_name backend index reindex userrootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ビューで使用するフィルターが同じ標準ディレクトリーツリーに基づく検索を実行します。
ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b dc=example,dc=com (&(objectClass=inetOrgPerson)(roomNumber=*66)) ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b dc=example,dc=com "(&(objectClass=inetOrgPerson)(roomNumber=*66))"
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b dc=example,dc=com (&(objectClass=inetOrgPerson)(roomNumber=*66)) # ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b dc=example,dc=com "(&(objectClass=inetOrgPerson)(roomNumber=*66))"Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/log/dirsrv/slapd-instance_name/ accessでアクセスログを表示します。検索の
RESULTにはnote=UまたはPartially Unindexed Filterが詳細に含まれていないはずです。