OpenLDAP 資料一覧
適切な検索インデックスを作成する(slapd.conf)
2008/4/29更新
対応バージョン: 2.4.8
OpenLDAPでは目的に応じた適切な検索インデックスを作成することによって検索を高速化することができる。
ここではidコマンドでユーザ情報を検索する場合の検索インデックス作成手順を示す。
インデックス対象属性調査
まずインデックス対象となる属性を調べる。
idコマンド実行時のsyslogの結果から「filter=」を探す。
% id ldapuser999 uid=10999(ldapuser999) gid=10999 所属グループ=10999
以下のような検索クエリが発行されていることが分かる。
filter="(&(objectClass=posixAccount)(uid=ldapuser999))" filter="(&(objectClass=posixAccount)(uidNumber=10999))" filter="(&(objectClass=posixGroup)(gidNumber=10999))" filter="(&(objectClass=posixGroup)(|(memberUid=ldapuser999)(uniqueMember=uid=ldapuser999,ou=people,dc=private,dc=jp)))"
対象属性インデックス化
前述の「filter=」で確認した属性をslapd.confに記述してインデックスを作成する。
# vi /usr/local/etc/openldap/slapd.conf : index objectClass,uid,uidNumber,gidNumber,memberUid,uniqueMember eq # service slapd stop ← slapdをいったん停止 # slapindex ← インデックス作成 # service slapd start ← slapdを起動
インデックスファイルはslapd.confのdirectoryで指定されたディレクトリに「<属性名>.bdb」として作成される。
関連資料・記事
検索
実際に検索を行ってみるとインデックス化の効果が確認できる。
インデックスなしの場合が検索に1秒以上かかっているのに対し、インデックスを作成した場合は0.1秒もかかっていない。
インデックスなし
% time id ldapuser999 uid=10999(ldapuser999) gid=10999 所属グループ=10999 real 0m1.134s user 0m0.003s sys 0m0.011s
インデックスあり
% time id ldapuser999 uid=10999(ldapuser999) gid=10999 所属グループ=10999 real 0m0.067s user 0m0.003s sys 0m0.008s
また、nscd(name service cache daemon)が使える環境ではLDAPサーバへの問い合わせをキャッシュすることで更なる高速化が期待できる。
関連資料・記事