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