다음을 통해 공유


Event1644Reader.ps1을 사용하여 Windows Server에서 LDAP 쿼리 성능 분석

이 문서에서는 Windows Server에서 Active Directory 이벤트 ID 1644를 분석하는 데 도움이 되는 스크립트를 설명합니다. 스크립트를 사용하는 단계를 검토한 다음 문제를 분석합니다.

원래 KB 번호: 3060643

Event1644Reader.ps1 스크립트 정보

Active Directory 이벤트 ID 1644는 디렉터리 서비스 이벤트 로그에 기록됩니다. 이 이벤트는 Active Directory 도메인 컨트롤러에서 서비스하는 비용이 많이 들고 비효율적이거나 느린 LDAP(Lightweight Directory Access Protocol) 검색을 식별합니다. NTDS 일반 이벤트 ID 1644는 방문한 Active Directory 데이터베이스의 개체 수, 반환된 개체 수 또는 도메인 컨트롤러의 LDAP 검색 실행 시간을 기반으로 디렉터리 서비스 이벤트 로그에 LDAP 검색을 기록하도록 필터링할 수 있습니다. 이벤트 ID 1644 에 대한 자세한 내용은 Active Directory 이벤트 로그에 성능 데이터를 추가하는 2800945 핫픽스를 참조하세요.

Event1644Reader.ps1은 저장된 디렉터리 서비스 이벤트 로그에 호스트되는 1644개 이벤트에서 데이터를 추출하는 Windows PowerShell 스크립트입니다. 그런 다음, 해당 데이터를 Microsoft Excel 스프레드시트의 일련의 피벗 테이블로 가져와 관리자가 해당 쿼리를 생성하는 도메인 컨트롤러 및 클라이언트에서 서비스 중인 LDAP 워크로드에 대한 인사이트를 얻을 수 있도록 합니다.

스크립트를 가져오는 방법

핵심 인프라 및 보안 블로그 게시물 Active Directory에서 비용이 많이 들고 비효율적이며 장기 실행 중인 LDAP 쿼리를 찾는 방법 게시물 에서 스크립트를 가져올 수 있습니다.

참고 항목

스크립트는 파일 이름이 Event1644Reader.zip 블로그 게시물에 첨부됩니다.

스크립트 센터 고지 사항
샘플 스크립트는 Microsoft 표준 지원 프로그램 또는 서비스에서 지원되지 않습니다. 샘플 스크립트는 어떤 종류의 보증도 없이 AS IS로 제공됩니다. Microsoft는 특정 목적에 대한 상품성 또는 적합성에 대한 묵시적 보증을 포함하여 모든 묵시적 보증을 추가로 부인합니다. 샘플 스크립트 및 설명서의 사용 또는 성능에서 발생하는 전체 위험은 여전히 유지됩니다. 어떠한 경우에도 Microsoft, 해당 작성자 또는 스크립트의 생성, 제작 또는 전달에 관련된 모든 사람은 샘플 스크립트 또는 설명서를 사용하거나 사용할 수 없는 경우 발생하는 모든 손해(비즈니스 이익 손실, 비즈니스 중단, 비즈니스 정보 손실 또는 기타 금전적 손실 포함)에 대해 책임을 지지 않습니다. Microsoft가 이러한 손해의 가능성을 통보 받은 경우에도

온라인 피어 지원
온라인 피어 지원을 위해 공식 스크립팅 가이즈 포럼에 참여하세요! 샘플 스크립트에서 피드백 또는 보고서 버그를 제공하려면 이 스크립트에 대한 토론 탭에서 새 토론을 시작합니다.

스크립트를 사용하는 방법

이벤트 ID 1644에서 캡처된 LDAP 쿼리를 더 잘 분석하려면 다음 단계를 수행합니다.

  1. 문제를 해결하는 도메인 컨트롤러가 향상된 ** 1644 이벤트 메타데이터 캡처인지 확인합니다.

    참고 항목

    Windows Server 2012 R2는 LDAP 쿼리 및 기타 메타데이터의 기간을 기록하여 향상된 1644 이벤트 로깅을 추가했습니다. 향상된 1644 이벤트 로깅은 핫픽스 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. 다음 레지스트리 항목이 있는 경우 값을 원하는 임계값(밀리초)으로 변경합니다. 특정 레지스트리 항목이 없는 경우 해당 이름으로 새 항목을 만든 다음 해당 값을 원하는 임계값(밀리초)으로 설정합니다.

    레지스트리 경로 데이터 형식 Default value
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\검색 시간 임계값(msecs) DWORD 30,000
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\비용이 많이 드는 검색 결과 임계값 DWORD 10,000
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\비효율적인 검색 결과 임계값 DWORD 1,000

    참고 항목

    • 필드 엔지니어링 로깅 수준을 사용하도록 설정하고 검색 시간 임계값(msecs) 레지스트리 항목이 사용되지 않거나 0으로 설정된 경우 시간 임계값의 기본값은 30,000밀리초입니다. (이 작업을 다시 시작할 필요는 없습니다.)
    • 한 가지 전략은 비효율적인 검색 결과 임계값과 비용이 많이 드는 검색 결과 임계값 레지스트리 설정 모두에 대한 레지스트리 값을 설정한 다음 검색 시간 보류(msecs)로 식별되는 이벤트에 초점을 맞추는 것입니다. 100밀리초와 같은 더 큰 값으로 시작한 다음, 사용자 환경에서 발생하는 쿼리를 최적화할 때 값을 증분 방식으로 줄입니다.
    • Event1644Reader.ps1은 여러 도메인 컨트롤러의 이벤트를 구문 분석할 수 있습니다. LDAP 검색을 검토하려는 모든 도메인 컨트롤러에서 필드 엔지니어링, 검색 시간, 비용이 많이 들고 비효율적인 레지스트리 키 설정을 구성합니다.
  4. Event1644Reader.ps1 파일을 다운로드합니다. 핵심 인프라 및 보안 블로그 게시물 에서 Active Directory 에서 비용이 많이 들고 비효율적이며 장기 실행 중인 LDAP 쿼리를 찾는 방법에서 1644 이벤트가 포함된 저장된 Active Directory Service EVTX 파일을 분석하는 컴퓨터로 스크립트를 가져올 수 있습니다.

    이 컴퓨터에는 Microsoft Excel 2010 이상 버전이 설치되어 있어야 하며 스크립트가 구문 분석할 디렉터리 서비스 이벤트 로그를 호스트하기에 충분한 디스크 공간이 있어야 합니다.

  5. 1644 이벤트 로깅을 사용하도록 설정한 도메인 컨트롤러의 1644 이벤트가 포함된 저장된 디렉터리 서비스 이벤트 로그를 1644 분석 컴퓨터에 복사합니다.

  6. Windows 탐색기에서 Event1644Reader.ps1 파일을 마우스 오른쪽 단추로 클릭한 다음 PowerShell로 실행을 선택합니다.

    다음은 이 단계의 스크린샷입니다.

    Event1644Reader.ps1 파일을 마우스 오른쪽 단추로 클릭한 다음 PowerShell로 실행을 선택합니다.

  7. 필요에 따라 PowerShell 실행 정책을 무시하려면 Y 키를 누릅니다.

  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 이벤트 ID 1644로 캡처되는 각 데이터 필드는 불연속 열로 가져옵니다. 열 머리글을 정렬하거나 필터링할 수 있도록 데이터 필터링이 자동으로 활성화됩니다. 여러 도메인 컨트롤러의 1644 이벤트 로그가 PowerShell 스크립트 또는 관리자 지정 디렉터리와 동일한 디렉터리에 있는 경우 필터를 사용하여 특정 도메인 컨트롤러를 대상으로 하는 LDAP 쿼리를 봅니다.
Top_StartingNode 지정된 샘플에서 LDAP 쿼리를 대상으로 하는 디렉터리 파티션의 정렬된 목록을 제공합니다. 대부분의 쿼리가 단일 파티션(스키마, 구성 또는 도메인)에서 발생하는 경우 나머지 피벗 테이블에서 해당 파티션을 필터로 추가하는 것이 좋습니다. 드릴스루 세부 정보는 상위 필터(예: LDAP 쿼리), 해당 쿼리를 실행한 클라이언트 IP 및 해당 쿼리에 대한 날짜 및 타임스탬프를 노출합니다.
Top_Callers 총합계 비율의 내림차순 검색 수 순서로 LDAP 쿼리를 실행한 클라이언트 IP 주소를 나열합니다. 총 실행 비율은 상위 호출자를 식별하는 데 도움이 됩니다. 즉, 상위 10개 또는 20명의 호출자가 너무 많은 호출이 문제라고 가정하여 쿼리 볼륨의 80%를 생성할 수 있습니다. 드릴스루 세부 정보는 지정된 샘플에서 각 클라이언트가 발급한 LDAP 쿼리의 필터와 날짜 및 시간 단계를 노출합니다.
Top_Filters 가장 자주 발급된 LDAP 쿼리를 내림차순으로 나열합니다. 여기에는 평균 검색 시간이 포함됩니다. 드릴스루 세부 정보는 LDAP 클라이언트의 IP 주소와 각 쿼리가 제출된 날짜 및 시간을 노출합니다.
호출자별 TotalSearchTime 샘플의 모든 LDAP 쿼리에서 총 검색 시간의 내림차순으로 클라이언트 IP 주소를 나열합니다. 드릴스루 세부 정보는 LDAP 쿼리와 각 쿼리가 실행된 날짜 및 시간을 식별합니다.
TotalSearchTime by Filters 총 검색 시간의 내림차순으로 LDAP 쿼리를 나열합니다. 드릴스루 세부 정보는 LDAP 클라이언트의 IP 주소와 일치하는 각 쿼리가 제출된 날짜와 시간을 노출합니다.
검색 시간 순위 시간 기반 사분위수에서 발생한 LDAP 쿼리 수를 표시합니다. 느린 쿼리가 잘못되었습니다. 쿼리가 너무 자주 실행되지 않는 경우 더 빠른 쿼리가 좋습니다. Microsoft Exchange는 Exchange 서버에서 발급한 LDAP 쿼리를 50밀리초 이내에 확인하려고 합니다. 따라서 첫 번째 사분위수 그룹은 해당 시간 "버킷"에 중점을 둡니다.
빈 피벗 시나리오에 대한 특정 데이터를 표시하기 위해 필요에 따라 변경할 수 있는 빈 피벗 테이블입니다.

시나리오 분석

LDAP 쿼리가 느리거나 도메인 컨트롤러에서 CPU 사용량이 높은 경우 과도하게 발급된 쿼리, 비효율적인 쿼리, 이러한 쿼리의 일부 조합, ATQ(비동기 스레드 큐) 풀 고갈 또는 많은 변경 알림으로 인해 발생할 수 있습니다.

클라이언트가 비용이 많이 들고 비효율적이거나 많은 LDAP 쿼리를 실행하는 경우 Event1644Reader.ps1을 사용하여 도메인 컨트롤러에서 데이터를 수집하여 클라이언트의 IP 주소를 식별합니다. 그런 다음 이러한 쿼리를 클라이언트 컴퓨터의 프로세스 ID, 프로세스 이름 또는 호출 애플리케이션에 매핑합니다.

다음 표에서는 이 문제에 대한 가능한 최적화를 나열합니다.

최적화/완화 개요
과도한 워크로드를 중지합니다. 많은 쿼리 또는 LDAP 쿼리로 인해 서비스가 중지되는 경우 상위 호출 클라이언트에 집중하고 과도한 워크로드의 원인을 식별하고 제거하기 위해 노력합니다.

애플리케이션을 식별하는 가능한 옵션에는 PROCMON, ETL/ETW 추적 및 디버그 분석을 사용하여 클라이언트에서 LDAP 쿼리를 생성하는 애플리케이션을 식별하는 것이 포함됩니다. 또 다른 전략은 서비스를 토핑하거나 LDAP 쿼리를 생성하는 애플리케이션을 제거하는 분할 방법을 사용하는 것입니다. 발급된 쿼리는 호출 애플리케이션 또는 프로세스를 포함할 수 있습니다.
업데이트된 LDAP 쿼리 최적화 프로그램 설치 Windows Server 2012 R2에는 대부분의 쿼리에 대한 성능을 향상시키는 업데이트된 LDAP 쿼리 최적화 프로그램이 포함되어 있습니다. Windows Server 2012 R2의 하위 집합은 핫픽스 2862304 Windows Server 2008 R2 및 Windows Server 2012로 백포트됩니다.
클라이언트가 사이트 최적 도메인 컨트롤러에 쿼리를 제출하는지 확인합니다. WAN에서 LDAP 쿼리를 보내면 도메인 컨트롤러에 LDAP 쿼리를 전달하고 클라이언트에 회신하는 데 네트워크 대기 시간이 발생합니다. Active Directory의 클라이언트 및 서버 컴퓨터에 대한 Active Directory 사이트 및 서브넷 정의가 있는지 확인합니다.

애플리케이션에 사이트 최적 도메인 컨트롤러가 있는 경우에만 원격 사이트 도메인 컨트롤러 또는 읽기 쓰기 가능한 도메인 컨트롤러에 대한 하드 코딩된 참조가 없는지 확인합니다.
소프트웨어 개발자와 협력하여 쿼리가 발급되는 빈도를 줄입니다. 여기에는 캐싱 사용이 포함됩니다. 쿼리가 너무 자주 실행되면 효율적으로 발급된 쿼리도 적절하게 크기가 조정되고 구성된 도메인 컨트롤러를 이길 수 있습니다.
애플리케이션은 네트워크, LDAP 및 CPU 부하를 줄이기 위해 쿼리 볼륨 또는 캐시 쿼리 결과를 제한해야 할 수 있습니다.
LDAP 쿼리를 최적화하여 더 빠르게 실행합니다. 쿼리 구문을 보다 신속하게 실행하려면 재구성해야 할 수 있습니다.
필터 내에서 쿼리 요소를 왼쪽 또는 오른쪽으로 이동하면 성능이 향상될 수 있습니다.
이중 "not"을 추가하면 쿼리 성능이 향상될 수 있습니다.
트리에서 낮은 쿼리를 시작하여 방문하는 개체 수를 줄이는 것이 좋습니다.
쿼리에서 반환되는 특성 수를 줄입니다.
필요에 따라 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 스프레드시트 문제의 숫자입니다.

이 문제를 해결하려면 제어판 지역 설정 항목에서 10진수 기호마침표(.)로 변경합니다.

LDAP 쿼리에 대한 자세한 내용은 다음 블로그 를 참조하세요. Active Directory에서 비용이 많이 들고 비효율적이며 장기 실행 중인 LDAP 쿼리를 찾는 방법