Menu Close

4.3. インデックススキャン制限の設定

大規模なディレクトリーでは、検索結果リストが膨大になる可能性があります。100 万の inetorgperson エントリーがあるディレクトリーには、(objectclass=inetorgperson) のようなフィルターで返される 100 万のエントリーがあり、sn 属性のインデックスには少なくとも 100万 のエントリーがあります。
データベースから長い ID リストを読み込むと、検索パフォーマンスが大幅に低下します。設定パラメーター nsslapd-idlistscanlimit は、キーがプライマリインデックス全体と一致すると見なされる前に読み取られるIDの数に制限を設定します(つまり、検索は、異なるリソース制限のセットでインデックス化されていない検索として処理されます)。
大規模なインデックスでは、インデックスに一致する検索をインデックス化されていないの検索として扱う方が実際には効率的です。検索操作では、ディレクトリーとほぼ同じサイズのインデックスとディレクトリー自体を検索するのではなく、結果(ディレクトリー全体)を処理するために 1 か所を検索することのみが必要です。
nsslapd-idlistscanlimit 属性のデフォルト値は 4000 です。これは、データベースのサイズとアクセスパターンの一般的な範囲で優れたパフォーマンスを実現します。通常、この値は変更する必要はありません。データベースインデックスが 4000 エントリーより若干大きくても、全体的なディレクトリーよりも大幅に小さい場合には、スキャン制限を引き上げると検索が改善されます。そうでないとデフォルトの制限である 4000 に達します。
一方、制限を下げると、4000 エントリーの上限に達する検索が大幅に高速になりますが、すべてのエントリーをスキャンする必要はありません。

4.3.1. コマンドラインを使用したインデックススキャン制限の設定

コマンドラインを使用してインデックススキャン制限を設定するには、以下を実行します。
  1. たとえば、検索操作中に Directory Server が検索するエントリー ID の数を 8000 に設定するには、次のコマンドを実行します。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend config set --idlistscanlimit=8000
  2. Directory Server インスタンスを再起動します。
    # dsctl instance_name restart