ページの先頭行へ戻る
Interstage Application Server ディレクトリサービス運用ガイド

10.3.1 検索方法のチューニング

検索と更新処理

  ディレクトリサービスへの検索処理と更新処理は排他関係にあります。あるエントリを検索しているあいだは、そのエントリに対して更新できません。ツリー全体を対象とする("objectclass=*")ような広範囲な検索をすると、更新処理ができなくなるなど、システムへの影響が出る場合があります。広範囲の検索が必要な場合は、通常時間帯の業務に影響がないように、夜間に実施するなどの運用を検討してください。

検索範囲の絞込み

  検索方法により性能が大きく異なります。たとえば、以下の図に示すようなツリー構成で、網掛け部分のエントリ「cn=user001,ou=users,o=fujitsu,dc=com」を検索する場合、複数の検索方法があります。どれも同じ検索結果を取得しますが、リポジトリのデータベースへの検索で、対象となる検索範囲が異なるため性能差があります。

  たとえば、以下の3通りの検索方法を比較します。

検索ベース

検索スコープ

検索フィルタ

検索時間

(A)

cn=user001,ou=users,o=fujitsu,dc=com

サブツリー

(objectclass=*)

長い

(B)

cn=user001,ou=users,o=fujitsu,dc=com

ベース

(objectclass=*)

やや長い

(C)

cn=user001,ou=users,o=fujitsu,dc=com

ベース

(cn=user001)

短い

  どれも「cn=user001,ou=users,o=fujitsu,dc=com」を抽出するリクエストですが、以下の違いがあります。

  このように、検索ベース・検索スコープ・検索フィルタを組み合わせることで、ディレクトリサービスへの検索を最適化することができます。

検索条件の組合せ方法

  検索フィルタは複数の条件を並列に記載することができます。


  使用するデータベースにより検索フィルタ式に制限があります。詳細は“使用上の注意”の“Interstageディレクトリサービスの制限事項”を参照してください。


  検索フィルタに記載できる論理式では、一般的に論理積(AND)が最も高速で、論理和(OR)を使うと遅くなります。複数の検索フィルタを組み合わせた検索をする場合は、論理式を組み立てなおすことで性能向上を期待できます。

  検索時間が短い順位

  1. 論理式なし

  2. & 論理積(AND)

  3. ! 否定(NOT)

  4. | 論理和(OR)


  ある属性Xのデータ値がビット表現の文字列で管理され、「00」、「01」、「10」、「11」が存在する状態で、下位ビットが「1」のデータを取得する場合

  以下の2つの検索フィルタで表すことができます。

検索フィルタ

検索時間

(A)

(|(X=01)(X=11))

長い

(B)

(X=*1)

短い

検索条件の順序

  検索フィルタに複数の条件を指定する場合は、その条件で該当するエントリ数の少ない順序に並び替えることで性能向上を期待できます。

  以下の2つの検索フィルタで説明します。

検索フィルタ

検索時間

(A)

(&(objectClass=*)(cn=user001))

長い

(B)

(&(cn=user001)(objectClass=*))

短い


  リポジトリのデータベースにSymfoware/RDBを使用する場合は、エントリ数の少ない順序に検索フィルタを並び替えたとしても、最善の性能になるとは限りません。検索フィルタを並び替えて、最善の順序になるよう事前に検証してください。