3.3. コマンドラインを使用してデータベースにインデックススキャン制限を設定する
場合によっては、特定のインデックスに制限を定義したり、ID リストをまったく使用しない方が便利な場合があります。さまざまなタイプの検索フィルターの ID リストスキャン制限を個別に設定できます。
たとえば、オブジェクトクラス inetOrgPerson
を含む 1,000 万のエントリーを持つ大規模なデータベースでは、(&(objectClass=inetOrgPerson)(uid=user))
フィルターはまず objectClass=inetOrgPerson
に一致する 1,000 万の ID すべてを含む ID リストを作成します。データベースがフィルターの 2 番目の部分を適用すると、uid=user
に一致するオブジェクトの結果一覧を検索します。この場合、特定のインデックスに制限を定義するか、ID リストをまったく使用しないようにすると便利です。
この手順では、AND
句で objectClass=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
これらの設定では、ディレクトリーサーバーは
AND
句のobjectClass=inetOrgPerson
条件の ID リストを作成しません。その他のすべての状況では、ディレクトリーサーバーはグローバル ID リストのスキャン制限値を適用します。nsIndexIDListScanLimit
パラメーターは、次の構文を使用します。nsIndexIDListScanLimit: limit=NNN [type=eq[,sub,...]] [flags=AND[,XXX,...]] [values=val[,val,...]]
limit
: ID リストの最大サイズを設定します。有効な値は以下のとおりです。-
-1
: 無制限。 -
0
: インデックスを使用しない。 -
1
から 32 ビット整数の最大値 (2147483647
): ID の最大数
-
type
: オプション: スキャン制限の動作を変更するフラグを設定します。有効な値は以下のとおりです。-
AND
:AND
句に属性が含まれる検索にのみスキャン制限を適用します。 -
OR
:OR
句に属性が含まれる検索にのみスキャン制限を適用します。
-
values
: オプション: 制限を適用するために検索フィルターに一致する必要がある値のコンマ区切りリスト。一致は一度に 1 回ずつ行われるため、いずれかの値が一致すると値は一致します。値は、一度に 1 つのタイプでのみ使用してください。値は、インデックスタイプと、インデックスが適用される属性の構文に対応している必要があります。たとえば、整数ベースの属性
uidNumber
を指定し、それがeq
タイプに対してインデックス付けされている場合、type=eq values=abc
は使用できません。値にスペース、コンマ、NULL、またはその他のエスケープが必要な値が含まれる場合、LDAP フィルタエスケープ構文を使用します。バックスラッシュ (\) の後に、文字の 2 桁の 16 進数コードを続けます。以下の例では、DN 値のコンマは
\2C
でエスケープされます。nsIndexIDListScanLimit: limit=0 type=eq values=uid=user\2Cou=People\2Cdc=example\2Cdc=com