こんにちは。サイオステクノロジーの木村です。
Active Directory(AD) の属性にはインデックスをつけることができます。インデックスをつけると、その属性をキーに検索した際の検索スピードが速くなります。(インデックス付き属性についての公式ドキュメントはこちら)
Active Directoryには、デフォルトでインデックスがついている属性もありますが、そうでない属性もあります。
データ数が多い環境で、任意の属性をキーに検索することが頻繁にある場合など、その属性にインデックスをつけると検索処理を高速化できます。
そこで今回は、属性にインデックスをつける方法をご紹介します。
スキーマ管理ツールの有効化
Windows PowerShell を起動し、下記のコマンドを実行して、スキーマ 管理ツールを有効化します。
regsvr32.exe schmmgmt.dll
インデックスの作成
1. [スタート] – [ファイル名を指定して実行] をクリックして立ち上げ、「mmc」と入力して「OK」をクリックします。
2. Microsoft 管理コンソールにて、[ファイル] – [スナップインの追加と削除] をクリックします。
3. [Active Directory スキーマ] を選択して「追加」をクリックします。
4. 「OK」をクリックします。
5. [Active Directory スキーマ] を展開し、[属性] を選択すると、右側に属性の一覧が表示されます。
6. 一覧よりインデックスを付与したい属性を右クリックし、[プロパティ] をクリックします。
7. [この属性のインデックスを作成する(I)] にチェックを入れ、「適用」をクリックします。
「OK」をクリックしてウィンドウを閉じます。
以上でインデックスの作成は完了です。
インデックス付き属性の確認
既存でインデックスがついている属性がどれなのかを確認したい場合は、以下の方法で確認することができます。
1. [スタート] – [ファイル名を指定して実行] をクリックして立ち上げ、「ldp.exe」と入力して「OK」をクリックします。
2. [接続] – [バインド] をクリックします。
3. 管理者のユーザー情報を入力して「OK」をクリックします。
4. [参照] – [検索] をクリックします。
5. 以下のように入力して「実行」をクリックします。
- ベースDN:CN=Schema,CN=Configuration,DC=・・・以降は環境に合わせた値
- フィルター:(searchFlags=1)
- 属性:検索結果に表示する属性を絞りたい場合はその属性名を指定。全ての属性を表示する場合は「*」を指定。
6. 検索結果にインデックスがついている属性が全て表示され、インデックスがついている属性を確認することができます。
処理時間の比較
属性にインデックスをつけた場合とつけていない場合とで検索にかかる時間を比較してみました。
(検証した環境のユーザーデータ登録数:約13万件)
方法
Windows PowerShell にて以下のようにコマンドを実行して、属性をキーに Active Directory を検索し、検索にかかった時間を計測します。
[hashtable] $param = @{
ldapfilter = "(=)";
searchbase = ""}
(Measure-Command{get-aduser @param}).TotalSeconds;
属性にインデックスを付与していない場合
処理時間:約1秒
属性にインデックスを付与した場合
処理時間:約0.004秒
インデックスを付与していない場合に比べ、処理時間がかなり高速化されていました。
まとめ
検索時間は、Active Directory に登録されているデータ数や、その属性に登録されている値の一意性などにより異なってはきますが、インデックスをつけると検索がかなり高速化できることがわかります。
検索を高速化するにはとても便利なインデックスですが、インデックス付き属性が多いほど新しいインスタンスを作成するのに時間がかかったり、ADレプリケーションの時間にも影響するなどデメリットもあります。また、インデックスはクラスではなく属性に適用されるため、特定のクラスのインスタンスだけではなく全てのインスタンスに付与されます。
これらを考慮し、属性にインデックスを付与するか否かを検討する必要があります。