次の方法で共有


Event1644Reader.ps1 を使用して Windows Server の LDAP クエリのパフォーマンスを分析する

この記事では、Windows Server で Active Directory イベント ID 1644 を分析するのに役立つスクリプトについて説明します。 スクリプトを使用する ステップを確認し 問題を 分析します

元の KB 番号: 3060643

Event1644Reader.ps1 スクリプトについて

Active Directory イベント ID 1644 は、ディレクトリ サービス のイベント ログに記録されます。 このイベントは、Active Directory ドメイン コントローラーによって処理される、負荷の高い、非効率的、または低速のライトウェイト ディレクトリ アクセス プロトコル (LDAP) 検索を識別します。 NTDS General イベント ID 1644 をフィルター処理して、アクセスされた Active Directory データベース内のオブジェクトの数、返されたオブジェクトの数、またはドメイン コントローラーでの LDAP 検索の実行時間に基づいて、ディレクトリ サービス イベント ログに LDAP 検索を記録できます。 イベント ID 1644 の詳細については、「 Hotfix 2800945が Active Directory イベント ログにパフォーマンス データを追加するを参照してください。

Event1644Reader.ps1 は、保存されたディレクトリ サービス イベント ログでホストされている 1644 イベントからデータを抽出する Windows PowerShell スクリプトです。 次に、そのデータを Microsoft Excel スプレッドシートの一連のピボット テーブルにインポートして、管理者が、これらのクエリを生成しているドメイン コントローラーとクライアントによって処理されている LDAP ワークロードに関する分析情報を得るのに役立ちます。

スクリプトを取得する方法

スクリプトは、コア インフラストラクチャとセキュリティに関するブログの投稿 Active Directory でコストが高く、効率が悪く、実行時間の長い LDAP クエリを見つける方法から入手できます。

Note

スクリプトは、ファイル名がEvent1644Reader.zipされたブログ投稿に添付されています

スクリプト センターの免責事項
サンプル スクリプトは、Microsoft 標準サポート プログラムまたはサービスではサポートされていません。 サンプル スクリプトは、いかなる種類の保証もなく、現状のまま提供されます。 Microsoft は、商品性または特定の目的への適合性に関する黙示の保証を含むが、これらに限定されない、すべての黙示的保証を一切放棄します。 サンプル スクリプトとドキュメントの使用またはパフォーマンスから生じるリスク全体は、引き続きご利用ください。 スクリプトの作成、制作、または配信に関与する Microsoft、その作成者、または他の誰かが、サンプル スクリプトまたはドキュメントの使用または使用不能から生じたいかなる損害 (事業利益の損失、事業中断、ビジネスの中断、ビジネス情報の損失、またはその他の一切の損失を含むがこれらに限定されない) に対して責任を負うものではありません。 このような損害の可能性について Microsoft から通知を受けた場合でも、

オンライン ピアのサポート
オンライン ピア サポートについては、 公式 Scripting Guys フォーラムに参加してください! サンプル スクリプトでフィードバックを提供したりバグを報告したりするには、このスクリプトの Discussions タブで新しいディスカッションを開始します。

スクリプトの使用方法

イベント ID 1644 でキャプチャされた LDAP クエリをより適切に分析するには、次の手順に従います。

  1. トラブルシューティングを行っているドメイン コントローラーが、拡張 ** 1644 イベント メタデータをキャプチャしていることを確認します。

    Note

    Windows Server 2012 R2 では、LDAP クエリとその他のメタデータの期間を記録することで、拡張された 1644 イベント ログが追加されました。 拡張された 1644 イベント ログは、修正プログラム 2800945によって Windows Server 2012、Windows Server 2008 R2、および Windows Server 2008 にバックポートされました。

  2. 次のフィールド エンジニアリング レジストリ エントリの値を 5 に設定します。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics\Field Engineering

    Note

    フィールド エンジニアリング ログの詳細度を 5 に設定すると、他のイベントがディレクトリ サービス イベント ログに記録されます。 アクティブに 1644 イベントを収集していない場合は、フィールド エンジニアリングを既定値の 0 にリセットします。 (この操作では再起動は必要ありません)。

  3. 次のレジストリ エントリが存在する場合は、必要なしきい値 (ミリ秒単位) に値を変更します。 特定のレジストリ エントリが存在しない場合は、その名前の新しいエントリを作成し、その値を必要なしきい値 (ミリ秒単位) に設定します。

    レジストリ パス データの種類 規定値
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Search Time Threshold (ミリ秒) DWORD 30,000
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Expensive Search Results Threshold DWORD 10,000
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\非効率的な検索結果のしきい値 DWORD 1,000

    Note

    • フィールド エンジニアリング ログ レベルが有効で、検索時間しきい値 (ミリ秒) レジストリ エントリが使用されていない場合、または 0 に設定されている場合、時間しきい値の既定値は 30,000 ミリ秒です。 (この操作では再起動は必要ありません)。
    • 1 つの戦略は、非効率的な検索結果のしきい値とコストの高い検索結果のしきい値の両方のレジストリ設定のレジストリ値を設定し、検索時間の保持 (ミリ秒) で識別されるイベントに焦点を当てることです。 100 ミリ秒などの大きな値から開始し、環境内で発生しているクエリを最適化するときに値を段階的に減らします。
    • Event1644Reader.ps1 は、複数のドメイン コントローラーからのイベントを解析できます。 LDAP 検索を確認するすべてのドメイン コントローラーで、フィールド エンジニアリング、検索時間、コストが高く、非効率的なレジストリ キー設定を構成します。
  4. Event1644Reader.ps1 ファイルをダウンロードします。「コア インフラストラクチャとセキュリティ」ブログの投稿からスクリプトを取得できます 1644 イベントを含む保存済みの Active Directory サービス EVTX ファイルを分析するコンピューターに Active Directory でコストが高く、非効率的で実行時間の長い LDAP クエリを見つける方法について説明します。

    このコンピューターには、Microsoft Excel 2010 以降のバージョンがインストールされており、スクリプトで解析されるディレクトリ サービス イベント ログをホストするための十分なディスク領域が必要です。

  5. 1644 イベント ログを有効にしたドメイン コントローラーから、1644 イベントを含む保存されたディレクトリ サービス イベント ログを 1644 分析コンピューターにコピーします。

  6. Windows エクスプローラーで Event1644Reader.ps1 ファイルを右クリックし、 PowerShell で実行を選択します。

    この手順のスクリーンショットを次に示します。

    Event1644Reader.ps1 ファイルを右クリックし、[PowerShell で実行] を選択します。

  7. 必要に応じて、Y キーを押して PowerShell 実行ポリシーをバイパスします。

  8. 解析する EVTX ファイルのパスを指定します。

  9. 次のスクリーンショットとしてプロンプトが表示されたら、次のアクションを実行します。

    Event1644Reader.ps1 ファイルの実行に関する PowerShell コマンド。

    • Enter キーを押して、Enent1644Reader.ps1 ファイルと同じディレクトリにあるすべての EVTX ファイルを解析します。
    • 解析する EVTX ファイルを含む drive:\path パスを入力します。

    Note

    Event1644Reader.ps1 は、スクリプトが実行されるたびにターゲット パスに配置されているすべての上位レベルのディレクトリ サービス イベント ログの 1644 イベントを解析します。

  10. ワークシートを開いてデータを確認し、一連のタブを確認し、必要に応じて Excel スプレッドシートを保存します。 ワークシートのタブの詳細については、「1644Reder.ps1 で作成された Excel スプレッドシートの Walkthrough 」セクションを参照してください。

    Note

    *.csvツールによってビルドされたファイルは自動的に削除されません。 調査が完了したら、*.csv ファイルを消去することを検討してください。

詳細

Event1644Reader.ps1 によって作成される Excel スプレッドシートのチュートリアル

Event1644Reader.ps1 は、保存された Directory Service イベント ログの 1644 イベントからメタデータを抽出し、そのデータを Microsoft Excel スプレッドシート内の一連のタブ付きワークシートにインポートします。

次の表は、各タブに含まれるデータをまとめたものです。

Tab 説明
RawData イベント ID 1644 によってキャプチャされた各データ フィールドは、個別の列にインポートされます。 データ フィルター処理は自動的に有効になっているため、任意の列ヘッダーで並べ替えやフィルター処理を行うことができます。 複数のドメイン コントローラーの 1644 イベント ログが PowerShell スクリプトまたは管理者が指定したディレクトリと同じディレクトリに存在する場合は、フィルターを使用して、特定のドメイン コントローラーを対象とする LDAP クエリを表示します。
Top_StartingNode 特定のサンプルの LDAP クエリの対象となるディレクトリ パーティションの並べ替えられた一覧を提供します。 ほとんどのクエリが 1 つのパーティション (スキーマ、構成、またはドメイン) で発生している場合は、そのパーティションを残りのピボット テーブルのフィルターとして追加することを検討してください。 ドリルスルーの詳細では、上位のフィルター (LDAP クエリなど)、それらのクエリを発行したクライアント IP、およびそれらのクエリの日付と時刻のスタンプが公開されます。
Top_Callers 検索カウントの降順で LDAP クエリを発行したクライアント IP アドレスを総計の割合で一覧表示します。 実行中の合計に対する割合は、上位の呼び出し元を識別するのに役立ちます。 (つまり、上位 10 または 20 人の呼び出し元がクエリ ボリュームの 80% を生成している可能性があります。呼び出しが多すぎることが問題であると仮定します)。 ドリルスルーの詳細では、特定のサンプルでクライアントが発行した各 LDAP クエリのフィルターと日付と時刻のステップが公開されます。
Top_Filters 最も頻繁に発行される LDAP クエリを、ボリュームの降順で一覧表示します。 これには、平均検索時間が含まれます。 ドリルスルーの詳細では、LDAP クライアントの IP アドレスと、各クエリが送信された日時が公開されます。
TotalSearchTime by Callers サンプル内のすべての LDAP クエリの合計検索時間の降順にクライアント IP アドレスを一覧表示します。 ドリルスルーの詳細は、LDAP クエリと、各クエリが発行された日時を識別します。
フィルターによる TotalSearchTime LDAP クエリを合計検索時間の降順で一覧表示します。 ドリルスルーの詳細では、LDAP クライアントの IP アドレスと、一致する各クエリが送信された日時が公開されます。
検索時間のランク 時間ベースの四分位数で発生した LDAP クエリの数を表示します。 低速なクエリは不適切です。 クエリがあまり頻繁に発行されない場合は、より高速なクエリが適しています。 Microsoft Exchange では、Exchange サーバーによって発行された LDAP クエリを 50 ミリ秒以下で解決することを望んでいます。 そのため、最初の四分位数グループは、その時間の "バケット" に焦点を当てています。
空白のピボット これは空のピボット テーブルであり、シナリオの特定のデータを表示するために必要に応じて変更できます。

シナリオ分析

LDAP クエリが遅い場合、またはドメイン コントローラーで CPU 使用率が高い場合は、過剰に発行されたクエリ、非効率的なクエリ、これらのクエリの一部の組み合わせ、非同期スレッド キュー (ATQ) プールの枯渇、または多くの変更通知が原因である可能性があります。

クライアントが高コスト、非効率的、または多数の LDAP クエリを発行する場合は、Event1644Reader.ps1 を使用してドメイン コントローラー上のデータを収集し、クライアントの IP アドレスを識別します。 次に、このようなクエリを、クライアント コンピューター上のプロセス ID、プロセス名、または呼び出し元アプリケーションにマップします。

次の表に、この問題に対して考えられる最適化の一覧を示します。

最適化/軽減策 構文
過剰なワークロードを停止します。 多数のクエリまたは LDAP クエリによってサービスが停止する場合は、上位の呼び出し元クライアントに焦点を当て、過剰なワークロードのソースを特定して排除します。

アプリケーションを識別するオプションとして、PROCMON、ETL/ETW トレース、デバッグ分析を使用して、クライアントで LDAP クエリを生成するアプリケーションを特定できます。 もう 1 つの方法は、サービスをトッピングするか、LDAP クエリを生成しているアプリケーションを削除するという 2 除算アプローチを使用することです。 発行されたクエリは、呼び出し元のアプリケーションまたはプロセスに関係する可能性があります。
更新された LDAP クエリ オプティマイザーをインストールします。 Windows Server 2012 R2 には、ほとんどのクエリのパフォーマンスを向上させる更新された LDAP クエリ オプティマイザーが含まれています。 Windows Server 2012 R2 のサブセットは、 hotfix 2862304で Windows Server 2008 R2 および Windows Server 2012 にバックポートされます。
クライアントがサイト最適なドメイン コントローラーにクエリを送信していることを確認します。 WAN 経由で LDAP クエリを送信すると、ドメイン コントローラーへの LDAP クエリの配信とクライアントへの応答にネットワーク待機時間が発生します。 Active Directory のクライアント コンピューターとサーバー コンピューターに Active Directory サイトとサブネット定義が存在することを確認します。

アプリケーションに、リモート サイト ドメイン コントローラーまたは読み取り/書き込み可能なドメイン コントローラーへのハードコーディングされた参照が、サイトに最適なドメイン コントローラーが存在する場合にのみ含まれていないことを確認します。
ソフトウェア開発者と協力して、クエリが発行される頻度を減らします。 これには、キャッシュの使用が含まれます。 効率的に発行されたクエリでも、クエリが頻繁に発行される場合は、適切なサイズの構成済みのドメイン コントローラーを打ち負かすことができます。
アプリケーションでは、ネットワーク、LDAP、および CPU の負荷を軽減するために、クエリ ボリュームまたはキャッシュ クエリの結果を調整する必要がある場合があります。
LDAP クエリをより迅速に実行するように最適化します。 より迅速に実行するには、クエリ構文を再構築する必要がある場合があります。
フィルター内でクエリ要素を左または右に移動すると、パフォーマンスが向上する可能性があります。
"not" を 2 つ追加すると、クエリのパフォーマンスが向上する可能性があります。
ツリーの下位にあるクエリを開始して、アクセスされるオブジェクトの数を減らすことを検討してください。
クエリによって返される属性の数を減らします。
必要に応じて、Active Directory 属性にインデックスを追加します。 インデックスを追加すると、クエリのパフォーマンスが向上します。 これにより、データベース サイズが増えるという副作用があり、インデックスの作成中に Active Directory レプリケーションが一時的に遅れる可能性があります。
クエリ オプティマイザーとその他のコンポーネントにコードの欠陥が存在するかどうかを判断します。 LDAP クエリ オプティマイザーとその他のコンポーネントの欠陥により、スループットが低下する可能性があります。

既知の問題

Excel スプレッドシートの値は、英語以外の言語を使用するコンピューターでは適切に表示またはレンダリングされません。

たとえば、これは、Get-Culture Windows PowerShell コマンドレットが次のように地域設定を示す場合に、コンピューター上で発生します。

PS C:\Windows\System32\WindowsPowerShell\v1.0> Get-Culture  
LCID Name DisplayName  
---- ---- -----------
1031 de-DE German (Germany)

PS C:\Windows\System32\WindowsPowerShell\v1.0> Get-UICulture

LCID Name DisplayName  
---- ---- -----------
1033 en-US English (United States)

この場合、Excel スプレッドシートの数値は次のスクリーンショットのように表示されます。

Excel スプレッドシートの問題の数値。

この問題を解決するには、コントロール パネルの Decimal シンボル Region 設定項目のピリオド (.) に変更します。

LDAP クエリの詳細については、次のブログを参照してください。 Active Directory でコストが高く、非効率的で実行時間の長い LDAP クエリを見つける方法