書籍の索引と同様に、Directory Server のインデックスを利用することで、検索文字列とディレクトリの内容への参照を関連づけ、検索を速く行うことができます。
インデックスのタイプとインデックスのチューニングについては、『Sun Java System Directory Server Enterprise Edition 6.2 Reference』の第 6 章「Directory Server Indexing」を参照してください。
この章の内容は次のとおりです。
この節では、特定の属性のインデックスを管理する方法について説明します。この節では、インデックスの作成、変更、削除について説明します。仮想リスト表示 (VLV) 操作に固有の手順については、「ブラウズインデックスの管理」を参照してください。
DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。
新しいシステムインデックスを作成することはできません。システムインデックスは、Directory Server によって内部的に定義されているものだけが保持されます。
DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。
新しいインデックス設定を作成します。
dsconf create-index コマンド行ユーティリティーを使用して、インデックスを作成する属性を指定し、新しいインデックス情報を設定します。
たとえば preferredLanguage 属性のインデックスエントリを作成するには、次のコマンドを使用します。
$ dsconf create-index -h host -p port dc=example,dc=com preferredLanguage |
コマンド dsconf create-index はインデックス設定を行いますが、実際に検索に必要なインデックスファイルを作成するわけではありません。インデックスファイルを生成するとパフォーマンスに影響を与える可能性があります。インデックス作成手順をより厳密に制御するには新しいインデックス設定が作成されたあとに、手動でインデックスファイルを生成します。
インデックスを作成する場合は、常に属性の基本名を使用します。属性の別名は使用しないでください。属性の基本名は、スキーマでその属性に一覧表示された最初の名前です。たとえば、userid 属性では uid が基本名になります。
(省略可能) インデックスのプロパティーを設定するには dsconf set-index-prop コマンドを使用します。
dsconf create-index コマンドはデフォルトのプロパティーでインデックスを作成します。これらのプロパティーを変更する場合は、dsconf set-index-prop コマンドを使用します。インデックスのプロパティーの変更の詳細については、「インデックスを変更する」を参照してください。
インデックスファイルを生成します。
「インデックスを生成する」を参照してください。
インデックスを作成するすべてのサーバーに対し、前の手順を繰り返します。
DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。
インデックスのプロパティーを変更します。
$ dsconf set-index-prop -h host -p port suffix-DN attr-name property:value |
たとえば、preferredLanguage インデックスの近似インデックス approx-enabled を有効にするには、次のコマンドを使用します。
$ dsconf set-index-prop -h host -p port dc=example,dc=com preferredLanguage approx-enabled:on |
各インデックスについて次のプロパティーを変更できます。
eq-enabled 等価
pres-enabled プレゼンス
sub-enabled 部分文字列
変更する必要がありそうなプロパティーの 1 つに、オプションの nsMatchingRule 属性があります。この属性には、サーバーで既知のマッチングルールの OID が含まれます。これは国際化インデックスの言語照合順序の OID と、CaseExactMatch のようなその他のマッチングルールを有効にします。サポートされるロケールとそれらの関連付けられた照合順序の OID の一覧については、『Sun Java System Directory Server Enterprise Edition 6.2 Reference』を参照してください。
インデックス設定属性の詳細については、『Sun Java System Directory Server Enterprise Edition 6.2 Reference』を参照してください。
新しいインデックスを再生成します。
「インデックスを生成する」を参照してください。
変更した属性インデックスを含むすべてのサーバーに対し、前の手順を繰り返します。
次の手順では、新しいインデックスまたは変更したインデックスを検索できるように、インデックスファイルを生成します。
DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。
インデックスファイルは、次のいずれかの方法で生成します。
オンラインで新しいインデックスファイルを生成します。
$ dsconf reindex -h host -p port [-t attr] suffix-DN |
-t は、すべての属性ではなく、指定した属性のみインデックスを再生成するように指定します。
たとえば、preferredLanguage インデックスを再生成するには、次のように入力します。
$ dsconf reindex -h host -p port -t preferredLanguage dc=example,dc=com |
dsconf reindex コマンドの実行中も、サーバーからサフィックスの内容を使用できます。ただし、コマンドが完了するまで検索のインデックスは作成されません。インデックスの再生成は多くのリソースを消費するタスクであるため、サーバー上のその他の処理のパフォーマンスに影響を生じることがあります。
オフラインで新しいインデックスファイルを生成します。
$ dsadm reindex -t attr instance-path suffix-DN |
たとえば、preferredLanguage インデックスを再生成するには、次のように入力します。
$ dsadm reindex -t preferredLanguage /local/ds dc=example,dc=com |
サフィックスを再初期化することによって、オフラインで速やかにすべてのインデックスを再生成します。
サフィックスを再初期化すると、すべてのインデックスファイルが自動的に再生成されます。ディレクトリのサイズによりますが、多くの場合、複数の属性のインデックスを再生成するよりサフィックスの再初期化の方が高速です。ただし、初期化時にはサフィックスを使用できません。詳細については、「再初期化によるサフィックスのインデックスの再生成」を参照してください。
dsconf import か dsconf reindex のいずれか、または複数のサフィックスで並行して両方のコマンドを実行すると、トランザクションログが大きくなり、パフォーマンスに悪影響を及ぼすことがあります。
DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。
$ dsconf delete-index -h host -p port suffix-DN attr-name |
たとえば、次のコマンドは preferredLanguage 属性のすべてのインデックスを削除します。
$ dsconf delete-index -h host -p port dc=example,dc=com preferredLanguage |
デフォルトのインデックスを削除する場合は、Directory Server の機能に影響する可能性があるため、十分に注意してください。
システムインデックスリストのサイズがインデックスリストのしきい値を超えると、検索が遅くなることがあります。インデックスリストのしきい値は各インデックスキーの値の最大数です。インデックスリストのしきい値のサイズを超えているかどうかを判断するには、アクセスログを調べます。アクセスログ RESULT メッセージの末尾の notes=U フラグは、インデックスを使用しない検索が実行されたことを示します。同じ接続と操作の前の SRCH メッセージは、使用された検索フィルタを示します。次の 2 行の例は、10,000 エントリを返す cn=Smith のインデックスを使用しない検索を追跡します。メッセージからタイムスタンプが削除されています。
conn=2 op=1 SRCH base="o=example.com" scope=0 filter="(cn=Smith)" conn=2 op=1 RESULT err=0 tag=101 nentries=10000 notes=U |
システムで頻繁にインデックスリストのしきい値を超える場合は、しきい値を増加して、パフォーマンスを向上させることを検討してください。次の手順では dsconf set-server-prop コマンドを使用して、all-ids-threshold プロパティーを変更します。インデックスのチューニングと all-ids-threshold プロパティーの詳細については、『Sun Java System Directory Server Enterprise Edition 6.2 Reference』の「Tuning Indexes for Performance」を参照してください。
DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。
インデックスリストのしきい値を調整します。
次のレベルでインデックスリストのしきい値を調整できます。
インスタンスレベル
dsconf set-server-prop -h host -p port all-ids-threshold:value |
サフィックスレベル
dsconf set-suffix-prop -h host -p port suffix-DN all-ids-threshold:value |
エントリレベル
dsconf set-index-prop -h host -p port suffix-DN all-ids-threshold:value |
検索のタイプ別インデックスレベル
dsconf set-index-prop -h host -p port suffix-DN all-ids-threshold search-type:value |
search-type は次のいずれかになります。
eq-enabled 等価
pres-enabled プレゼンス
sub-enabled 部分文字列
all-ids-threshold プロパティーは近似インデックスには設定できません。
DSCC を使用して、検索タイプ別にインデックスレベルでしきい値を設定できます。詳細については Directory Server のオンラインヘルプを参照してください。
サフィックスインデックスを再生成します。
「インデックスを生成する」を参照してください。
データベースキャッシュサイズを古い all IDs しきい値に合わせて調整しており、サーバーに十分な物理メモリーがある場合は、データベースキャッシュサイズを増やすことをお勧めします。
データベースキャッシュサイズを、all IDs しきい値の増加量の 25 パーセント増加します。
つまり、 all IDs しきい値を 4000 から 6000 に増加した場合、インデックスリストのサイズの増加を見込んで、データベースキャッシュサイズを約 12 ½ パーセント増加できます。
データベースキャッシュサイズは属性 dbcachesize を使用して設定します。業務用サーバーに変更を適用する前に、実験して最適なサイズを見つけてください。
インデックスファイルが壊れた場合、サフィックスのインデックスを再生成して、対応するデータベースディレクトリにインデックスファイルを再作成する必要があります。サフィックスのインデックスを再生成するには、ディレクトリサーバーの実行中にサフィックスのインデックスを再生成するか、サフィックスを初期化します。
サフィックスのインデックスの再生成を行うと、サーバーはサフィックスに含まれるすべてのエントリを調べ、インデックスファイルを再作成します。インデックスの再生成中、サフィックスの内容は読み取り専用になります。サーバーは、インデックスを再生成するすべての属性のサフィックス全体を走査する必要があり、数百万のエントリを持つサフィックスの場合、この処理には数時間かかることがあります。かかる時間も設定するインデックスによって異なります。さらに、サフィックスのインデックスの再生成中は、インデックスを使用できず、サーバーのパフォーマンスに影響があります。
DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。
サフィックスのすべてのインデックスを再生成します。
$ dsconf reindex -h host -p port suffix-DN |
たとえば、dc=example,dc=com サフィックスのすべてのインデックスを初期化するには、次のコマンドを使用します。
$ dsconf reindex -h host -p port dc=example,dc=com |
サフィックスを再初期化すると、新しい内容がインポートされます。つまり、サフィックスの内容が置き換えられ、新しいインデックスファイルが作成されます。サフィックスの再初期化は、エントリのロード時に同時にすべての属性のインデックスが作成されるので、複数の属性のインデックスの再生成よりも速く実行することができます。ただし、再初期化中はサフィックスを使用できません。
DSCC を使用してこの作業を実行できます。詳細は、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。
「リフェラルを設定し、サフィックスを読み取り専用にする」で説明するように、サフィックスを読み取り専用に設定します。
「LDIF へのバックアップ」で説明するように、サフィックス全体を LDIF ファイルにエクスポートします。
「LDIF ファイルからのデータのインポート」で説明するように、同じ LDIF ファイルをインポートして、サフィックスを再初期化します。
初期化中は、サフィックスを利用することはできません。初期化が完了すると、設定されたすべてのインデックスを利用できるようになります。
「リフェラルを設定し、サフィックスを読み取り専用にする」で説明するように、サフィックスをふたたび書き込み可能にします。
ブラウズインデックスは、検索結果に対してサーバー側でのソートを要求する検索処理でのみ使用される特別なインデックスです。『Sun Java System Directory Server Enterprise Edition 6.2 Reference』で、Directory Server のブラウズインデックスの仕組みを説明しています。
クライアント検索結果のソート用にカスタマイズしたブラウズインデックスを手動で定義する必要があります。ブラウズインデックス、または仮想リスト表示 (VLX) インデックスを作成するには、次の手順を実行します。この節では、ブラウズインデックスエントリの追加または変更の手順とブラウズインデックスの再生成の手順も説明します。
この手順の一部として、DSCC を使用してこの作業を実行できます。詳細については、「Directory Service Control Center のインタフェース」と DSCC のオンラインヘルプを参照してください。手順のその他の部分は、コマンド行を使用した場合にのみ実行できます。
新しいブラウズインデックスエントリを追加するか、既存のブラウズインデックスエントリを編集するには、ldapmodify コマンドを使用します。
手順については、「ブラウズインデックスエントリを追加または変更する」を参照してください。
dsconf reindex コマンドを実行して、サーバーに保持される新しいブラウズインデックスのセットを生成します。
手順については、「ブラウズインデックスを再生成する」を参照してください。
ブラウズインデックスは、特定のベースエントリとサブツリーに対して指定された検索ごとに異なります。ブラウズインデックスの設定は、エントリを含むサフィックスのデータベース設定に定義されます。
ディレクトリサーバーの各ブラウズインデックスに vlvBase、vlvScope、および vlvFilter 属性を設定します。
これらの属性は、検索のベース、検索の範囲、検索のフィルタを設定します。これらの属性は vlvSearch オブジェクトクラスを使用します。
各ブラウズインデックスに vlvSort 属性を設定します。
この属性は、インデックスをソートする属性の名前または属性を指定します。このエントリは先頭のエントリの子で、 vlvIndex オブジェクトクラスを使用して、ソートする属性と順番を指定します。
次の例は、ldapmodify コマンドを使用して、ブラウズインデックス設定エントリを作成します。
$ ldapmodify -a -h host -p port -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: cn=people_browsing_index, cn=database-name, cn=ldbm database,cn=plugins,cn=config objectClass: top objectClass: vlvSearch cn: Browsing ou=People vlvBase: ou=People,dc=example,dc=com vlvScope: 1 vlvFilter: (objectclass=inetOrgPerson) dn: cn=Sort rev employeenumber, cn=people_browsing_index, cn=database-name,cn=ldbm database,cn=plugins,cn=config objectClass: top objectClass: vlvIndex cn: Sort rev employeenumber vlvSort: -employeenumber ^D |
vlvScope は次のいずれかです。
ベースエントリのみの場合 0
ベースの直接の子の場合 1
ベースをルートにしたサブツリー全体の場合 2
vlvfilter は、クライアント検索操作で使われる LDAP フィルタと同じフィルタです。すべてのブラウズインデックスエントリは同じ場所に配置されるため、cn の値にはブラウズインデックスの名前を指定しておく必要があります。
vlvSearch エントリは、それぞれが少なくとも 1 つの vlvIndex エントリを持つ必要があります。vlvSort 属性は、ソートする属性とソート順序を定義する属性名のリストです。属性名の前に付けられたダッシュ (-) は、順序を逆にすることを意味します。複数の vlvIndex エントリを定義することで、検索に複数のインデックスを定義できます。前述の例では、次のエントリを追加できます。
$ ldapmodify -a -h host -p port -D cn=admin,cn=Administrators,cn=config -w - dn: cn=Sort sn givenname uid, cn=people_browsing_index, cn=database-name,cn=ldbm database,cn=plugins,cn=config objectClass: top objectClass: vlvIndex cn: Sort sn givenname uid vlvSort: sn givenname uid ^D |
ブラウズインデックス設定を変更するには、対応する vlvSearch エントリまたは対応する vlvIndex エントリを編集します。
ブラウズインデックスを削除して、サーバーで維持しないようにするには、各 vlvIndex エントリを削除します。
または、vlvIndex エントリが 1 つだけ存在する場合は、vlvSearch エントリと vlvIndex エントリの両方を削除します。
ブラウズインデックスエントリを作成したら、指定した属性の新しいブラウズインデックスを生成します。
$ dsadm reindex -l -t attr-index instance-path suffix-DN |
このコマンドは、ディレクトリの内容をスキャンし、ブラウズインデックス用のデータベースファイルを作成します。
次の例は、前の項で定義したブラウズインデックスを生成します。
$ dsadm reindex -l -b database-name -t Browsing /local/ds \ ou=People,dc=example,dc=com |
dsadm reindex コマンドの詳細については、dsadm(1M) のマニュアルページを参照してください。