ほとんどの LDAP サーバーでは、インデックスを使用して検索パフォーマンスの向上を図ります。インデックスの使用法については、ディレクトリサーバーのマニュアルを参照してください。
Solaris クライアントから妥当な時間で名前情報を検索できるようにするには、基本的なインデックス付き属性に加えて、次の属性にもインデックスを付ける必要があります。
membernisnetgroup pres,eq,sub nisnetgrouptriple pres,eq,sub memberuid pres,eq macAddress pres,eq uid pres,eq uidNumber pres,eq gidNumber pres,eq ipHostNumber pres,eq ipNetworkNumber pres,eq ipProtocolNumber pres,eq oncRpcNumber pres,eq ipServiceProtocol pres,eq ipServicePort pres,eq nisDomain pres,eq nisMapName pres,eq mail pres,eq |
属性リストで使用される略語の意味は、pres が存在 (presence)、eq が等価 (equality)、sub が部分文字列 (substring) です。
さらに、サーバーで仮想リスト表示制御 (vlv) がサポートされている場合は、vlv のインデックスも作成する必要があります。ツリー内の多数のオブジェクトを含むすべてのコンテンナにインデックスを作成してください (多数であるかどうかは、ツリー内の他のオブジェクトの数との相対で判断されます)。インデックスの作成方法については、ディレクトリサーバーのマニュアルを参照してください。vlv のソート値は cn uid に設定し、vlv フィルタと範囲は次のリストのように定義します。
getpwent: vlvFilter: (objectclass=posixAccount), vlvScope: 1 getspent: vlvFilter: (objectclass=posixAccount), vlvScope: 1 getgrent: vlvFilter: (objectclass=posixGroup), vlvScope: 1 gethostent: vlvFilter: (objectclass=ipHost), vlvScope: 1 getnetent: vlvFilter: (objectclass=ipNetwork), vlvScope: 1 getprotoent: vlvFilter: (objectclass=ipProtocol), vlvScope: 1 getrpcent: vlvFilter: (objectclass=oncRpc), vlvScope: 1 getaliasent: vlvFilter: (objectclass=rfc822MailGroup), vlvScope: 1 getserviceent: vlvFilter: (objectclass=ipService), vlvScope: 1 |
インデックスを作成すると、検索パフォーマンスが向上する反面、次のような代価も発生します。
データベースの変更が遅くなる
保守するインデックスが増えるほど、データベースの更新に時間がかかります。特に部分文字列 (サブストリング) インデックスでは、属性値が作成または変更されるたびにディレクトリサーバーが複数のインデックスファイルを生成するので、更新に時間がかかります。部分文字列インデックスでは、作成されるインデックスエントリの数は、インデックス付けされる文字列の長さに比例します。
より多くのシステム資源が必要になる
より多くのディスク領域が必要になる
インデックス付けする属性が増えると、ディレクトリサーバーが作成するファイル数も増えます。
より多くのメモリーが必要になる
動作効率を上げるため、ディレクトリサーバーはできるだけ多くのインデックスをメモリー上に置きます。このため、メモリーの消費量が非常に大きくなります。
ディスクアクセスが増える
あまり使用されないインデックスを持っていると、利用頻度の低いインデックスファイルがディスクに書き出されてメモリーから削除された後に、より利用頻度の高いインデックスファイルがディスクから読み込まれます。