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サーバへの問い合わせをキャッシュすることで更なる高速化が期待できる。

関連資料・記事