Usare Event1644Reader.ps1 per analizzare le prestazioni delle query LDAP in Windows Server
Questo articolo descrive uno script che consente di analizzare l'ID evento di Active Directory 1644 in Windows Server. Esaminare i passaggi per usare lo script e quindi analizzare i problemi.
Numero KB originale: 3060643
Informazioni sullo script Event1644Reader.ps1
L'ID evento di Active Directory 1644 viene registrato nel registro eventi del servizio directory. Questo evento identifica ricerche LDAP (Lightweight Directory Access Protocol) costose, inefficienti o lente gestite dai controller di dominio di Active Directory. L'ID evento NTDS Generale 1644 può essere filtrato per registrare ricerche LDAP nel registro eventi di Servizi directory in base al numero di oggetti nel database di Active Directory visitati, al numero di oggetti restituiti o al tempo di esecuzione della ricerca LDAP nel controller di dominio. Per altre informazioni sull'ID evento 1644, vedere Hotfix 2800945 aggiunge dati sulle prestazioni al registro eventi di Active Directory.
Event1644Reader.ps1 è uno script di Windows PowerShell che estrae i dati dagli eventi 1644 ospitati nei registri eventi del servizio directory salvati. Importa quindi i dati in una serie di tabelle pivot in un foglio di calcolo di Microsoft Excel per consentire agli amministratori di ottenere informazioni dettagliate sui carichi di lavoro LDAP gestiti dai controller di dominio e dai client che generano tali query.
Come ottenere lo script
È possibile ottenere lo script dal post del blog Core Infrastructure and Security Come trovare query LDAP costose, inefficienti e a esecuzione prolungata in Active Directory.
Note
Lo script è allegato nel post di blog con il nome file Event1644Reader.zip
Dichiarazione di non responsabilità di Script Center
Gli script di esempio non sono supportati in alcun programma o servizio di supporto standard Microsoft. Gli script di esempio vengono forniti così come sono senza garanzia di alcun tipo. Microsoft dichiara ulteriormente tutte le garanzie implicite, tra cui, senza limitazione, eventuali garanzie implicite di commerciabilità o di idoneità per uno scopo specifico. L'intero rischio derivante dall'uso o dalle prestazioni degli script di esempio e dalla documentazione rimane all'utente. In nessun caso Microsoft, i suoi autori o altri utenti coinvolti nella creazione, produzione o consegna degli script saranno responsabili di eventuali danni (inclusi, senza limitazioni, danni per perdita di profitti aziendali, interruzione dell'attività, perdita di informazioni aziendali o altre perdite di dati aziendali) derivanti dall'uso o dall'impossibilità di utilizzare gli script di esempio o la documentazione, anche se Microsoft è stata avvisata della possibilità di tali danni.
Supporto peer online
Per il supporto di peer online, partecipa al forum ufficiale sui ragazzi di scripting! Per fornire commenti e suggerimenti o segnalare bug negli script di esempio, avviare una nuova discussione nella scheda Discussioni per questo script.
Come usare lo script
Per analizzare meglio le query LDAP acquisite nell'ID evento 1644, seguire questa procedura:
Assicurarsi che i controller di dominio che si stanno risolvendo i problemi di acquisizione dei metadati dell'evento avanzati ** 1644.
Note
Windows Server 2012 R2 ha aggiunto la registrazione degli eventi 1644 avanzata registrando la durata delle query LDAP e altri metadati. La registrazione degli eventi 1644 avanzata è stata backportata in Windows Server 2012, Windows Server 2008 R2 e Windows Server 2008 tramite hotfix 2800945.
Impostare il valore della voce del Registro di sistema Field Engineering seguente su 5:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics\Field Engineering
Note
Se si imposta il livello di dettaglio del log di progettazione dei campi su 5, gli altri eventi verranno registrati nel registro eventi del servizio directory. Ripristinare il valore predefinito di 0 quando non si raccolgono attivamente 1644 eventi. Questa azione non richiede un riavvio.
Se esistono le voci del Registro di sistema seguenti, modificare i valori impostando la soglia desiderata in millisecondi. Se una particolare voce del Registro di sistema non esiste, creare una nuova voce con tale nome e quindi impostarne il valore sulla soglia desiderata in millisecondi.
Percorso del Registro di sistema Tipo di dati Default value HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Search Time Threshold (msecs) 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\Soglia dei risultati della ricerca inefficiente DWORD 1.000 Note
- Quando il livello di registrazione di Field Engineering è abilitato e la voce del Registro di sistema Search Time Threshold (msecs) non viene usata o è impostata su 0, il valore predefinito della soglia temporale è di 30.000 millisecondi. Questa azione non richiede un riavvio.
- Una strategia consiste nell'impostare il valore del Registro di sistema per le impostazioni del Registro di sistema Inefficient Search Results Threshold (Soglia risultati ricerca inefficiente) e Quindi concentrarsi sugli eventi identificati dal blocco tempo di ricerca (msec). Iniziare con un valore maggiore come 100 millisecondi e quindi diminuire in modo incrementale il valore durante l'ottimizzazione delle query eseguite nell'ambiente.
- Event1644Reader.ps1 può analizzare gli eventi da più controller di dominio. Configurare le impostazioni di progettazione dei campi, tempo di ricerca, costoso e inefficiente della chiave del Registro di sistema in tutti i controller di dominio in cui si desidera esaminare le ricerche LDAP.
Scaricare il file Event1644Reader.ps1 da You can get the script from the Core Infrastructure and Security Blog How to find expensive, inefficient and long running LDAP queries in Active Directory to the computer that will analyze saved Active Directory Service EVTX files that contain 1644 events.
Nel computer deve essere installato Microsoft Excel 2010 o versione successiva e deve disporre di spazio su disco sufficiente per ospitare i registri eventi del servizio directory che verranno analizzati dallo script.
Copiare i registri eventi del servizio directory salvati che contengono 1644 eventi dai controller di dominio in cui è stata abilitata la registrazione degli eventi 1644 nel computer di analisi 1644.
In Esplora risorse fare clic con il pulsante destro del mouse sul file Event1644Reader.ps1 e quindi scegliere Esegui con PowerShell.
Di seguito è riportato lo screenshot di questo passaggio:
Premere Y per ignorare i criteri di esecuzione di PowerShell in base alle esigenze.
Specificare il percorso dei file EVTX da analizzare.
Quando viene visualizzata la richiesta come screenshot seguente, eseguire le azioni seguenti:
- Premere INVIO per analizzare tutti i file EVTX che si trovano nella stessa directory del file Enent1644Reader.ps1.
- Digitare il
drive:\path
percorso che contiene i file EVTX da analizzare.
Note
Event1644Reader.ps1 analizza 1644 eventi in tutti i registri eventi del servizio directory di livello superiore che si trovano nel percorso di destinazione ogni volta che viene eseguito lo script.
Aprire il foglio di lavoro per esaminare i dati e esaminare la serie di schede e quindi salvare il foglio di calcolo di Excel in base alle esigenze. Per altre informazioni sulle schede nel foglio di lavoro, vedere la sezione Procedura dettagliata del foglio di calcolo di Excel creato dalla sezione 1644Reder.ps1 .
Note
*.csv file compilati dallo strumento non vengono rimossi automaticamente. Prendere in considerazione l'eliminazione dei file *.csv al termine dell'indagine.
Ulteriori informazioni
Procedura dettagliata del foglio di calcolo di Excel creato da Event1644Reader.ps1
Event1644Reader.ps1 estrae i metadati da 1644 eventi nei registri eventi del servizio directory salvati e importa tali dati in una serie di fogli di lavoro a schede in un foglio di calcolo di Microsoft Excel.
La tabella seguente riepiloga i dati contenuti in ogni scheda:
Scheda | Descrizione |
---|---|
RawData | Ogni campo dati acquisito dall'ID evento 1644 viene importato in colonne discrete. Il filtro dati è abilitato automaticamente in modo da poter ordinare o filtrare in base a qualsiasi intestazione di colonna. Se i registri eventi 1644 da più controller di dominio si trovano nella stessa directory dello script di PowerShell o della directory specificata dall'amministratore, usare filtri per visualizzare le query LDAP destinate a controller di dominio specifici. |
Top_StartingNode | Fornisce un elenco ordinato delle partizioni di directory destinate alle query LDAP in un determinato esempio. Se la maggior parte delle query si verificano in una singola partizione (schema, configurazione o dominio), prendere in considerazione l'aggiunta di tale partizione come filtro nelle tabelle pivot rimanenti. I dettagli del drill-through espongono i filtri principali,ad esempio la query LDAP, gli INDIRIZZI IP client che hanno emesso tali query e i timestamp di data e ora per tali query. |
Top_Callers | Elenca gli indirizzi IP client che hanno emesso query LDAP nell'ordine di conteggio delle ricerche decrescente con percentuale del totale complessivo. La percentuale di totale di esecuzione consente di identificare i chiamanti principali. Ovvero, i primi 10 o 20 chiamanti possono generare l'80% del volume di query, presupponendo che un numero eccessivo di chiamate sia il problema. I dettagli del drill-through espongono filtri e passaggi di data e ora che ogni query LDAP rilasciata dal client in un determinato esempio. |
Top_Filters | Elenca le query LDAP più frequenti in ordine decrescente del volume. Ciò include il tempo medio di ricerca. I dettagli del drill-through espongono l'indirizzo IP del client LDAP e la data e l'ora di invio di ogni query. |
TotalSearchTime by Callers | Elenca gli indirizzi IP client in ordine decrescente del tempo di ricerca totale in tutte le query LDAP nell'esempio. I dettagli del drill-through identificano le query LDAP e la data e l'ora di esecuzione di ogni query. |
TotalSearchTime by Filters | Elenca le query LDAP in ordine decrescente del tempo di ricerca totale. I dettagli del drill-through espongono l'indirizzo IP del client LDAP e la data e l'ora di invio di ogni query corrispondente. |
Classificazioni dei tempi di ricerca | Visualizza il numero di query LDAP che si sono verificate in quartili basati sul tempo. Le query più lente sono negative. Le query più veloci sono valide se non vengono eseguite troppo spesso. Microsoft Exchange vuole che le query LDAP eseguite dai server Exchange vengano risolte in meno di 50 millisecondi. Quindi, il primo gruppo quartile si concentra su quel "bucket". |
Pivot vuoto | Si tratta di una tabella pivot vuota che è possibile modificare in base alle esigenze per visualizzare i dati specifici per lo scenario. |
Analisi degli scenari
Se le query LDAP sono lente o se l'utilizzo della CPU è elevato nei controller di dominio, ciò può essere causato da query eseguite eccessivamente, query inefficienti, alcune combinazioni di queste query, esaurimento del pool ATQ (Asynchronous Thread Queue) o molte notifiche di modifica.
Se i client eseguono query LDAP costose, inefficienti o numerose, usare Event1644Reader.ps1 per raccogliere dati nei controller di dominio per identificare gli indirizzi IP dei client. Eseguire quindi il mapping di tali query all'ID processo, al nome del processo o all'applicazione chiamante nei computer client.
Nella tabella seguente sono elencate le possibili ottimizzazioni per questo problema.
Ottimizzazione/mitigazione | Riepilogo |
---|---|
Arrestare il carico di lavoro eccessivo. | Se un numero elevato di query o LDAP causa l'arresto del servizio, concentrarsi sui client chiamanti principali e lavorare per identificare ed eliminare l'origine del carico di lavoro eccessivo. Le opzioni possibili per identificare le applicazioni includono l'uso di PROCMON, la traccia ETL/ETW e l'analisi di debug per identificare l'applicazione che genera query LDAP nel client. Un'altra strategia consiste nell'usare un approccio di divisione per due di servizi o rimozione di applicazioni che generano query LDAP. Le query eseguite possono implicare l'applicazione o il processo chiamante. |
Installare un'utilità di ottimizzazione query LDAP aggiornata. | Windows Server 2012 R2 contiene un'utilità di ottimizzazione query LDAP aggiornata che migliora le prestazioni per la maggior parte delle query. I subset di Windows Server 2012 R2 vengono backportati in Windows Server 2008 R2 e Windows Server 2012 nell'hotfix 2862304. |
Assicurarsi che i client inviino query ai controller di dominio ottimali per il sito. | L'invio di query LDAP attraverso la rete WAN introduce la latenza di rete nel recapito della query LDAP al controller di dominio e alla risposta al client. Assicurarsi che i siti e le definizioni di subnet di Active Directory esistano per i computer client e server in Active Directory. Assicurarsi che le applicazioni non dispongano di riferimenti hardcoded ai controller di dominio del sito remoto o ai controller di dominio scrivibili in lettura solo quando esistono controller di dominio ottimali per il sito. |
Collaborare con gli sviluppatori di software per ridurre la frequenza con cui vengono eseguite le query. Ciò include l'uso della memorizzazione nella cache. | Anche le query eseguite in modo efficiente possono ridurre le dimensioni appropriate e configurare un controller di dominio se le query vengono eseguite troppo spesso. Le applicazioni possono dover limitare il volume di query o memorizzare nella cache i risultati delle query per ridurre il carico di rete, LDAP e CPU. |
Ottimizzare la query LDAP per l'esecuzione più rapida. | La sintassi delle query potrebbe dover essere ristrutturata per essere eseguita più rapidamente. Lo spostamento degli elementi di query a sinistra o a destra all'interno del filtro può migliorare le prestazioni. L'aggiunta di un doppio "not" può migliorare le prestazioni delle query. Valutare la possibilità di ridurre il numero di oggetti visitati avviando query inferiori nell'albero. Ridurre il numero di attributi restituiti dalle query. |
Aggiungere indici agli attributi di Active Directory in base alle esigenze. | L'aggiunta di indici può migliorare le prestazioni delle query. Questo ha l'effetto collaterale di aumentare le dimensioni del database e può ritardare temporaneamente la replica di Active Directory durante la compilazione dell'indice. |
Determinare se un difetto di codice esiste in Query Optimizer e in altri componenti. | I difetti nell'utilità di ottimizzazione query LDAP e altri componenti possono ridurre la velocità effettiva. |
Problema noto
I valori nel foglio di calcolo di Excel non vengono visualizzati o visualizzati in modo appropriato nei computer che utilizzano lingue non inglesi.
Ad esempio, questo si verifica in un computer quando il cmdlet Get-Culture di Windows PowerShell indica l'impostazione a livello di area come indicato di seguito:
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)
In questo caso, il rendering dei numeri nel foglio di calcolo di Excel viene eseguito come illustrato nello screenshot seguente:
Per risolvere questo problema, modificare il simbolo decimale in un punto (.) nell'elemento Impostazioni area in Pannello di controllo.
Per altre informazioni sulle query LDAP, vedere il blog seguente: Come trovare query LDAP costose, inefficienti e a esecuzione prolungata in Active Directory