Używanie Event1644Reader.ps1 do analizowania wydajności zapytań LDAP w systemie Windows Server
W tym artykule opisano skrypt, który ułatwia analizowanie identyfikatora zdarzenia usługi Active Directory 1644 w systemie Windows Server. Przejrzyj kroki, aby użyć skryptu, a następnie przeanalizuj problemy.
Oryginalny numer KB: 3060643
Informacje o skryptze Event1644Reader.ps1
Identyfikator zdarzenia usługi Active Directory 1644 jest rejestrowany w dzienniku zdarzeń usługi katalogowej. To zdarzenie identyfikuje kosztowne, nieefektywne lub powolne wyszukiwania protokołu LDAP (Lightweight Directory Access Protocol), które są obsługiwane przez kontrolery domeny usługi Active Directory. Identyfikator zdarzenia ogólnego NTDS 1644 można filtrować w celu rejestrowania wyszukiwań LDAP w dzienniku zdarzeń usług katalogowych na podstawie liczby obiektów w odwiedzonych bazach danych usługi Active Directory, liczby zwróconych obiektów lub czasu wykonywania wyszukiwania LDAP na kontrolerze domeny. Aby uzyskać więcej informacji na temat zdarzenia o identyfikatorze 1644, zobacz Poprawka 2800945 dodaje dane wydajności do dziennika zdarzeń usługi Active Directory.
Event1644Reader.ps1 jest skryptem programu Windows PowerShell, który wyodrębnia dane ze 1644 zdarzeń hostowanych w zapisanych dziennikach zdarzeń usługi Katalog. Następnie importuje te dane do serii tabel przestawnych w arkuszu kalkulacyjnym programu Microsoft Excel, aby ułatwić administratorom uzyskanie szczegółowych informacji na temat obciążeń LDAP obsługiwanych przez kontrolery domeny i klientów, którzy generują te zapytania.
Jak uzyskać skrypt
Skrypt można uzyskać z wpisu w blogu Core Infrastructure and Security How to find expensive, inefficient and long running LDAP queries in Active Directory (Jak znaleźć kosztowne, nieefektywne i długotrwałe zapytania LDAP w usłudze Active Directory).
Uwaga
Skrypt jest dołączony do wpisu w blogu z nazwą pliku Event1644Reader.zip
Zastrzeżenie centrum skryptów
Przykładowe skrypty nie są obsługiwane w ramach żadnego standardowego programu pomocy technicznej firmy Microsoft lub usługi. Przykładowe skrypty są dostarczane jako is bez gwarancji jakiegokolwiek rodzaju. Firma Microsoft dodatkowo zrzeka się wszelkich dorozumianych gwarancji, w tym, bez ograniczeń, wszelkich domniemanych gwarancji przydatności handlowej lub przydatności do określonego celu. Całe ryzyko wynikające z użycia lub wydajności przykładowych skryptów i dokumentacji pozostaje z Tobą. W żadnym wypadku firma Microsoft, jej autorzy lub ktokolwiek inny zaangażowany w tworzenie, produkcję lub dostarczanie skryptów nie ponosi odpowiedzialności za jakiekolwiek szkody (w tym, bez ograniczeń, szkody za utratę zysków biznesowych, przerwę w działalności, utratę informacji biznesowych lub inną stratę pieniężną) wynikające z korzystania z przykładowych skryptów lub dokumentacji lub niemożności korzystania z nich, nawet jeśli firma Microsoft została poinformowana o możliwości wystąpienia takich szkód.
Obsługa komunikacji równorzędnej online
Aby uzyskać pomoc dotyczącą komunikacji równorzędnej online, dołącz do oficjalnego forum scripting guys! Aby przekazać opinię lub zgłosić usterki w przykładowych skryptach, rozpocznij nową dyskusję na karcie Dyskusje dla tego skryptu.
Jak używać skryptu
Aby lepiej przeanalizować zapytania LDAP przechwycone w zdarzeniu o identyfikatorze 1644, wykonaj następujące kroki:
Upewnij się, że kontrolery domeny, których dotyczy rozwiązywanie problemów, przechwytują rozszerzone metadane zdarzeń ** 1644.
Uwaga
System Windows Server 2012 R2 dodał rozszerzone rejestrowanie zdarzeń 1644, rejestrując czas trwania zapytań LDAP i innych metadanych. Rozszerzone rejestrowanie zdarzeń 1644 zostało zawrócene do systemów Windows Server 2012, Windows Server 2008 R2 i Windows Server 2008 za pomocą poprawki 2800945.
Ustaw wartość następującego wpisu rejestru Inżynieria terenowa na 5:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics\Field Engineering
Uwaga
Ustawienie szczegółowości dziennika inżynierii pól na wartość 5 spowoduje zalogowanie innych zdarzeń w dzienniku zdarzeń usługi katalogowej. Zresetuj inżynierię pól z powrotem do wartości domyślnej 0, gdy nie są aktywnie zbierane zdarzenia 1644. (Ta akcja nie wymaga ponownego uruchomienia).
Jeśli istnieją następujące wpisy rejestru, zmień wartości na żądany próg w milisekundach. Jeśli określony wpis rejestru nie istnieje, utwórz nowy wpis o tej nazwie, a następnie ustaw jego wartość na żądany próg w milisekundach.
Ścieżka rejestru Typ danych Wartość domyślna HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Search Time Threshold (ms) 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\Inefficient Search Results Threshold DWORD 1,000 Uwaga
- Gdy poziom rejestrowania inżynierii terenowej jest włączony, a wpis rejestru próg czasu wyszukiwania (msecs) nie jest używany lub jest ustawiony na 0, wartość domyślna progu czasu wynosi 30 000 milisekund. (Ta akcja nie wymaga ponownego uruchomienia).
- Jedną ze strategii byłoby ustawienie wartości rejestru dla ustawień rejestru Nieefektywny próg wyników wyszukiwania i Kosztowny próg wyników wyszukiwania, a następnie skupienie się na zdarzeniach identyfikowanych przez blokadę czasu wyszukiwania (ms). Zacznij od większej wartości, takiej jak 100 milisekund, a następnie przyrostowo zmniejsz wartość podczas optymalizowania zapytań występujących w środowisku.
- Event1644Reader.ps1 może analizować zdarzenia z wielu kontrolerów domeny. Skonfiguruj ustawienia inżynierii terenowej, czasu wyszukiwania, kosztownych i nieefektywnych ustawień klucza rejestru na wszystkich kontrolerach domeny, na których chcesz przejrzeć wyszukiwania LDAP.
Pobierz plik Event1644Reader.ps1 z witryny Możesz uzyskać skrypt z wpisu w blogu Core Infrastructure and Security 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 (Jak znaleźć kosztowne, nieefektywne i długotrwałe zapytania LDAP w usłudze Active Directory) na komputerze, który będzie analizować zapisane pliki EVTX usługi Active Directory zawierające 1644 zdarzenia.
Ten komputer powinien mieć zainstalowany program Microsoft Excel 2010 lub nowszą wersję i powinien mieć wystarczającą ilość miejsca na dysku, aby hostować dzienniki zdarzeń usługi katalogowej, które będą analizowane przez skrypt.
Skopiuj zapisane dzienniki zdarzeń usługi katalogowej zawierające 1644 zdarzenia z kontrolerów domeny, w których włączono rejestrowanie zdarzeń 1644 na komputerze analizy 1644.
W Eksploratorze Windows kliknij prawym przyciskiem myszy plik Event1644Reader.ps1, a następnie wybierz pozycję Uruchom przy użyciu programu PowerShell.
Poniżej przedstawiono zrzut ekranu dla tego kroku:
Naciśnij klawisz Y, aby w razie potrzeby pominąć zasady wykonywania programu PowerShell.
Określ ścieżkę plików EVTX do przeanalizowania.
Po wyświetleniu monitu jako następującego zrzutu ekranu wykonaj następujące czynności:
- Naciśnij klawisz Enter, aby przeanalizować wszystkie pliki EVTX znajdujące się w tym samym katalogu co plik Enent1644Reader.ps1.
- Wpisz ścieżkę
drive:\path
zawierającą pliki EVTX do przeanalizowania.
Uwaga
Event1644Reader.ps1 analizuje 1644 zdarzenia we wszystkich dziennikach zdarzeń usługi katalogowej najwyższego poziomu, które znajdują się w ścieżce docelowej za każdym razem, gdy skrypt jest uruchamiany.
Otwórz arkusz, aby przejrzeć dane i przejść przez serię kart, a następnie zapisz arkusz kalkulacyjny programu Excel zgodnie z potrzebami. Aby uzyskać więcej informacji na temat kart w arkuszu, zobacz sekcję Przewodnik po arkuszu kalkulacyjnym programu Excel utworzonym przez 1644Reder.ps1 .
Uwaga
*.csv pliki utworzone przez narzędzie nie są automatycznie usuwane. Rozważ przeczyszczanie plików *.csv po zakończeniu badania.
Więcej informacji
Przewodnik po arkuszu kalkulacyjnym programu Excel utworzonym przez Event1644Reader.ps1
Event1644Reader.ps1 wyodrębnia metadane ze zdarzeń 1644 w zapisanych dziennikach zdarzeń usługi Directory Service i importuje te dane do serii arkuszy z kartami w arkuszu kalkulacyjnym programu Microsoft Excel.
Poniższa tabela zawiera podsumowanie danych zawartych na każdej karcie:
Tab | Opis |
---|---|
RawData | Każde pole danych przechwycone przez zdarzenie o identyfikatorze 1644 jest importowane do dyskretnych kolumn. Filtrowanie danych jest automatycznie włączone, dzięki czemu można sortować lub filtrować dowolny nagłówek kolumny. Jeśli 1644 dzienniki zdarzeń z wielu kontrolerów domeny znajdują się w tym samym katalogu co skrypt programu PowerShell lub katalogu określonego przez administratora, użyj filtrów, aby wyświetlić zapytania LDAP, które są przeznaczone dla określonych kontrolerów domeny. |
Top_StartingNode | Zawiera posortowaną listę partycji katalogów, które są objęte zapytaniami LDAP w danym przykładzie. Jeśli większość zapytań występuje w jednej partycji (schemat, konfiguracja lub domena), rozważ dodanie tej partycji jako filtru w pozostałych tabelach przestawnych. Szczegóły przeglądania szczegółowego uwidaczniają najważniejsze filtry (takie jak zapytanie LDAP), adresy IP klienta, które wystawiły te zapytania, oraz sygnatury daty i godziny dla tych zapytań. |
Top_Callers | Wyświetla listę adresów IP klienta, które wystawiły zapytania LDAP w kolejności malejącej liczby wyszukiwań z procentową sumą końcową. Procent sumy bieżącej pomaga zidentyfikować najważniejsze osoby wywołujące. (Oznacza to, że 10 lub 20 najpopularniejszych wywołujących może generować 80 procent woluminu zapytań przy założeniu, że problemem jest zbyt wiele wywołań). Szczegóły przeglądania szczegółowego uwidaczniają filtry oraz kroki daty i godziny, które każdy klient wystawił zapytania LDAP w danym przykładzie. |
Top_Filters | Wyświetla listę najczęściej wydawanych zapytań LDAP w malejącej kolejności woluminów. Obejmuje to średni czas wyszukiwania. Szczegóły przeglądania szczegółowego uwidaczniają adres IP klienta LDAP oraz datę i godzinę przesłania każdego zapytania. |
TotalSearchTime by Callers | Wyświetla listę adresów IP klienta w kolejności malejącej całkowitego czasu wyszukiwania we wszystkich zapytaniach LDAP w przykładzie. Szczegóły przeglądania szczegółowego identyfikują zapytania LDAP oraz datę i godzinę wydania każdego zapytania. |
TotalSearchTime według filtrów | Wyświetla listę zapytań LDAP w kolejności malejącej o łącznym czasie wyszukiwania. Szczegóły przeglądania szczegółowego uwidaczniają adres IP klienta LDAP oraz datę i godzinę przesłania każdego pasującego zapytania. |
Klasyfikacje czasu wyszukiwania | Przedstawia liczbę zapytań LDAP, które wystąpiły w kwartylach opartych na czasie. Wolniejsze zapytania są nieprawidłowe. Szybsze zapytania są dobre, jeśli nie są wystawiane zbyt często. Program Microsoft Exchange chce, aby zapytania LDAP wydawane przez serwery programu Exchange były rozwiązywane w ciągu 50 milisekund lub mniej. Dlatego pierwsza grupa kwartylowa skupia się na tym "zasobniku". |
Pusty wykres przestawny | Jest to pusta tabela przestawna, którą można zmienić zgodnie z wymaganiami, aby wyświetlić określone dane dla danego scenariusza. |
Analiza scenariuszy
Jeśli zapytania LDAP są powolne lub użycie procesora CPU jest wysokie na kontrolerach domeny, może to być spowodowane nadmiernie wystawionymi zapytaniami, nieefektywnymi zapytaniami, kombinacją tych zapytań, wyczerpaniem puli asynchronicznej kolejki wątków (ATQ) lub dużą ilością powiadomień o zmianach.
Jeśli klienci wydają kosztowne, nieefektywne lub wiele zapytań LDAP, użyj Event1644Reader.ps1 do zbierania danych na kontrolerach domeny, aby zidentyfikować adresy IP klientów. Następnie zamapuj takie zapytania na identyfikator procesu, nazwę procesu lub aplikację wywołującą na komputerach klienckich.
W poniższej tabeli wymieniono możliwe optymalizacje dla tego problemu.
Optymalizacja/ograniczanie ryzyka | Streszczenie |
---|---|
Zatrzymaj nadmierne obciążenie. | Jeśli wiele zapytań lub zapytań LDAP powoduje zatrzymanie usługi, skup się na najlepszych klientach wywołujących i pracuj nad zidentyfikowaniem i wyeliminowaniem źródła nadmiernego obciążenia. Możliwe opcje identyfikowania aplikacji obejmują używanie procmona, śledzenia ETL/ETW i analizy debugowania w celu zidentyfikowania aplikacji, która generuje zapytania LDAP na kliencie. Inną strategią jest użycie podejścia dzielenia przez dwa usługi uzupełniania lub usuwania aplikacji, które generują zapytania LDAP. Wystawione zapytania mogą dotyczyć wywołującej aplikacji lub procesu. |
Zainstaluj zaktualizowany optymalizator zapytań LDAP. | System Windows Server 2012 R2 zawiera zaktualizowany optymalizator zapytań LDAP, który poprawia wydajność większości zapytań. Podzestawy systemu Windows Server 2012 R2 są backportowane do systemów Windows Server 2008 R2 i Windows Server 2012 w poprawce 2862304. |
Upewnij się, że klienci przesyłają zapytania do kontrolerów domeny optymalnych dla lokacji. | Wysyłanie zapytań LDAP przez sieć WAN wprowadza opóźnienie sieci do dostarczania zapytania LDAP do kontrolera domeny i odpowiedzi na klienta. Upewnij się, że lokacje i definicje podsieci usługi Active Directory istnieją dla komputerów klienckich i serwerowych w usłudze Active Directory. Upewnij się, że aplikacje nie mają zakodowanych na stałe odwołań do zdalnych kontrolerów domeny lokacji ani kontrolerów domeny z możliwością odczytu tylko wtedy, gdy istnieją kontrolery domeny optymalne dla lokacji. |
Współpracuj z deweloperami oprogramowania, aby zmniejszyć częstotliwość wydawania zapytań. Obejmuje to korzystanie z buforowania. | Nawet wydajnie wydane zapytania mogą pokonać odpowiednio duży i skonfigurowany kontroler domeny, jeśli zapytania są wystawiane zbyt często. Aplikacje mogą wymagać ograniczenia liczby zapytań lub buforowania wyników zapytań w celu zmniejszenia obciążenia sieci, protokołu LDAP i procesora CPU. |
Zoptymalizuj zapytanie LDAP, aby szybciej je wykonać. | Może być konieczne zrestrukturyzowanie składni zapytań, aby można było szybciej wykonać. Przeniesienie elementów zapytania w lewo lub w prawo w filtrze może zwiększyć wydajność. Dodanie podwójnej wartości "nie" może zwiększyć wydajność zapytań. Rozważ zmniejszenie liczby obiektów odwiedzanych przez uruchamianie zapytań w drzewie niżej. Zmniejsz liczbę atrybutów zwracanych przez zapytania. |
W razie potrzeby dodaj indeksy do atrybutów usługi Active Directory. | Dodanie indeksów może zwiększyć wydajność zapytań. Skutkuje to zwiększeniem rozmiaru bazy danych i może tymczasowo opóźnić replikację usługi Active Directory podczas kompilacji indeksu. |
Określ, czy w optymalizatorze zapytań i innych składnikach istnieje usterka kodu. | Wady optymalizatora zapytań LDAP i innych składników mogą zmniejszyć przepływność. |
Znany problem
Wartości w arkuszu kalkulacyjnym programu Excel nie są odpowiednio wyświetlane ani renderowane na komputerach używających języków innych niż angielski.
Na przykład dzieje się tak na komputerze, gdy polecenie cmdlet programu Windows PowerShell Get-Culture wskazuje ustawienie regionalne w następujący sposób:
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)
W takiej sytuacji liczby w arkuszu kalkulacyjnym programu Excel są renderowane tak, jak na poniższym zrzucie ekranu:
Aby rozwiązać ten problem, zmień symbol dziesiętny na kropkę (.) w elemencie Ustawienia regionu w Panelu sterowania.
Aby uzyskać więcej informacji na temat zapytań LDAP, zobacz następujący blog: Jak znaleźć kosztowne, nieefektywne i długotrwałe zapytania LDAP w usłudze Active Directory