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

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

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

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

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

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

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

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

手順

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

    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend config set --idlistscanlimit=8000

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

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

    # dsctl instance_name restart