14.5. リソース制限による検索パフォーマンスの改善
ディレクトリーが大きいと、データベース内のすべてのエントリーを検索すると、サーバーのパフォーマンスに影響を及ぼす可能性があります。効果的なインデックス化は、特定のシナリオでパフォーマンスを向上できます。ただし、大規模なデータベースでは、パフォーマンスを向上するのに十分な検索範囲が減っていない場合があります。
ユーザーおよびクライアントアカウントで妥当な制限を設定して、エントリーの合計数または個々の検索で費やした合計時間を節約できます。両方により、応答性が向上し、サーバー全体のパフォーマンスが向上します。
検索操作のサーバー制限は、ディレクトリーへのクライアントアプリケーションバインディングの特別な操作属性値を使用して制御されます。以下の検索操作制限を設定できます。
- ルックスルー制限。検索操作で確認できるエントリーの数を指定します。
- サイズ制限。検索操作にしたがって、サーバーがクライアントアプリケーションに返すエントリーの最大数を指定します。
- 時間制限。サーバーが検索操作の処理に費やす最大時間を指定します。
- アイドルタイムアウト。接続が切断される前に、サーバーへの接続がアイドル状態でいられる時間を指定します。
- 範囲のタイムアウト。範囲を使用した検索のために、別のルックスルー制限を指定します。
クライアントアプリケーションに設定されたリソース制限は、グローバルサーバー設定で設定されるデフォルトのリソース制限よりも優先されます。
注記
Directory Manager は、範囲検索を除き、デフォルトで無制限のリソースを受け取ります。
14.5.1. パフォーマンスおよびリソース制限の検索
詳細は、『Red Hat Directory Server パフォーマンスチューニングガイド』 の該当するセクションを参照してください。
14.5.2. 粒度の細かい ID リストサイズ
詳細は、『Red Hat Directory Server パフォーマンスチューニングガイド』 の該当するセクションを参照してください。
14.5.3. コマンドラインを使用したユーザーおよびグローバルリソース制限の設定
コマンドラインで、管理者は、簡単なページや範囲検索など、ユーザーレベルのリソース制限、グローバルリソース制限、および特定の種類の検索を設定できます。「検索アルゴリズムの概要」は、これらのリソース制限が Directory Server 検索パフォーマンスにどのように影響するかについて詳しく説明しています。
「コマンドラインを使用したユーザーおよびグローバルリソース制限の設定」は、コマンドラインを使用して各エントリーに設定できる操作属性をリスト表示します。ldapmodify を使用して、エントリーに属性を追加します。
ユーザーレベルの属性は各エントリーに設定されますが、グローバル設定属性は適切なサーバー設定エリアに設定されます。
- シークスルー制限
- 検索操作に対して検査するエントリーの数を指定します。この属性を -1 の値に指定すると、制限がないことを意味します。
- ユーザーレベルの属性:
nsLookThroughLimit
- グローバル設定:
- 属性:
nsslapd-lookthroughlimit
- エントリー: cn=config,cn=ldbm database,cn=plugins,cn=config
- ページルックアップの制限
- ルックスルー制限と同様に、検査するエントリーの数を指定しますが、単純なページング検索操作に特化しています。この属性を -1 の値に指定すると、制限がないことを意味します。
- ユーザーレベルの属性:
nsPagedLookThroughLimit
- グローバル設定:
- 属性:
nsslapd-pagedlookthroughlimit
- エントリー: cn=config,cn=ldbm database,cn=plugins,cn=config
- サイズ制限
- 検索操作にしたがって、サーバーがクライアントアプリケーションに返すエントリーの最大数を指定します。この属性を -1 の値に指定すると、制限がないことを意味します。
- ユーザーレベルの属性:
nsSizeLimit
- グローバル設定:
- 属性:
nsslapd-sizelimit
- エントリー: cn=config
- ページサイズ制限
- サイズの制限と同様、サーバーがクライアントアプリケーションに戻る最大エントリー数を指定しますが、単純なページング検索操作の場合に限ります。この属性を -1 の値に指定すると、制限がないことを意味します。
- ユーザーレベルの属性:
nsPagedSizeLimit
- グローバル設定:
- 属性:
nsslapd-pagedsizelimit
- エントリー: cn=config
- 時間制限
- サーバーが検索操作の処理に費やす最大時間を指定します。この属性を -1 の値に指定すると、制限がないことを意味します。
- ユーザーレベルの属性:
nsTimeLimit
- グローバル設定:
- 属性:
nsslapd-timelimit
- エントリー: cn=config
- アイドルタイムアウト
- 接続が切断される前に、サーバーへの接続がアイドル状態でいられる時間を指定します。値は秒単位で指定されます。この属性を -1 の値に指定すると、制限がないことを意味します。
- ユーザーレベルの属性:
nsidletimeout
- グローバル設定:
- 属性:
nsslapd-idletimeout
- エントリー: cn=config
- ID リストのスキャン制限
- 検索結果のインデックスファイルから読み込まれるエントリー ID の最大数を指定します。ID リストのサイズがこの値よりも大きい場合、検索はインデックスリストを使用せず、インデックスなしの検索として扱われ、データベース全体を検索します。
- ユーザーレベルの属性:
nsIDListScanLimit
- グローバル設定:
- 属性:
nsslapd-idlistscanlimit
- エントリー: cn=config,cn=ldbm database,cn=plugins,cn=config
- ページ ID リストスキャンの制限
- ID リストスキャンの制限と同様、検索結果のインデックスファイルから読み込まれるエントリー ID の最大数を指定しますが、ページングされた検索操作に対して指定します。
- ユーザーレベルの属性:
nsPagedIDListScanLimit
- グローバル設定:
- 属性:
nsslapd-pagedidlistscanlimit
- エントリー: cn=config,cn=ldbm database,cn=plugins,cn=config
- 範囲のルックアップの制限
- 範囲検索操作に関するエントリー数を指定します (greater-than、equal-to-or-greater-than、less-than、または equal-to-less-than 演算子を使用した検索)。この属性を -1 の値に指定すると、制限がないことを意味します。
- ユーザーレベルの属性: 利用できません。
- グローバル設定:
- 属性:
nsslapd-rangelookthroughlimit
- エントリー: cn=config,cn=ldbm database,cn=plugins,cn=config
上記のパラメーターの詳細は、『Red Hat Directory Server の設定、コマンド、およびファイルリファレンス』 の説明を参照してください。
たとえば、以下はユーザーのサイズ制限を設定します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user_name,ou=People,dc=example,dc=com changetype: modify add: nsSizeLimit nsSizeLimit: 500
ldapmodify 文は、ユーザーのエントリーに
nsSizeLimit
属性を追加して、検索結果のサイズ制限を 500 エントリーにします。
注記
ユーザーが設定を変更できないように、アクセス制御リスト (ACL) を設定します。ACL の詳細は、18章アクセス制御の管理を参照してください。
14.5.4. 匿名バインドでのリソース制限の設定
リソース制限はユーザーエントリーに設定されます。匿名のバインディングは、当然ながら、ユーザーエントリーとは関係ありません。これは、通常グローバルリソース制限が匿名操作に適用されることを意味します。ただし、リソース制限のあるテンプレートユーザーエントリーを作成し、そのテンプレートを匿名バインドに適用することで、匿名バインド専用のリソース制限を設定することができます。
- テンプレートエントリーを作成し、匿名バインドに適用するリソース制限を設定します。注記パフォーマンス上の理由から、テンプレートは、エントリーキャッシュは使用しない cn=config 接尾辞ではなく、通常のバックエンドになければなりません。以下に例を示します。
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=anonymous_template,ou=people,dc=example,dc=com objectclass: nsContainer objectclass: top cn: anonymous_template nsSizeLimit: 250 nsLookThroughLimit: 1000 nsTimeLimit: 60
- レプリケーショントポロジー内のすべてのサプライヤーで、テンプレートエントリーの DN を参照するサーバー設定に
nsslapd-anonlimitsdn
パラメーターを追加します。「コマンドラインを使用したユーザーおよびグローバルリソース制限の設定」に任意のリソース制限を設定できます。以下に例を示します。# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-anonlimitsdn="cn=anonymous_template,ou=people,dc=example,dc=com"
14.5.5. 範囲検索のパフォーマンス向上
範囲検索は演算子 (「検索フィルターでの演算子の使用」) を使用して括弧を設定して検索し、ディレクトリー内のエントリーのサブセット全体を返します。たとえば、これにより 1 月 1 日の午前 0 時以降に変更されたすべてのエントリーを検索します。
(modifyTimestamp>=20210101010101Z)
範囲検索の性質は、ディレクトリー内のすべてのエントリーを評価して、その範囲内にあるかどうかを確認する必要があることです。基本的に、範囲検索は常に ID 検索です。
ほとんどのユーザーの場合は、ルックスルーの制限が開始され、範囲の検索が全 ID 検索に変換するのを防ぎます。これにより、全体的なパフォーマンスが向上し、さまざまな検索結果を加速します。ただし、Directory Manager などの一部のクライアントまたは管理ユーザーには、ルックスルー制限が設定されていない場合があります。この場合は、範囲検索が完了するまで数分かかるか、無限に続行することがあります。
範囲に対するルックスルー制限を個別に設定することも可能です。これにより、クライアントや管理者ユーザーは、パフォーマンスが低下する可能性のある範囲検索に合理的な制限を設けながらも、高いルックスルー制限を設定することができます。
これは
nsslapd-rangelookthroughlimit
属性で設定されます。デフォルト値は 5000 で、デフォルトの nsslapd-lookthroughlimit
属性値と同じです。
以下に例を示します。
# ldapmodify -a
-D "cn=Directory Manager" -W -p 389 -h server.example.com -x
dn: cn=config,cn=ldbm database,cn=plugins,cn=config
changetype: add
add: nsslapd-rangelookthroughlimit
nsslapd-rangelookthroughlimit: 7500