共用方式為


使用 Event1644Reader.ps1 分析 Windows Server 中的 LDAP 查詢效能

本文說明腳本,可協助分析 Windows Server 中的 Active Directory 事件標識碼 1644。 檢閱 使用腳本 的步驟,然後 分析您的問題

原始 KB 編號: 3060643

關於 Event1644Reader.ps1 腳本

Active Directory 事件標識碼 1644 會記錄在 Directory 服務事件記錄檔中。 此事件會識別 Active Directory 域控制器所服務的昂貴、效率低下或速度緩慢的輕量型目錄存取通訊協定 (LDAP) 搜尋。 NTDS 一般事件標識碼 1644 可以篩選為根據所流覽 Active Directory 資料庫中的物件數目、傳回的物件數目,或域控制器上的 LDAP 搜尋運行時間,在目錄服務事件記錄檔中記錄 LDAP 搜尋。 如需事件標識碼 1644 的詳細資訊,請參閱 Hotfix 2800945將效能數據新增至 Active Directory 事件記錄檔。

Event1644Reader.ps1 是 Windows PowerShell 腳本,可擷取 1644 個裝載於已儲存目錄服務事件記錄中的數據。 然後,它會將該數據匯入Microsoft Excel 電子表格中的一系列數據透視表,以協助系統管理員深入瞭解域控制器和產生這些查詢的用戶端所服務的 LDAP 工作負載。

如何取得腳本

您可以從核心基礎結構和安全性部落格文章 取得腳本:如何在Active Directory 中尋找昂貴、效率低效且長時間執行的LDAP查詢。

注意

腳本會附加在具有檔名的部落格文章Event1644Reader.zip

腳本中心免責聲明
任何Microsoft標準支援程式或服務都不支援範例腳本。 範例腳本會依目前情況提供,不需任何種類的擔保。 Microsoft進一步否認所有默示擔保,包括不受限制,任何適銷性或適合特定用途的默示擔保。 範例腳本和檔使用或效能所造成的整個風險仍與您一起。 在任何情況下,不得Microsoft,其作者或參與建立、製作或傳遞腳本的任何其他人,對任何損害負責(包括但不限於商業利潤損失、業務中斷、商業中斷、商業資訊遺失或其他金錢損失)因使用或無法使用範例腳本或檔而造成的損害。 即使Microsoft已被告知這種損害的可能性。

在線對等支援
如需在線對等支援,請加入官方腳本傢伙論壇!若要在範例腳本中提供意見反應或回報錯誤,請在此腳本的 [討論] 索引卷標上啟動新的討論。

如何使用指令碼

若要進一步分析事件標識碼 1644 中擷取的 LDAP 查詢,請遵循下列步驟:

  1. 請確定您要疑難解答的域控制器擷取增強的 ** 1644 事件元數據。

    注意

    Windows Server 2012 R2 藉由記錄 LDAP 查詢和其他元數據的持續時間,新增了增強的 1644 事件記錄。 增強的 1644 事件記錄會由 Hotfix 2800945轉送至 Windows Server 2012、Windows Server 2008 R2 和 Windows Server 2008。

  2. 將下列 Field Engineering 登入專案的值設定為 5: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics\Field Engineering

    注意

    將現場工程記錄檔詳細資訊設定為 5 會導致其他事件記錄在目錄服務事件記錄檔中。 當您未主動收集 1644 事件時,將字段工程重設為預設值 0。 (此動作不需要重新啟動。

  3. 如果下列登錄專案存在,請以毫秒為單位,將值變更為所需的臨界值。 如果特定登錄專案不存在,請使用該名稱建立新的項目,然後將其值設定為所需的臨界值,以毫秒為單位。

    登錄路徑 資料類型 預設值
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Search Time Threshold (msecs) 下載 30,000
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Expensive Search Results Threshold 下載 10,000
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\無效率搜尋結果閾值 下載 1,000

    注意

    • 啟用現場工程記錄層級且未使用搜尋時間臨界值 (msecs) 登錄專案或設定為 0 時,時間閾值的預設值為 30,000 毫秒。 (此動作不需要重新啟動。
    • 其中一個策略是設定低效搜尋結果閾值和昂貴搜尋結果閾值登錄設定的登錄值,然後專注於搜尋時間保留 (msecs) 所識別的事件。 從較大的值開始,例如 100 毫秒,然後在您將環境中發生的查詢優化時,以累加方式減少值。
    • Event1644Reader.ps1 可以剖析來自多個域控制器的事件。 在您想要檢閱 LDAP 搜尋的所有域控制器上,設定現場工程、搜尋時間、昂貴且效率不佳的登錄機碼設定。
  4. 從下載 Event1644Reader.ps1 檔案,您可以從核心基礎結構和安全性部落格文章 瞭解如何在 Active Directory 中尋找昂貴、沒有效率且長時間執行的 LDAP 查詢,到將分析包含 1644 個事件的已儲存 Active Directory 服務 EVTX 檔案的計算機。

    這部計算機應該已安裝 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 檔案。
    • 輸入 drive:\path 包含要剖析之 EVTX 檔案的路徑。

    注意

    Event1644Reader.ps1 會剖析所有上層目錄服務事件記錄檔中的 1644 事件,這些事件會在每次腳本執行時位於目標路徑中。

  10. 開啟工作表以檢閱數據並逐步解說一系列索引標籤,然後視需要儲存 Excel 電子表格。 如需工作表中索引標籤的詳細資訊,請參閱 1644Reder.ps1 所建立 Excel 電子表格的逐步解說一節。

    注意

    *.csv工具所建置的檔案不會自動移除。 請考慮在調查完成之後清除 *.csv檔案。

其他相關資訊

Event1644Reader.ps1 所建立 Excel 電子表格的逐步解說

Event1644Reader.ps1 會從已儲存的 Directory Service 事件記錄檔中擷取 1644 事件的元數據,並將該數據匯入 Microsoft Excel 電子表格中的一系列索引卷標式工作表。

下表摘要說明每個索引標籤中包含的資料:

索引標籤 描述
RawData 事件標識碼 1644 所擷取的每個數據欄位都會匯入至離散數據行。 數據篩選會自動啟用,以便您可以排序或篩選任何數據行標頭。 如果來自多個域控制器的 1644 事件記錄檔位於與 PowerShell 腳本或系統管理員指定的目錄相同的目錄中,請使用篩選來檢視以特定域控制器為目標的 LDAP 查詢。
Top_StartingNode 提供指定範例中LDAP查詢的目標目錄分割區排序列表。 如果大部分的查詢發生在單一數據分割中(架構、組態或網域),請考慮將該分割區新增為其餘數據透視表中的篩選。 鑽研詳細數據會公開最上層篩選條件(例如LDAP查詢)、發出這些查詢的用戶端IP,以及這些查詢的日期和時間戳。
Top_Callers 列出以總計百分比遞減搜尋計數順序發出LDAP查詢的用戶端IP位址。 執行總數的百分比可協助您識別頂級來電者。 (也就是說,前10個或20個呼叫端可能會產生80%的查詢量,假設您的問題太多。 鑽研詳細數據會公開指定範例中每個用戶端發出 LDAP 查詢的篩選和日期和時間步驟。
Top_Filters 以遞減磁碟區順序列出最常發出的LDAP查詢。 這包括平均搜尋時間。 鑽研詳細數據會公開LDAP用戶端的IP位址,以及提交每個查詢的日期和時間。
TotalSearchTime by Callers 以範例中所有LDAP查詢的總搜尋時間遞減順序列出用戶端IP位址。 鑽研詳細數據會識別LDAP查詢,以及發出每個查詢的日期和時間。
TotalSearchTime by Filters 以總搜尋時間的遞減順序列出LDAP查詢。 鑽研詳細數據會公開LDAP用戶端的IP位址,以及提交每個相符查詢的日期和時間。
搜尋時間排名 顯示以時間為基礎的四分位數中發生的LDAP查詢數目。 查詢速度較慢。 如果查詢不是太常發出,則查詢速度較快。 Microsoft Exchange 希望 Exchange 伺服器發出的 LDAP 查詢以 50 毫秒或更少的方式解析。 因此,第一個四分位數群組著重於該時間的“貯體”。
空白樞紐 這是您可以視需要變更的空白數據透視表,以顯示案例的特定數據。

案例分析

如果LDAP查詢速度緩慢,或域控制器上的CPU使用量偏高,這可能是因為過度發出的查詢、效率不佳的查詢、這些查詢的一些組合、異步線程佇列 (ATQ) 集區耗盡或大量變更通知所造成。

如果用戶端發出昂貴、效率不佳或大量的LDAP查詢,請使用Event1644Reader.ps1來收集域控制器上的數據,以識別用戶端的IP位址。 然後,將這類查詢對應至用戶端電腦上的進程標識碼、進程名稱或呼叫的應用程式。

下表列出此問題的可能優化。

優化/緩和措施 概要
停止過多的工作負載。 如果大量或LDAP查詢造成服務停止,請專注於最上層的呼叫用戶端,並努力找出並消除過多工作負載的來源。

識別應用程式的可能選項包括使用 PROCMON、ETL/ETW 追蹤,以及偵錯分析,以識別在用戶端上產生LDAP查詢的應用程式。 另一個策略是使用頂端服務或移除產生LDAP查詢的應用程式的除以兩種方法。 發出的查詢可能會牽涉到呼叫的應用程式或進程。
安裝更新的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查詢優化,以更快速地執行。 查詢語法可能需要重新建構,才能更快速地執行。
將查詢元素移至篩選條件內的左側或右側,可以改善效能。
新增雙精度浮點數可能會改善查詢效能。
請考慮減少樹狀結構中較低查詢所瀏覽的物件數目。
減少查詢所傳回的屬性數目。
視需要將索引新增至 Active Directory 屬性。 新增索引可以改善查詢效能。 這有增加資料庫大小的副作用,而且可能會在索引建置期間暫時延遲 Active Directory 複寫。
判斷查詢優化器和其他元件中是否存在程式代碼缺失。 LDAP 查詢優化器和其他元件的缺陷可以降低輸送量。

已知問題

Excel 電子表格中的值不會在使用非英文語言的計算機上適當顯示或轉譯。

例如,當 Get-Culture Windows PowerShell Cmdlet 指出區域設定時,就會在計算機上發生此問題,如下所示:

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 電子表格問題中的數位。

若要解決此問題,請將 [區域設定] 專案中的 [小數點] 符號變更為 控制台 中的句號 。

如需LDAP查詢的詳細資訊,請參閱下列部落格: 如何在Active Directory 中尋找昂貴、效率低下且長時間執行的LDAP查詢