9.3. ID の長いリストをロードするときのパフォーマンスを向上させるためにインデックススキャン制限を設定する


大規模なディレクトリーでは、検索結果リストが膨大になる可能性があります。たとえば、inetorgperson 属性を備えた 100 万のエントリーを持つディレクトリーは、(objectclass=inetorgperson) などのフィルターを使用した検索でこれらすべてのエントリーを返します。

データベースから長い ID リストを読み込むと、検索パフォーマンスが大幅に低下します。ID リストのスキャン制限は、キーがプライマリーインデックス全体と一致すると見なされる前に、Directory Server が読み取る ID の数に制限を設定します。これは、Directory Server が検索を、異なるリソース制限のセットを持つインデックスなしの検索として扱うことを意味します。

大規模なインデックスでは、インデックスに一致する検索をインデックス化されていないの検索として扱う方が実際には効率的です。検索操作では、ディレクトリーとディレクトリー自体のサイズに近いサイズのインデックスを検索するのではなく、結果を処理するためにディレクトリー全体を 1 か所だけ検索する必要があります。

インデックススキャンの制限は、グローバルに、または特定のデータベースに対して設定できます。

9.3.1. コマンドラインを使用したグローバルインデックススキャン制限の設定

デフォルトでは、Directory Server の ID リストのスキャン制限は 4000 です。ほとんどのシナリオでは、この値は一般的な範囲のデータベースサイズとアクセスパターンに対して良好なパフォーマンスを提供するため、デフォルト値を変更する必要はありません。データベースインデックスが 4000 エントリーよりわずかに多くても、ディレクトリー全体よりもかなり小さい場合は、ID リストのスキャン制限を上げると検索が改善されます。

一方、制限を下げると、4000 エントリーの上限に達する検索が大幅に高速になりますが、すべてのエントリーをスキャンする必要はありません。

手順

  1. ID リストのスキャン制限を更新します。

    # dsconf <instance_name> backend config set --idlistscanlimit=8000

    このコマンドは、制限を 8000 エントリーに設定します。

  2. インスタンスを再起動します。

    # dsctl <instance_name> restart

9.3.2. Web コンソールを使用したグローバルインデックススキャン制限の設定

デフォルトでは、Directory Server の ID リストのスキャン制限は 4000 です。ほとんどのシナリオでは、この値は一般的な範囲のデータベースサイズとアクセスパターンに対して良好なパフォーマンスを提供するため、デフォルト値を変更する必要はありません。データベースインデックスが 4000 エントリーよりわずかに多くても、ディレクトリー全体よりもかなり小さい場合は、ID リストのスキャン制限を上げると検索が改善されます。

一方、制限を下げると、4000 エントリーの上限に達する検索が大幅に高速になりますが、すべてのエントリーをスキャンする必要はありません。

手順

  1. Database Global Database Configuration に移動します。
  2. ID List Scan Limit フィールドを更新します。
  3. Save Config をクリックします。
  4. 右上隅の Actions をクリックし、Restart Instance を選択します。

9.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 リストを作成しないように Directory Server を設定する方法を示します。

手順

  • 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

    これらの設定では、Directory Server は AND 句の objectClass=inetOrgPerson 条件の ID リストを作成しません。その他のすべての状況では、Directory Server はグローバル 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
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る