LDAP 検索の実行時に発生するパフォーマンスに関する問題のほとんどは、インデックスが存在しないか、正しく設定されていないことが原因です。デフォルトでは、Directory Server は Communications Express または Microsoft Outlook 版 Connector が発行した検索ではインデックスを使用するように設定されているため、妥当な時間内に結果が返されます。しかし、Directory Server はインターナショナル検索に対応するように設定されていません。そのため、選択されている照合規則に対応するように既存のインデックスを変更する必要があります。これについては、『Sun Java System Directory Server 5 2005Q1 Administration Guide』の「インデックスの管理」に説明されています。
たとえば、CN 属性はデフォルトで userRoot サフィックスにインデックス設定されています。
# ldapsearch -D "cn=Directory manager" -b "cn=cn,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config" "objectclass=*" cn=cn,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config objectClass=top objectClass=nsIndex cn=cn nsSystemIndex=false nsIndexType=pres nsIndexType=eq nsIndexType=sub
これを英語 (US) の照合規則を使用したインターナショナル検索で有効にするには、英語 (US) の OID を持つ nsMatchingRule 属性を 1 つ追加します。クライアントは部分文字列検索を実行するので、次のように部分文字列サフィックス (「.6」) を OID に追加する必要があります。
#ldapmodify -D "cn=Directory manager" dn: cn=cn,cn=index,cn=userRoot,cn=ldbm database, cn=plugins,cn=config changetype: modify add: nsMatchingRule nsMatchingRule: 1.3.6.1.4.1.42.2.27.9.4.34.1.6
値の先頭または末尾に、スペース、タブ、その他表示されない文字を追加しないでください。
nsMatchingRule は、複数の値を設定できる属性です。同一の OID に対して異なる種類の検索を追加することや、異なる OID を追加することができます。
その後、 serverroot/slapd-instance に格納されている db2index.pl スクリプトを実行する必要があります。
# perl db2index.pl -D "cn=Directory Manager" -w \ secret -n userRoot -t cn
この操作はオンラインで実行されますが、終了までに時間がかかることがあります。または、サフィックスを再初期化することもできます。詳細については、『Sun Java System Directory Server 5 2005Q1 Administration Guide』の「サフィックスの再初期化」を参照してください。
コンソールを使用して nsMatchingRule を追加することもできます (『Sun Java System Directory Server 5 2005Q1 Administration Guide』の「インデックスの管理」を参照)。
修正の必要があるインデックスのリストを次に掲載します。インデックスを使用しない検索は実行されないことを確認してください。これは、Directory Server のアクセスログファイルを参照し、検索結果のエントリで notes=U を探すことで確認できます。