지금 공유 :
차례 숨기기

1. 소개

1.1 무엇입니까 SQL Server 활동 모니터?

SQL Server Activity Monitor is a built-in diagnostic tool within SQL Server 정보를 표시하는 Management Studio SQL Server 프로세스와 서버 성능에 미치는 영향을 추적할 수 있습니다. SQL Server 프로세스 모니터링, 리소스 대기 모니터링, 비용이 많이 드는 쿼리 분석, I/O 패턴 관찰 등을 모두 단일 인터페이스에서 수행할 수 있습니다.

SQL Server 활동 모니터

1.2 사용 이유 SQL Server 활동 모니터?

활동 모니터는 성능 문제를 해결할 때 첫 번째 방어선 역할을 합니다. 활동 모니터를 통해 컴퓨터에서 발생하는 상황을 즉시 확인할 수 있습니다. SQL Server 복잡한 T-SQL 쿼리나 타사 도구가 필요 없이 인스턴스를 생성할 수 있습니다.

이 도구는 세션 차단, CPU 사용량이 많은 쿼리, 과도한 쿼리 실행, I/O 병목 현상과 같은 일반적인 문제를 신속하게 파악하는 데 매우 유용합니다. 사용자가 애플리케이션이 느리거나 응답하지 않는다고 보고하면 활동 모니터를 통해 데이터베이스 서버가 원인인지 확인할 수 있습니다.

데이터베이스 관리자를 위한 SQL Server daily, Activity Monitor offers an accessible entry point for understanding server activity. Even experienced DBAs use it as their starting point for performance investigations.

1.3 활동 모니터와 다른 모니터링 도구 비교

활동 모니터는 가치 있는 기능이지만, 다른 모니터링 옵션과 비교해 어떤지 이해하는 것이 중요합니다.

활동 모니터 대 sp_WhoIsActive: Activity Monitor는 여러 창을 갖춘 그래픽 인터페이스를 제공하는 반면, sp_WhoIsActive는 단일 결과 집합에서 보다 자세한 정보를 제공하는 포괄적인 저장 프로시저입니다. sp_WhoIsActive는 Activity Monitor가 그룹화한 특정 대기 유형을 표시하고 보다 세부적인 차단 정보를 제공합니다.

활동 모니터 대 sp_who2: 기존 sp_who2 명령은 기본적인 세션 정보를 표시하지만, Activity Monitor는 대기 통계, 비용이 많이 드는 쿼리, I/O 메트릭을 체계적이고 시각적인 형식으로 표시하여 한 단계 더 나아갑니다.

활동 모니터와 타사 도구 비교: Commercial monitoring solutions like SolarWinds Database Performance Analyzer offer historical tracking, alerting, and advanced analytics that Activity Monitor lacks. However, Activity Monitor requires no additional cost or installation.

1.4 데이터베이스 관리자를 위한 주요 이점

Activity Monitor는 필수적인 DBA 도구로 만드는 여러 가지 장점을 제공합니다.

  • 무료 비용: 내장형으로 SQL Server Management Studio 기능을 사용하면 라이선스 비용이나 배포 작업이 필요하지 않습니다.
  • 실시간 모니터링: 1초에서 1시간까지 구성 가능한 새로 고침 간격으로 현재 서버 활동을 실시간으로 확인하세요.
  • 통합 작업: 세션을 종료하거나 쿼리 세부 정보를 보거나 시작하려면 프로세스를 마우스 오른쪽 버튼으로 클릭하세요. SQL Server 프로파일러는 도구 내에서 모든 것을 추적합니다.
  • 다양한 관점: 5개의 전문화된 창을 통해 다양한 각도에서 서버 상태를 볼 수 있으며, 각 창은 성능의 특정 측면에 초점을 맞춥니다.
  • 빠른 문제 해결: Identify the most common performance problems within minutes, accelerating your mean time to resolution.
  • 낮은 진입 장벽: 도구를 효과적으로 사용하기 위해서는 고급 지식이 필요하지 않지만 더 깊이 있는 지식이 필요합니다. SQL Server 전문 지식은 해석에 도움이 됩니다.

2. Getting Started with Activity Monitor

활동 모니터를 효과적으로 활용하려면 도구를 실행하기 위한 전제 조건, 필요한 권한 및 다양한 방법을 이해해야 합니다.

2.1 전제 조건 및 시스템 요구 사항

사용 SQL Server 활동 모니터가 필요합니다 SQL Server 로컬 컴퓨터 또는 점프 서버에 설치된 Management Studio(SSMS). 활동 모니터 도구는 SQL Server 2008년이므로 이 가이드의 정보는 다음에 적용됩니다. SQL Server 2008년 및 이후 버전.

네트워크 연결이 필요합니다. SQL Server instance you want to monitor. For cloud-hosted databases, you’ll typically need a VPN connection or properly configured firewall rules to access the instance.

활동 모니터는 모든 버전에서 작동합니다. SQL ServerExpress, Standard, Enterprise를 포함합니다. 도구 자체는 SSMS 내 클라이언트 컴퓨터에서 실행되므로 서버 리소스는 도구가 실행하는 모니터링 쿼리의 영향만 받습니다.

2.2 필수 권한

활동 모니터가 제대로 작동하려면 적절한 권한이 필요합니다. 적절한 권한이 없으면 빈 화면이 나타나거나 액세스 거부 오류가 발생할 수 있습니다.

2.2.1 서버 상태 보기 권한

The 서버 상태 보기 활동 모니터를 사용하려면 권한이 필수입니다. 이 서버 수준 권한을 통해 모든 활성 프로세스와 관련 메트릭을 볼 수 있습니다.

이 권한을 부여하려면 서버 관리자가 다음을 실행할 수 있습니다.

GRANT VIEW SERVER STATE TO [YourLoginName];

VIEW SERVER STATE가 없으면 활동 모니터가 열리지만 어떤 창에도 데이터가 표시되지 않을 수 있습니다.

2.2.2 데이터베이스 수준 권한

데이터 파일 I/O 창에서 정보를 보려면 추가 권한이 필요합니다. 구체적으로 다음 조합 중 하나가 필요합니다.

  • 데이터베이스 생성 허가 또는
  • 모든 데이터베이스 변경 허가 또는
  • 모든 정의 보기 허가

이러한 권한은 다음과 결합되어야 합니다. 서버 상태 보기 전체 활동 모니터 기능을 사용하려면.

2.2.3 권한 문제 해결

If Activity Monitor opens but shows no data, permissions are the most common cause. Check that your login has VIEW SERVER STATE granted at the server level. You can verify your permissions by running:

SELECT * FROM fn_my_permissions(NULL, 'SERVER');

permission_name 열에서 'VIEW SERVER STATE'를 찾으세요. 없는 경우 데이터베이스 관리자에게 문의하여 권한을 부여받으세요.

2.3 SSMS에서 활동 모니터를 여는 방법

SQL Server Management Studio는 작업 흐름 기본 설정에 따라 유연성을 제공하는 4가지 방법으로 Activity Monitor를 실행할 수 있도록 지원합니다.

2.3.1 방법 1: 도구 모음에서

활동 모니터를 여는 가장 빠른 방법은 도구 모음 아이콘을 사용하는 것입니다.

  1. 에 연결 SQL Server 인스턴스 SQL Server 매니지먼트 스튜디오.
  2. 표준 도구 모음에서 활동 모니터 아이콘을 찾으세요(녹색 재생 버튼이 있는 막대형 차트와 비슷합니다).
  3. 아이콘을 클릭하여 활동 모니터를 시작합니다.

스타트 SQL Server 도구 모음 아이콘에서 활동 모니터 SQL Server 매니지먼트 스튜디오.

SSMS에서 이미 작업 중이고 서버 활동을 빠르게 확인해야 하는 경우 이 방법이 가장 빠릅니다.

2.3.2 방법 2: 개체 탐색기에서

개체 탐색기에서 직접 활동 모니터를 실행할 수도 있습니다.

  1. 개체 탐색기에서 다음을 찾으세요. SQL Server 모니터링하려는 인스턴스입니다.
  2. 인스턴스 이름을 마우스 오른쪽 버튼으로 클릭합니다.
  3. 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 활동 모니터 컨텍스트 메뉴에서.

스타트 SQL Server 개체 탐색기에서 인스턴스를 마우스 오른쪽 버튼으로 클릭하여 활동 모니터를 표시합니다. SQL Server 매니지먼트 스튜디오.

이 방법은 여러 서버에 연결할 때 유용합니다. 올바른 인스턴스를 모니터링하고 있는지 확인할 수 있기 때문입니다.

2.3.3 방법 3: 키보드 단축키 사용

키보드 중심 사용자의 경우 SQL Server Management Studio는 전용 단축키를 제공합니다.

  1. SSMS가 활성 창이며 인스턴스에 연결되어 있는지 확인하세요.
  2. PR 기사 Ctrl 키 + 다른 + A.
  3. 현재 선택된 인스턴스에 대한 활동 모니터가 개체 탐색기에서 열립니다.

Activity Monitor는 개체 탐색기에서 선택한 서버 인스턴스에 연결되므로 이 바로 가기를 사용하기 전에 올바른 인스턴스를 선택했는지 확인하세요.

2.3.4 Method 4: From Options Menu (Startup Configuration)

If you frequently use Activity Monitor, you can configure SSMS to launch it automatically whenever you start the application:

  1. In SQL Server Management Studio로 이동 도구 -> 옵션.
  2. 옵션 대화 상자에서 확장하세요. 환경다음 선택 시작.
  3. 에서 시작시 드롭다운 목록, 선택 개체 탐색기 및 활동 모니터 열기.
  4. 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 OK.

Set the startup configuration for SQL Server 활동 모니터 SQL Server 매니지먼트 스튜디오.

다음에 SSMS를 실행하고 서버에 연결하면 개체 탐색기와 함께 활동 모니터가 자동으로 열립니다.

3. 활동 모니터 창 이해

활동 모니터는 다섯 개의 확장 가능한 창으로 정보를 구성하며, 각 창은 서버 활동에 대한 다양한 관점을 제공합니다. 각 창의 내용을 이해하는 것은 효과적인 문제 해결에 매우 중요합니다.

3.1 개요 창

개요 창에는 빠른 상태 스냅샷을 제공하는 4개의 실시간 그래프가 표시됩니다. SQL Server 예를 들어, 이러한 그래프는 설정 가능한 간격으로 업데이트되며, 한눈에 이상 패턴을 파악하는 데 도움이 됩니다.

개요 창 SQL Server 활동 모니터.

3.1.1 % 프로세서 시간

이 그래프는 프로세서가 대기 상태가 아닌 스레드를 실행하는 데 소요되는 시간의 백분율을 보여줍니다. SQL Server 모든 CPU에 걸쳐 인스턴스입니다. 값은 다음을 나타냅니다. SQL Server전체 서버의 CPU 사용량이 아니라 프로세서 사용량입니다.

If you consistently see processor time at or near 100%, your server is CPU-bound. This could indicate inefficient queries, missing indexes, or insufficient hardware capacity. Use the Recent Expensive Queries pane to identify which queries are consuming the most CPU.

3.1.2 대기 작업

이 지표는 진행하기 전에 리소스가 해제되기를 기다리는 작업의 수를 표시합니다. 작업은 CPU, I/O, 메모리 또는 잠금을 기다릴 수 있습니다.

대기 중인 작업 수가 지속적으로 많으면 리소스 경합을 나타냅니다. 리소스 대기 창은 대기를 유발하는 리소스 유형에 대한 자세한 정보를 제공합니다.

3.1.3 데이터베이스 I/O(MB/s)

이 그래프는 메모리와 디스크 간의 데이터 전송 속도를 보여줍니다. 읽기와 쓰기를 모두 합친 것이며, 초당 메가바이트 단위로 측정됩니다.

데이터베이스 I/O 급증은 쿼리가 대용량 테이블 스캔, 과도한 로깅 활동 또는 체크포인트 작업을 수행하고 있음을 나타낼 수 있습니다. 데이터 파일 I/O 창은 데이터베이스 및 파일별로 I/O 활동을 분석합니다.

3.1.4 배치 요청/초

이 메트릭은 다음을 나타냅니다. SQL Server 인스턴스가 초당 수신한 배치 수입니다. 배치는 단일 명령문이거나 함께 제출된 여러 명령문일 수 있습니다.

이 값을 통해 전반적인 서버 활동을 파악할 수 있습니다. 정상 업무 시간 중에 일괄 요청이 갑자기 감소하는 경우 애플리케이션 연결 문제 또는 사용자 관련 문제를 나타낼 수 있습니다.

3.1.5 새로 고침 간격 설정

활동 모니터가 데이터를 업데이트하는 빈도를 사용자 지정할 수 있습니다.

  1. 개요 창의 아무 곳이나 마우스 오른쪽 버튼을 클릭합니다.
  2. 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 새로 고침 간격.
  3. 미리 정의된 값에서 간격을 선택하세요: 1초, 5초, 10초(기본값), 30초, 1분 또는 1시간.

새로 고침 간격을 설정하세요 SQL Server 활동 모니터 개요 패널.

새로 고침 간격을 10초 미만으로 설정하면 서버의 모니터링 오버헤드가 증가합니다. 부하가 심한 운영 시스템의 경우, 영향을 최소화하기 위해 30초 이상의 간격을 사용하는 것이 좋습니다.

3.2 프로세스 창

프로세스 창에는 현재 실행 중인 세션에 대한 정보가 표시됩니다. SQL Server 예를 들어, 이 창은 누가 무엇을 하고 있는지 파악하고 차단 문제를 발견하는 데 필수적입니다.

프로세스 창 SQL Server 활동 모니터.

3.2.1 프로세스 정보 이해

프로세스 창의 각 행은 서버에서 활성 중인 세션을 나타냅니다. 이 창에는 모든 데이터베이스와 모든 사용자의 세션이 표시되어 서버 활동을 포괄적으로 파악할 수 있습니다.

The information displayed includes the login name, application name, hostname, database being accessed, and current command. This helps you correlate database activity with specific users or applications.

3.2.2 주요 열 설명

주요 열을 이해하면 프로세스 정보를 효과적으로 해석하는 데 도움이 됩니다.

  • 세션 ID: 각 연결에 대한 고유 식별자입니다. 시스템 프로세스는 음수 세션 ID를 사용합니다.
  • 사용자 프로세스: 이것이 사용자 세션(예)인지 아니면 시스템 프로세스(아니요)인지를 나타냅니다.
  • 로그인 : The SQL Server 세션과 연관된 로그인 또는 Windows 계정.
  • 데이터 베이스: 세션에 대한 현재 데이터베이스 컨텍스트입니다.
  • 작업 상태: 세션이 현재 진행 중인 작업(실행 중, 일시 중단, 절전 중 등)을 보여줍니다.
  • 명령 : 실행되는 명령의 유형(SELECT, INSERT, UPDATE 등).
  • 어플리케이션: 연결을 생성한 애플리케이션의 이름입니다.
  • 대기 시간: 세션이 리소스를 기다린 시간(밀리초)입니다.
  • 대기 유형: 세션이 기다리고 있는 특정 유형의 리소스입니다.
  • CPU 시간: 이 세션이 연결된 이후 사용된 총 CPU 시간입니다.
  • 메모리 사용: 현재 세션에 할당된 메모리 양(KB)입니다.

3.2.3 필터링 및 정렬 프로세스

프로세스 창에는 관련 세션에 집중하는 데 도움이 되는 강력한 필터링 기능이 포함되어 있습니다.

  1. 열 머리글의 드롭다운 화살표를 클릭하세요.
  2. 필터는 다음을 포함하여 해당 열에 사용 가능한 값을 표시합니다. 전부의, 공백예산 및 비공백.
  3. 특정 값을 선택하면 해당 세션만 표시됩니다.

프로세스를 필터링합니다 SQL Server 활동 모니터.

예를 들어, 필터링할 수 있습니다 작업 상태 실행 중인 세션만 표시하거나 필터링하려면 데이터베이스 특정 데이터베이스에 대한 활동을 확인합니다.

각 열의 헤더를 클릭하여 정렬할 수도 있습니다. 한 번 클릭하면 오름차순, 두 번 클릭하면 내림차순으로 정렬됩니다.

프로세스를 정렬하세요 SQL Server 활동 모니터.

3.2.4 차단 및 차단된 세션 식별

프로세스 창은 한 세션이 다른 세션의 진행을 방해하는 차단 시나리오를 식별하는 데 도움이 됩니다.

  • 차단된 사람: 이 세션을 차단하고 있는 세션의 세션 ID를 표시합니다. 이 열에 값이 있으면 해당 세션은 다른 세션이 보유한 잠금을 기다리고 있는 것입니다.
  • 헤드 블로커: 이 세션이 다른 세션을 차단하지만 자신은 차단되지 않은 경우 '1'을 표시합니다. 이것이 차단 체인의 근본 원인입니다.

차단된 프로세스 및 차단된 프로세스를 표시합니다. SQL Server 활동 모니터.

차단 문제를 조사하려면 먼저 헤드 블로커(헤드 블로커 열에 '1'로 표시된 세션)를 식별한 다음, 해당 세션의 작업을 살펴보고 완료되도록 둘지 아니면 종료할지 결정합니다.

3.2.5 프로세스 작업(종료, 세부 정보, 추적)

활동 모니터를 사용하면 개별 세션에 대해 다음과 같은 작업을 수행할 수 있습니다.

  1. 프로세스 창에서 세션을 마우스 오른쪽 버튼으로 클릭합니다.
  2. 여러 가지 옵션이 표시됩니다.
    • 세부: 이 세션에서 실행된 마지막 명령을 표시합니다.
    • 킬 프로세스: 세션을 종료합니다(주의해서 사용하세요).
    • 추적 프로세스 SQL Server 프로파일러: 출시 SQL Server 프로파일 그리고 자동으로 이 세션의 활동만 표시하도록 필터링합니다.

프로세스에 대한 작업을 수행합니다. SQL Server 활동 모니터.

세부 정보 옵션은 명령 텍스트를 표시하지만 이것이 지난 명령이 실행되었지만 아직 실행 중이 아닐 수 있습니다. 추적 옵션은 세션에서 실행 중인 명령의 전체 시퀀스를 확인해야 할 때 특히 유용합니다.

3.3 리소스 대기 창

The Resource Waits pane summarizes wait statistics, showing what types of resources sessions are waiting for most frequently. This information is crucial for diagnosing performance bottlenecks.

리소스 대기 창 SQL Server 활동 모니터.

3.3.1 대기 통계 이해

인셀덤 공식 판매점인 SQL Server 리소스 요청(예: 잠금, CPU 시간 또는 메모리)을 즉시 승인할 수 없는 경우, 요청 작업은 대기 상태로 전환됩니다. 대기 통계는 이러한 대기 시간을 추적하여 서버가 작업 대신 대기하는 시간을 파악하는 데 도움을 줍니다.

리소스 대기 창은 sys.dm_os_wait_stats 및 sys.dm_exec_requests와 같은 시스템 동적 관리 뷰에서 데이터를 수집합니다. 새로 고침 간격마다 현재 스냅샷과 이전 스냅샷의 차이를 계산하여 각 대기 유형의 누적 비율을 보여줍니다.

3.3.2 대기 범주

활동 모니터는 수백 개의 개별 대기 유형을 더 광범위한 범주로 그룹화하여 해석을 단순화합니다.

  • CPU : CPU 시간이 사용 가능해질 때까지 기다리는 작업입니다.
  • 버퍼 래치: 메모리의 데이터 페이지 액세스를 보호하는 단기 동기화 객체를 기다립니다. 이 범주에는 페이지 래치 대기(PAGELATCH_*)가 포함됩니다.
  • 잠금 : 다른 세션이 필요로 하는 잠금을 보유한 세션으로 인해 발생하는 대기입니다.
  • 메모리 : 정렬 및 해싱과 같은 작업에 필요한 메모리 부여를 기다립니다.
  • 네트워크 I/O: 클라이언트와 데이터를 주고받는 것을 기다립니다.
  • SQL CLR: 공통 언어 런타임 실행과 관련된 대기입니다.

이러한 그룹화는 보기를 단순화하지만, 중요한 세부 정보를 모호하게 만듭니다. 예를 들어, "버퍼 래치"는 PAGELATCH_SH, PAGELATCH_UP, PAGELATCH_EX 대기를 함께 그룹화할 수 있으며, 이는 성능에 미치는 영향이 다릅니다.

3.3.3 대기 시간 및 대기 작업 해석

리소스 대기 창에는 각 대기 범주에 대한 두 가지 주요 측정 항목이 표시됩니다.

  • 누적 대기 시간(ms): 이 대기 범주에 대한 현재 새로 고침 간격 동안 누적된 총 밀리초입니다.
  • 대기 작업: 이 카테고리에서 현재 리소스를 기다리고 있는 작업의 수입니다.

대기 시간 값은 특히 흥미롭습니다. 새로 고침 간격이 10초이고 특정 범주에 대해 대기 시간이 20,000ms인 경우, 이는 여러 개의 동시 대기가 발생했음을 나타냅니다(20,000ms / 10,000ms = 해당 간격 동안 동시 대기 2건의 평균).

3.3.4 성능 병목 현상 식별

Use the Resource Waits pane to identify where your server is spending the most time waiting:

  1. 리소스 대기 창을 확장합니다.
  2. 가장 긴 대기 시간이 누적되는 대기 유형을 살펴보세요.
  3. 정렬 기준 누적 대기 시간 to see which resources are most constrained.

리소스 대기 창에서 누적 대기 시간별로 정렬하여 성능 병목 현상을 찾습니다.

버퍼 래치 대기 시간이 높으면 메모리의 데이터 페이지 경합을 나타내는 경우가 많으며, 이는 I/O 병목 현상이나 tempdb 경합을 시사할 수 있습니다. 잠금 대기 시간이 높으면 블로킹 문제를 나타냅니다. 메모리 대기 시간이 높으면 쿼리 작업에 필요한 메모리가 부족함을 나타냅니다.

3.4 데이터 파일 I/O 창

데이터 파일 I/O 창은 서버의 각 데이터베이스 파일에 대한 디스크 활동을 표시하여 I/O 병목 현상을 식별하고 디스크 사용 패턴을 이해하는 데 도움이 됩니다.

데이터 파일 I/O 창 SQL Server 활동 모니터.

3.4.1 I/O 메트릭 이해

데이터 파일 I/O 창에는 각 데이터베이스 파일에 대한 여러 가지 메트릭이 표시됩니다.

  • 데이터 베이스: 데이터베이스의 이름입니다.
  • 파일 유형 : 데이터(테이블과 인덱스 포함) 또는 로그(트랜잭션 로그).
  • 논리적 이름: 정의된 논리적 파일 이름 SQL Server.
  • MB/초 읽기: 이 파일에서 데이터를 읽는 속도입니다.
  • MB/초 작성됨: 이 파일에 데이터가 기록되는 속도입니다.
  • 응답 시간 (ms) : 이 파일에 대한 I/O 작업에 대한 평균 응답 시간입니다.

이러한 측정항목은 개요 창과 동일한 간격으로 새로 고쳐지므로 디스크 활동에 대한 실시간 가시성을 제공합니다.

3.4.2 I/O 병목 현상 식별

I/O 성능 문제를 나타내는 다음 패턴을 살펴보세요.

  • 빠른 응답 시간: 응답 시간이 지속적으로 15~20ms를 초과하면 디스크 하위 시스템이 느리다는 것을 나타냅니다. 응답 시간이 50ms를 초과하면 심각한 I/O 병목 현상이 있음을 나타냅니다.
  • 불균형 부하: 같은 데이터베이스에서 한 데이터 파일이 다른 파일보다 상당히 높은 I/O 비율을 보이는 경우, 부하를 분산하기 위해 추가 파일을 추가하는 것이 좋습니다.
  • 과도한 Tempdb 활동: tempdb 파일의 높은 I/O 비율은 쿼리가 큰 중간 결과 세트를 생성하거나 비효율적인 실행 계획을 사용하는 것을 나타내는 경우가 많습니다.

3.4.3 데이터베이스 파일 분석

데이터 파일 I/O 창을 사용하여 데이터베이스가 디스크 리소스를 사용하는 방식을 파악하세요.

  1. 데이터 파일 I/O 창을 확장합니다.
  2. 정렬 기준 MB/초 읽기 or MB/초 쓰기 to identify the most active files.
  3. 지속적으로 활동이 많거나 응답 시간이 긴 파일이 있는지 확인하세요.
  4. 이 정보를 최근 비용이 많이 드는 쿼리 창과 교차 참조하여 어떤 쿼리가 I/O 부하를 유발하는지 파악합니다.

Sort by Read or Written to identify the most active files in the Data File I/O Pane.

3.5 최근 비용이 많이 드는 쿼리 창

The Recent Expensive Queries pane is often the most valuable pane for troubleshooting application performance issues. It shows queries that are consuming significant server resources, helping you identify optimization opportunities.

최근 비용이 많이 드는 쿼리 창 SQL Server 활동 모니터.

3.5.1 쿼리 메트릭 이해

활동 모니터는 비용이 많이 드는 각 쿼리에 대해 여러 가지 측정 항목을 표시합니다.

  • 실행/분: 지난 1분 동안 쿼리가 실행된 횟수입니다.
  • CPU(ms/초): 이 쿼리가 초당 소모하는 CPU 시간입니다.
  • 물리적 읽기/초: 이 쿼리에 대한 초당 물리적 ​​디스크 읽기 수입니다.
  • 논리적 쓰기/초: 초당 논리적 쓰기(버퍼 캐시에 대한) 수입니다.
  • 논리적 읽기/초: 초당 논리적 읽기(버퍼 캐시에서) 수입니다.
  • 평균 지속 시간(ms): 이 쿼리의 평균 실행 시간입니다.
  • 계획 수: 이 쿼리에 대한 캐시에 있는 실행 계획의 수입니다.

이러한 측정항목은 비용이 많이 드는 쿼리가 무엇인지 이해하는 데 도움이 될 뿐만 아니라 why 가격이 비싸고, 운행 빈도도 높습니다.

3.5.2 정렬 옵션

최근 비용이 많이 드는 쿼리 창을 다양한 측정항목으로 정렬하여 다양한 유형의 문제를 찾을 수 있습니다.

  1. 해당 지표를 기준으로 정렬하려면 열 머리글을 클릭하세요.
  2. 일반적인 정렬 전략은 다음과 같습니다.
    • CPU별로 정렬: Find queries consuming the most processor time.
    • 실행/분별로 정렬: 지나치게 자주 실행되는 쿼리를 식별합니다.
    • 물리적 읽기 기준으로 정렬: Find queries causing the most disk I/O.
    • 평균 기간별로 정렬: 장기 실행 쿼리를 찾습니다.

성능 문제를 해결할 때 여러 열을 기준으로 정렬하여 다양한 관점을 얻어보세요. CPU 사용량은 보통이지만 분당 실행 횟수가 매우 높은 쿼리가 진짜 문제일 수 있습니다.

3.5.3 쿼리 텍스트 보기

비용이 많이 드는 쿼리 뒤에 있는 실제 SQL 문을 보려면:

  1. 최근 비용이 많이 드는 쿼리 창에서 쿼리 행을 마우스 오른쪽 버튼으로 클릭합니다.
  2. 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 쿼리 텍스트 편집.
    최근 비용이 많이 드는 쿼리 창에서 쿼리 텍스트를 편집합니다.
  3. 새로운 쿼리 창이 열리고 전체 SQL 문이 표시됩니다.
    최근 비용이 많이 드는 쿼리 창에서 "쿼리 텍스트 편집"을 선택한 후의 새 쿼리 창입니다.

이를 통해 쿼리 로직을 검토하고 잠재적인 최적화 기회를 파악할 수 있습니다. 그런 다음 수정된 버전을 테스트하기 위해 쿼리 텍스트를 복사할 수 있습니다.

3.5.4 실행 계획 분석

실행 계획은 다음을 보여줍니다. SQL Server 쿼리를 실행하면 인덱스 누락이나 부적절한 조인 유형과 같은 비효율성이 드러납니다.

  1. 최근 비용이 많이 드는 쿼리 창에서 쿼리 행을 마우스 오른쪽 버튼으로 클릭합니다.
  2. 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 실행 계획 표시.
    최근 비용이 많이 드는 쿼리 창에 실행 계획을 표시합니다.
  3. SQL Server Management Studio는 쿼리가 실행되는 방식을 그래픽으로 표시합니다.
    새 창에서 쿼리 실행 계획을 표시합니다.

Look for operations that consume large percentages of the query cost, warnings about missing statistics or indexes, and unexpected table scan operations. These often indicate where optimization efforts should focus.

3.5.5 문제가 있는 쿼리 식별

최근 비용이 많이 드는 쿼리 창에서 다음 패턴을 살펴보세요.

  • 과도한 처형: 1분에 수천 번 실행되는 쿼리는 애플리케이션 코드가 루프 내부에서 데이터베이스를 호출하는 N+1 쿼리 문제를 나타낼 수 있습니다.
  • 높은 물리적 판독: 물리적 읽기 속도가 높은 쿼리는 디스크에 자주 접근하는데, 이는 인덱스가 누락되었거나 쿼리가 잘못 작성되었음을 의미합니다.
  • 낮은 지속 시간을 가진 높은 CPU: 전체적으로 많은 CPU를 소모하는 빠른 쿼리가 많으면 몇 개의 느린 쿼리만큼이나 서버 성능에 영향을 미칠 수 있습니다.
  • 여러 계획 카운트: 실행 계획이 많은 쿼리는 매개변수 스니핑 문제가 발생하거나 매개변수화되지 않은 쿼리로 인해 계획 캐시가 팽창할 수 있습니다.

4. 성능 문제 해결을 위한 활동 모니터 사용

활동 모니터는 체계적으로 성능 문제를 진단하고 해결할 때 진정한 가치를 발휘합니다. 이 섹션에서는 일반적인 문제 해결 시나리오와 그에 대한 접근 방법을 다룹니다.

4.1 과도한 쿼리 실행 진단

One of the most common performance problems is queries executing far more frequently than necessary, often due to application design issues.

4.1.1 반복되는 쿼리 식별

너무 자주 실행되는 쿼리를 찾아내려면:

  1. 활동 모니터를 열고 확장하세요 최근 비싼 쿼리 창유리.
  2. 정렬 기준 실행/분 (분당 실행 횟수).
  3. 실행 횟수가 지나치게 높은 쿼리를 맨 위에서 찾아보세요.
  4. 의심되는 쿼리를 마우스 오른쪽 버튼으로 클릭하고 선택하세요. 쿼리 텍스트 편집 SQL 문을 조사합니다.

For example, if you see a simple SELECT statement executing 37,000 times per minute, question whether the application really needs to call this query that frequently. Most queries executing more than a few thousand times per minute warrant investigation.

4.1.2 근본 원인 분석

과도한 쿼리 실행은 일반적으로 다음 문제에서 발생합니다.

  • N+1 쿼리 문제: 애플리케이션 코드는 항목 목록을 검색한 다음, 각 항목에 대해 별도의 쿼리를 실행하여 관련 데이터를 가져옵니다. 이렇게 하면 N개의 추가 쿼리가 생성되는데, 여기서 N은 항목 수입니다.
  • 캐싱 누락: The application queries the database for data that rarely changes instead of caching it in application memory.
  • 폴링 루프: 코드는 변경 알림이나 메시지 대기열을 사용하는 대신 상태 변경을 확인하기 위해 반복적으로 데이터베이스를 쿼리합니다.
  • ORM 비효율성: Entity Framework와 유사한 도구는 개발자가 자신의 코드가 SQL로 어떻게 변환되는지 이해하지 못하는 경우 비효율적인 쿼리 패턴을 생성하는 경우가 있습니다.

근본 원인을 확인하려면 쿼리를 애플리케이션 코드로 추적하세요. 어플리케이션 로그인 쿼리가 실행될 때 프로세스 창의 열. 프로세스를 마우스 오른쪽 버튼으로 클릭하고 다음을 선택할 수도 있습니다. 추적 프로세스 SQL Server 프로파일 호출 패턴을 확인하려면.

4.1.3 솔루션 및 모범 사례

과도한 쿼리 실행을 파악한 후에는 다음 솔루션을 고려해 보세요.

  • 일괄 처리: 루프에서 별도의 쿼리를 실행하는 대신, 조인이나 IN 절을 사용하여 단일 쿼리에서 여러 항목을 검색하도록 애플리케이션 코드를 수정합니다.
  • 결과 캐싱: 적절한 만료 시간을 적용하여 애플리케이션 메모리에 자주 액세스되고 드물게 변경되는 데이터를 캐시합니다.
  • 열정적인 로딩: 더 적은 수의 효율적인 쿼리로 관련 데이터를 가져오는 적극적 로딩 전략을 사용하도록 ORM을 구성합니다.
  • 쿼리 매개변수화: 값을 연결하는 대신 매개변수를 사용하는 쿼리를 보장하여 플랜 캐시 재사용을 개선하고 컴파일 오버헤드를 줄입니다.

4.2 차단 문제 조사

블로킹은 한 세션이 다른 세션의 진행을 방해하는 잠금 상태를 유지할 때 발생합니다. 이는 애플리케이션 응답 속도 저하 및 사용자 불만으로 나타납니다.

4.2.1 블로킹 체인 식별

차단을 감지하고 분석하려면:

  1. 활동 모니터를 열고 확장하세요 프로세스 창유리.
  2. 값이 있는 세션을 찾으세요 차단됨 열—이것은 다른 세션이 보유한 잠금을 기다리고 있습니다.
  3. '1'이 포함된 세션을 찾으세요. 헤드 블로커 열—이것이 체인 차단의 근본 원인입니다.
  4. 참고 사항 세션 ID 헤드 블로커의.
  5. 헤드 블로커 세션을 마우스 오른쪽 버튼으로 클릭하고 선택하세요 세부 정보 어떤 명령을 실행하는지 확인하세요.

블로킹 체인을 이해하는 것이 중요합니다. 헤드 블로커는 조사해야 할 세션이지, 다운스트림의 차단된 세션이 아닙니다.

4.2.2 잠금 유형 이해

The 대기 유형 프로세스 창의 열은 차단된 세션이 어떤 유형의 잠금을 기다리고 있는지 나타냅니다.

  • LCK_M_X: 독점 잠금 대기는 일반적으로 UPDATE, DELETE 또는 INSERT 작업으로 인해 발생합니다.
  • LCK_M_S: 공유 잠금 대기, 일반적으로 SELECT 문이 독점 잠금이 해제될 때까지 대기합니다.
  • LCK_M_U: 업데이트 잠금 대기는 업데이트 중에 사용되는 중간 잠금 유형입니다.
  • LCK_M_IX: 의도적 배타적 잠금 대기는 페이지 또는 행 수준 잠금 경합을 나타냅니다.

The 대기 리소스 열은 어떤 데이터베이스 개체가 잠겼는지 보여주어 어떤 테이블이나 인덱스가 경합에 연루되었는지 이해하는 데 도움이 됩니다.

4.2.3 차단 문제 해결

차단 세션과 해당 세션의 작동 방식을 파악한 후에는 다음과 같은 몇 가지 옵션을 선택할 수 있습니다.

  1. 완료될 때까지 기다리십시오. 헤드 블로커가 곧 완료될 합법적인 쿼리를 실행 중이라면 자연스럽게 끝나도록 두는 것이 가장 좋습니다.
  2. 세션 종료: 헤드 블로커가 멈춰 있거나 취소해야 할 쿼리를 실행 중인 경우:
    • 프로세스 창에서 세션을 마우스 오른쪽 버튼으로 클릭합니다.
    • 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 프로세스를 죽일.
    • 대화 상자에서 작업을 확인하세요.
  3. 쿼리 최적화: 동일한 쿼리에서 차단이 반복되는 경우 쿼리를 최적화하여 잠금 기간을 줄입니다.
  4. 격리 수준 조정: 읽기 작업이 많은 작업에서 차단을 줄이려면 READ COMMITTED SNAPSHOT ISOLATION을 사용하는 것을 고려하세요.
  5. 인덱스 튜닝: 쿼리 속도를 높이고 잠금을 유지하는 시간을 줄이려면 인덱스를 추가합니다.

4.3 높은 CPU 사용량 분석

개요 창에 프로세서 시간이 지속적으로 100% 또는 거의 100%로 표시되는 경우, 어떤 쿼리가 원인인지 파악하고 최적화할 수 있는지 확인해야 합니다.

4.3.1 CPU 집약적 쿼리 식별

과도한 CPU를 소모하는 쿼리를 찾으려면:

  1. 열기 최근 비싼 쿼리 창유리.
  2. 정렬 기준 CPU(ms/초) to show queries using the most CPU time.
  3. 목록에서 가장 많이 검색된 검색어를 살펴보세요.
  4. CPU 사용량이 많은 쿼리를 마우스 오른쪽 버튼으로 클릭하고 선택하세요. 쿼리 텍스트 편집 SQL 문을 보려면.
  5. 클라임웍스와 함께 하늘과 닿는 여정을 시작하세요 실행 계획 표시 쿼리가 어떻게 실행되는지 이해하려면

개별 쿼리 CPU 사용량뿐만 아니라 다음 사항에도 주의하십시오. 실행/분 열. 실행당 CPU 사용량이 보통이지만 분당 수천 번 실행되는 쿼리는 CPU를 가장 많이 소모하는 쿼리가 될 수 있습니다.

4.3.2 쿼리 최적화 기술

CPU 소모를 줄이는 일반적인 방법은 다음과 같습니다.

  • 누락된 인덱스 추가: 인덱스 검색은 테이블 스캔보다 CPU 사용량이 훨씬 적습니다. 실행 계획에서 누락된 인덱스 권장 사항을 찾아보세요.
  • 비효율적인 쿼리를 다시 작성하세요: 커서를 집합 기반 연산으로 바꾸고, WHERE 절에서 불필요한 함수를 제거하고, 중복된 조인을 제거합니다.
  • 통계 업데이트: 오래된 통계로 인해 SQL Server 비효율적인 실행 계획을 선택하려면 영향을 받는 테이블에서 UPDATE STATISTICS를 실행하세요.
  • 데이터 볼륨 줄이기: WHERE 절을 추가하여 데이터를 더 일찍 필터링하고, 페이지 나누기에는 TOP 또는 OFFSET/FETCH를 사용하고, SELECT *를 사용하지 마세요.
  • 매개변수 스니핑 수정: 매개변수 스니핑으로 인해 문제가 발생하는 경우 OPTION(RECOMPILE), 쿼리 힌트 또는 계획 가이드를 사용하세요.

4.4 메모리 문제 조사

메모리 부족으로 인해 쿼리가 디스크로 스필되어 성능이 크게 저하될 수 있습니다. 활동 모니터를 사용하면 메모리 사용량이 많은 작업을 파악할 수 있습니다.

4.4.1 메모리 메트릭 이해

The 메모리 사용 프로세스 창의 열은 각 세션에 할당된 메모리를 KB 단위로 표시합니다. 단일 세션의 메모리 사용량이 높은 것은 종종 다음을 나타냅니다.

  • 처음에 허용된 메모리에 맞지 않는 대규모 정렬 또는 해시 작업
  • 엄청난 결과 세트를 검색하는 쿼리
  • 과도한 병렬 처리로 인해 실행 계획 연산자의 복사본이 많이 생성됩니다.
  • CLR 저장 프로시저 또는 함수의 메모리 누수

리소스 대기 창에는 쿼리가 충분한 메모리 부여를 받지 못하고 메모리가 사용 가능해질 때까지 기다려야 하는 경우 메모리 대기가 표시될 수 있습니다.

4.4.2 메모리 집약적 쿼리 식별

메모리 부족을 유발하는 쿼리를 찾으려면:

  1. . 프로세스 창, 정렬 기준 메모리 사용 to see sessions consuming the most memory.
  2. 메모리 사용량이 많은 세션을 마우스 오른쪽 버튼으로 클릭하고 선택하세요. 세부 정보 그들의 질문을 보려면.
  3. . 최근 비싼 쿼리 패널에서 높은 수준의 쿼리를 찾으세요. 논리적 읽기 or 논리적 쓰기이는 종종 메모리 사용량과 관련이 있습니다.
  4. 메모리 부여를 사용하는 Sort 및 Hash Match 연산자에 대한 실행 계획을 조사합니다.

실행 계획에서 "메모리 부여" 경고나 스필 경고가 표시되는 쿼리는 메모리 부족 문제를 나타냅니다.

4.5 애플리케이션 성능 문제 감지

사용자가 애플리케이션 응답 시간이 느리다고 보고하면 Activity Monitor를 통해 데이터베이스에 병목 현상이 있는지 확인할 수 있습니다.

4.5.1 활동 모니터와 애플리케이션 문제 연관

애플리케이션 속도 저하를 조사하려면:

  1. 사용자가 문제를 보고한 정확한 시간과 영향을 받은 애플리케이션을 기록해 두세요.
  2. 활동 모니터를 열고 다음을 확인하세요. 개요 당시 리소스 급증에 대한 창입니다.
  3. . 프로세스 패널, 필터링 기준 어플리케이션 영향을 받은 애플리케이션의 연결만 표시합니다.
  4. 높은 것을 찾으세요 기다리는 시간 데이터베이스 지연을 나타내는 값입니다.
  5. 확인 최근 비싼 쿼리 상당한 리소스를 소모하는 해당 애플리케이션의 쿼리에 대한 창입니다.

데이터베이스에는 특이한 활동이 없는데 사용자가 속도 저하를 겪는다면, 문제는 애플리케이션 코드, 네트워크 지연 또는 클라이언트 측 성능에 있을 가능성이 높습니다.

4.5.2 비효율적인 애플리케이션 패턴 식별

활동 모니터는 애플리케이션 디자인에서 몇 가지 안티 패턴을 보여줍니다.

  • Chatty 애플리케이션: 더 적은 수의 효율적인 쿼리 대신 여러 개의 작은 쿼리를 사용합니다. 최근 비용이 많이 드는 쿼리에서 높은 연결 수와 수많은 간단한 쿼리로 식별됩니다.
  • N+1 쿼리: 하나의 쿼리에 이어 관련 데이터에 대한 N개의 추가 쿼리가 이어집니다. 분당 실행 횟수가 매우 높은 간단한 쿼리로 표시됩니다.
  • 대규모 결과 집합: 필요한 것보다 훨씬 많은 데이터를 검색하는 애플리케이션. 높은 논리적 읽기 간단한 SELECT * 쿼리와 결합되었습니다.
  • 타임아웃이 누락되었습니다: 명령 시간 초과를 설정하지 않은 애플리케이션은 연결을 무기한 열어 둘 수 있으며, 프로세스 창에서 장기 실행 세션으로 표시됩니다.

5. 대체 방법: T-SQL을 통해 활동 모니터 데이터 가져오기

활동 모니터는 편리한 그래픽 인터페이스를 제공하지만, 때로는 동등한 정보를 프로그래밍 방식으로 검색하거나 사용자 정의 모니터링 솔루션을 만들어야 할 수도 있습니다.

5.1 동적 관리 뷰(DMV) 사용

SQL Server 활동 모니터가 백그라운드에서 쿼리하는 동적 관리 뷰를 통해 활동 정보를 노출합니다.

5.1.1 활동 모니터링을 위한 주요 DMV

The most important DMVs for replicating Activity Monitor functionality include:

  • sys.dm_exec_requests: CPU, I/O, 대기 정보와 함께 현재 실행 중인 요청을 표시합니다.
  • sys.dm_exec_sessions: Contains session-level information like login name, host name, and program name.
  • sys.dm_os_wait_stats: 인스턴스 전체에 대한 누적 대기 통계를 제공합니다.
  • sys.dm_exec_query_stats: 캐시된 쿼리에 대한 집계된 성능 통계를 포함합니다.
  • sys.dm_io_가상_파일_통계: 데이터 및 로그 파일에 대한 I/O 통계를 반환합니다.
  • sys.dm_exec_sql_text: 주어진 sql_handle 또는 plan_handle에 대한 SQL 텍스트를 검색합니다.
  • sys.dm_exec_query_plan: 캐시된 쿼리에 대한 실행 계획을 반환합니다.

5.1.2 프로세스 정보에 대한 샘플 쿼리

프로세스 창 기능을 복제하려면 다음을 쿼리하면 됩니다.

SELECT 
    s.session_id AS [Session ID],
    CASE WHEN s.is_user_process = 1 THEN 'Yes' ELSE 'No' END AS [User Process],
    s.login_name AS [Login],
    ISNULL(CAST(r.blocking_session_id AS VARCHAR), '') AS [Blocked By],
    CASE 
        WHEN r2.session_id IS NOT NULL 
        AND (r.blocking_session_id = 0 OR r.session_id IS NULL) 
        THEN '1' 
        ELSE '' 
    END AS [Head Blocker],
    ISNULL(DB_NAME(r.database_id), '') AS [Database],
    ISNULL(t.task_state, '') AS [Task State],
    ISNULL(r.command, '') AS [Command],
    r.cpu_time AS [CPU Time],
    r.total_elapsed_time AS [Elapsed Time],
    r.wait_time AS [Wait Time],
    r.wait_type AS [Wait Type],
    s.memory_usage * 8 AS [Memory Use (KB)],
    s.host_name AS [Host Name],
    s.program_name AS [Application]
FROM sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
LEFT JOIN sys.dm_exec_requests r2 ON r.session_id = r2.blocking_session_id
LEFT JOIN sys.dm_os_tasks t ON r.session_id = t.session_id
WHERE s.session_id != @@SPID
ORDER BY s.session_id;

5.1.3 대기 통계에 대한 샘플 쿼리

리소스 대기 창과 유사한 대기 통계를 보려면 다음을 수행하세요.

SELECT TOP 10
    wait_type AS [Wait Type],
    wait_time_ms / 1000.0 AS [Wait Time (sec)],
    waiting_tasks_count AS [Waiting Tasks],
    wait_time_ms / NULLIF(waiting_tasks_count, 0) AS [Avg Wait Time (ms)]
FROM sys.dm_os_wait_stats
WHERE wait_type NOT LIKE '%SLEEP%'
    AND wait_type NOT LIKE '%IDLE%'
    AND wait_type NOT LIKE '%QUEUE%'
ORDER BY wait_time_ms DESC;

5.2 sp_WhoIsActive 사용

sp_WhoIsActive는 Activity Monitor보다 더 자세한 정보를 단일 결과 집합으로 제공하는 강력한 커뮤니티에서 만든 저장 프로시저입니다.

5.2.1 sp_WhoIsActive 설치

sp_WhoIsActive를 설치하려면:

  1. 다음에서 최신 버전을 다운로드하십시오. http://whoisactive.com.
  2. 다운로드는 프로시저 정의를 포함하는 SQL 스크립트입니다.
  3. 스크립트를 엽니다 SQL Server 매니지먼트 스튜디오.
  4. 에 연결 SQL Server 예.
  5. 스크립트를 실행하여 마스터 데이터베이스에 프로시저를 생성합니다.
  6. 적절한 사용자에게 실행 권한을 부여합니다.

sp_WhoIsActive는 master에 설치되므로 모든 데이터베이스 컨텍스트에서 액세스할 수 있습니다.

5.2.2 기본 사용 예

sp_WhoIsActive를 사용하는 가장 간단한 방법은 다음과 같습니다.

EXEC sp_WhoIsActive;

이는 모든 활성 세션과 해당 쿼리, 대기 유형, 차단 정보 및 리소스 사용량을 보여주는 결과 세트를 반환합니다.

해당 기간 동안의 활동을 보여주는 10초 샘플의 경우:

EXEC sp_WhoIsActive @delta_interval = 10;

이는 CPU와 읽기 등의 측정 항목에 대한 델타를 계산하여 10초 동안 발생한 일을 보여줍니다.

5.2.3 고급 매개변수

sp_WhoIsActive는 사용자 정의를 위한 다양한 매개변수를 지원합니다.

  • @필터: 특정 세션, 데이터베이스 또는 로그인으로 결과를 필터링합니다.
  • @필터_타입: 필터가 적용되는 대상(세션, 데이터베이스, 로그인 등)을 지정합니다.
  • @get_plans: 결과에 실행 계획을 포함합니다(1로 설정).
  • @get_locks: 자세한 잠금 정보를 표시합니다(1로 설정).
  • @get_transaction_info: 거래 세부 정보를 표시합니다(1로 설정).
  • @정렬_순서: 다양한 측정 항목(CPU, 읽기, 기간 등)에 따라 결과를 정렬합니다.
  • @목적지_테이블: 과거 추적을 위해 결과를 표에 삽입합니다.

CPU별로 정렬된 계획을 보여주는 예:

EXEC sp_WhoIsActive 
    @get_plans = 1,
    @sort_order = '[CPU] DESC';

5.3 시스템 저장 프로시저 사용

SQL Server DMV나 활동 모니터보다 제공하는 정보는 적지만, 활동을 모니터링하기 위한 기존 저장 프로시저가 포함되어 있습니다.

5.3.1 sp_who 및 sp_who2

sp_who 프로시저는 기본 세션 정보를 보여줍니다.

EXEC sp_who;

sp_who2 프로시저는 좀 더 자세한 정보를 제공합니다.

EXEC sp_who2;

Both procedures show session IDs, login names, CPU time, and blocking information. However, they lack the rich detail available through DMVs or Activity Monitor. They’re most useful for quick checks when you need minimal information quickly.

5.3.2 기타 유용한 시스템 절차

모니터링을 위한 추가 시스템 절차는 다음과 같습니다.

  • sp_lock: 잠금 정보를 표시합니다(더 이상 사용되지 않음. 대신 sys.dm_tran_locks를 사용하세요).
  • sp_모니터: 통계를 표시합니다. SQL Server 활동.
  • sp_help: 개체 정의와 메타데이터를 표시합니다.
  • DBCC SQLPERF: 트랜잭션 로그 공간 사용량과 대기 통계를 표시합니다.

5.4 사용자 정의 모니터링 스크립트 만들기

Activity Monitor가 제공하는 것 이상의 특정 모니터링이 필요한 환경의 경우 DMV를 사용하여 사용자 정의 솔루션을 구축할 수 있습니다.

5.4.1 전체 활동 모니터 동등 스크립트

Here’s a comprehensive script that replicates most Activity Monitor functionality:

-- Processes Information
SELECT 
    s.session_id AS [Session ID],
    CONVERT(CHAR(1), s.is_user_process) AS [User Process],
    s.login_name AS [Login],
    ISNULL(CONVERT(VARCHAR, w.blocking_session_id), '') AS [Blocked By],
    CASE 
        WHEN r2.session_id IS NOT NULL 
        AND (r.blocking_session_id = 0 OR r.session_id IS NULL) 
        THEN '1' 
        ELSE '' 
    END AS [Head Blocker],
    ISNULL(DB_NAME(r.database_id), N'') AS [Database],
    ISNULL(t.task_state, N'') AS [Task State],
    ISNULL(r.command, N'') AS [Command],
    SUBSTRING(st.text, (r.statement_start_offset/2) + 1,
        ((CASE r.statement_end_offset 
            WHEN -1 THEN DATALENGTH(st.text)
            ELSE r.statement_end_offset 
        END - r.statement_start_offset) / 2) + 1) AS [Statement],
    st.text AS [Command Text],
    r.cpu_time AS [CPU Time (ms)],
    r.total_elapsed_time / 1000 AS [Elapsed Time (sec)],
    r.wait_time AS [Wait Time (ms)],
    r.wait_type AS [Wait Type],
    r.wait_resource AS [Wait Resource],
    s.memory_usage * 8 AS [Memory Use (KB)],
    s.host_name AS [Host Name],
    c.client_net_address AS [Net Address],
    s.program_name AS [Application]
FROM sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
LEFT JOIN sys.dm_exec_requests w ON r.session_id = w.blocking_session_id
LEFT JOIN sys.dm_exec_requests r2 ON r.session_id = r2.blocking_session_id
LEFT JOIN sys.dm_os_tasks t ON r.session_id = t.session_id 
    AND r.request_id = t.request_id
LEFT JOIN sys.dm_exec_connections c ON s.session_id = c.session_id
OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) st
WHERE s.session_id != @@SPID
ORDER BY s.session_id;

-- Recent Expensive Queries
SELECT TOP 20
    qs.execution_count / 
        DATEDIFF(MINUTE, qs.creation_time, GETDATE()) AS [Executions/min],
    qs.total_worker_time / 1000 AS [CPU Time (ms)],
    qs.total_physical_reads AS [Physical Reads],
    qs.total_logical_writes AS [Logical Writes],
    qs.total_logical_reads AS [Logical Reads],
    qs.total_elapsed_time / qs.execution_count / 1000 AS [Avg Duration (ms)],
    SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
        ((CASE qs.statement_end_offset 
            WHEN -1 THEN DATALENGTH(st.text)
            ELSE qs.statement_end_offset 
        END - qs.statement_start_offset) / 2) + 1) AS [Query Text]
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
WHERE qs.execution_count > 0
ORDER BY qs.total_worker_time DESC;

5.4.2 SQL 에이전트 작업을 사용한 모니터링 자동화

다음을 사용하여 사용자 정의 모니터링 스크립트를 예약할 수 있습니다. SQL Server 에이전트:

  1. 모니터링 결과를 저장할 테이블을 만듭니다.
  2. 모니터링 스크립트를 수정하여 결과를 이 표에 삽입하세요.
  3. In SQL Server Management Studio, 확장 SQL Server 에이전트 개체 탐색기에서.
  4. 마우스 오른쪽 단추로 클릭 작업 선택 새 직업.
  5. 정기적으로 모니터링 스크립트를 실행하도록 작업을 구성합니다.
  6. 수집된 데이터를 기반으로 알림이나 보고서를 설정합니다.

이 접근 방식을 사용하면 Activity Monitor에서 제공하지 않는 과거 추적 및 추세 분석이 가능합니다.

6. 활동 모니터 제한 사항 및 고려 사항

활동 모니터는 가치 있는 도구이지만, 한계를 이해하면 적절하게 사용하고 필요한 경우 다른 도구로 보완하는 데 도움이 됩니다.

6.1 활동 모니터 오버헤드 이해

활동 모니터는 무료가 아닙니다. 정보를 수집하고 표시하는 데 서버 리소스를 소모합니다. 이러한 오버헤드를 이해하면 책임감 있게 사용하는 데 도움이 됩니다.

6.1.1 서버 리소스에 미치는 영향

활동 모니터는 새로 고침할 때마다 시스템 DMV에 대한 쿼리를 실행합니다. 이러한 쿼리는 CPU를 소모하고, 논리적 읽기를 생성하며, 시스템 테이블에 대한 잠금을 일시적으로 유지할 수 있습니다. 사용량이 많은 서버에서는 이러한 오버헤드가 성능에 영향을 미칠 수 있습니다.

프로세스 및 최근 비용이 많이 드는 쿼리 창은 잠재적으로 큰 DMV와 캐시 테이블을 스캔해야 하므로 특히 비용이 많이 듭니다. 수천 개의 캐시된 쿼리 계획이 있는 서버에서는 최근 비용이 많이 드는 쿼리를 새로 고치는 데 몇 초가 걸릴 수 있습니다.

Microsoft 설명서에서는 새로 고침 간격을 10초 미만으로 설정하면 서버 성능에 눈에 띄는 영향을 미칠 수 있다고 경고합니다. 특히 이미 로드된 시스템에서는 더욱 그렇습니다.

6.1.2 새로 고침 간격 모범 사례

상황에 맞는 새로 고침 간격을 선택하세요.

  • 1~5초: 부하가 적은 서버에서 발생하는 심각한 문제를 즉시 해결하는 데에만 사용됩니다. 이 간격으로 활동 모니터를 실행하지 마세요.
  • 10초(기본값): Reasonable for most troubleshooting scenarios and general monitoring.
  • 30~60초: 과부하가 걸리는 프로덕션 서버나 장시간 모니터링을 하는 경우에 더 나은 선택입니다.
  • 수동 새로 고침만 가능: 지속적인 폴링 없이 가끔 현재 상태를 확인하고 싶은 상황입니다.

조사가 끝나면 항상 활동 모니터를 닫으세요. 특히 여러 사용자가 여러 인스턴스를 동시에 실행한 경우, 계속 실행 상태로 두지 마세요.

6.2 대기 유형 그룹화 문제

Activity Monitor’s approach to categorizing waits, while simplifying the view, can obscure important diagnostic information.

6.2.1 활동 모니터 그룹 대기 방법

SQL Server 수백 가지의 서로 다른 대기 유형을 추적하며, 각각은 특정 리소스나 상태를 나타냅니다. 활동 모니터는 이러한 대기 유형을 "버퍼 래치", "잠금", "메모리"와 같은 광범위한 범주로 그룹화합니다.

예를 들어, "버퍼 래치" 범주에는 PAGELATCH_SH, PAGELATCH_UP, PAGELATCH_EX 및 기타 여러 대기 유형이 포함됩니다. 이러한 대기 유형은 모두 페이지 액세스와 관련이 있지만, 원인과 해결 방법은 서로 다릅니다.

Microsoft에서는 어떤 대기 유형이 어떤 범주에 해당하는지 정확하게 문서화하지 않아 실제로 보고 있는 내용을 이해하기 어렵습니다.

6.2.2 누락된 대기 유형

Activity Monitor doesn’t show all wait types. Most notably, it often omits CXPACKET waits, which indicate parallel query execution. CXPACKET waits are common and usually not problematic, but knowing they’re present helps you understand workload characteristics.

Activity Monitor에서는 "Buffer Latch"가 가장 큰 대기 항목으로 표시되지만 다른 도구에서는 CXPACKET이 가장 큰 대기 항목으로 표시되는 경우, 이러한 불일치는 Activity Monitor의 필터링 및 그룹화 논리에서 비롯됩니다.

6.2.3 특정 대기 유형이 중요한 이유

문제 해결을 위해서는 특정 대기 유형을 아는 것이 중요합니다.

  • 페이지 래치_EX: 할당 페이지에서 tempdb 경합이 발생하는 경우가 많습니다. 해결 방법은 tempdb 데이터 파일을 더 추가하는 것입니다.
  • 페이지 래치_SH: 사용자 테이블에 핫 페이지가 있을 수 있습니다. 해결 방법은 파티셔닝이나 인덱스 재구성입니다.
  • 페이지 래치업: 업데이트 중에 자주 발생하는 문제입니다. 문제가 아닌 정상적인 작동을 나타낼 수 있습니다.

활동 모니터는 이러한 모든 대기 유형을 "버퍼 래치"로 그룹화하여 진단을 더욱 어렵게 만듭니다. sp_WhoIsActive 및 DMV 쿼리와 같은 도구는 특정 대기 유형을 표시합니다.

6.3 데이터 정확성 및 적시성

활동 모니터는 거의 실시간에 가까운 보기를 제공하지만, 핵심은 "거의"라는 단어입니다. 데이터 수집 방식을 이해하면 결과를 정확하게 해석하는 데 도움이 됩니다.

6.3.1 스냅샷 대 지속적 모니터링

활동 모니터는 각 새로 고침 간격마다 생성된 특정 시점의 스냅샷을 표시합니다. 스냅샷 사이에 발생하는 이벤트는 캡처되지 않습니다. 쿼리가 2초 동안 실행되고 10초마다 새로 고침하는 경우, 타이밍에 따라 해당 쿼리가 한 번만 표시되거나 전혀 표시되지 않을 수 있습니다.

즉, 활동 모니터는 지속적인 문제(몇 분 동안 지속되는 차단, 지속적으로 높은 CPU 사용량)를 찾는 데는 뛰어나지만 일시적인 문제(잠시 교착 상태, 가끔씩 발생하는 쿼리 급증)는 놓칠 수 있습니다.

6.3.2 집계 및 샘플링

최근 비용이 많이 드는 쿼리 창은 쿼리 계획이 캐시에 입력된 이후 집계된 데이터를 표시합니다. 매개변수 값이 다른 두 개의 동일한 쿼리가 계획을 공유하는 경우 하나의 행으로 표시됩니다. 이러한 집계는 특정 매개변수 조합(매개변수 스니핑 문제)과 관련된 문제를 가릴 수 있습니다.

The Resource Waits pane calculates rates by comparing snapshots. If wait statistics reset between snapshots (rare but possible), the calculated rates may be incorrect.

6.4 활동 모니터를 사용하지 않는 경우

활동 모니터가 모든 모니터링 상황에 적합한 것은 아닙니다. 다른 도구가 더 나은 선택일 때는 이를 인지하세요.

6.4.1 과거 분석 요구 사항

활동 모니터는 현재 또는 최근 활동만 표시합니다. 과거 데이터는 저장하지 않습니다. 며칠 또는 몇 주 동안의 추세를 분석하거나, 현재 성과를 기준선과 비교하거나, 성과 패턴에 대한 보고서를 생성해야 하는 경우에는 활동 모니터만으로는 충분하지 않습니다.

역사적 분석을 위해 다음을 사용하십시오. SQL Server’s built-in Performance Dashboard, Extended Events with file targets, or third-party monitoring solutions.

6.4.2 자세한 대기 통계 요구 사항

고급 튜닝을 위해 정확한 대기 유형 정보가 필요한 경우, Activity Monitor의 그룹화 및 필터링 기능은 적합하지 않습니다. 대신 DMV 쿼리를 직접 사용하거나 sp_WhoIsActive를 사용하세요.

포괄적인 대기 통계 분석을 위해 sys.dm_os_wait_stats를 직접 쿼리하고 양성 대기를 수동으로 필터링합니다.

6.4.3 프로덕션 서버 고려 사항

과부하 상태의 운영 서버에서는 Activity Monitor의 오버헤드가 문제가 될 수 있습니다. 여러 데이터베이스 관리자가 동일한 서버에서 Activity Monitor를 동시에 실행해서는 안 됩니다.

프로덕션 모니터링의 경우 모니터링 데이터베이스에 저장된 예약된 DMV 스냅샷과 같은 가벼운 대안을 고려하거나 Always On 구성에서 읽기 전용 라우팅을 사용하여 보조 복제본을 모니터링합니다.

7. 활동 모니터 사용 모범 사례

모범 사례를 따르면 서버에 미치는 부정적인 영향을 최소화하면서 Activity Monitor에서 최대 가치를 얻을 수 있습니다.

7.1 활동 모니터를 사용해야 하는 경우

활동 모니터는 특정 상황에서 빛을 발합니다. 자신의 필요에 맞춰 활동 모니터의 강점을 활용하세요.

7.1.1 실시간 성능 문제

활동 모니터는 사용자에게 현재 문제가 발생하고 있으며 문제를 즉시 진단해야 할 때 유용합니다. 실시간 보기를 통해 현재 상황을 파악할 수 있습니다.

"애플리케이션이 느리다"는 알림을 받으면 가장 먼저 해야 할 일 중 하나는 활동 모니터를 여는 것입니다. 데이터베이스가 사용 중인지, 차단되었는지, 아니면 유휴 상태인지 빠르게 확인할 수 있습니다.

7.1.2 애플리케이션 속도 저하 조사

특정 애플리케이션이 응답하지 않을 때, 활동 모니터를 통해 데이터베이스 문제가 원인인지 확인할 수 있습니다. 프로세스 창을 애플리케이션 이름으로 필터링하면 해당 애플리케이션의 데이터베이스 활동만 확인할 수 있습니다.

사용자가 문제를 보고했는데도 애플리케이션에서 데이터베이스 활동이 표시되지 않으면 문제는 스택의 다른 곳에 있는 것입니다. 블로킹이 심하거나 비용이 많이 드는 쿼리가 발생하면 원인을 찾은 것입니다.

7.1.3 빠른 상태 점검

활동 모니터는 일상적인 관리 중에 빠른 상태 점검을 위한 훌륭한 대시보드를 제공합니다. 대시보드를 열고 개요 그래프를 살펴보고 이상이 없는지 확인하세요.

이러한 간단한 점검은 몇 초면 끝나며, 심각한 문제가 발생하기 전에 문제를 발견할 수 있습니다. 이를 일상의 일부로 만드세요.

7.2 최적의 구성 설정

활동 모니터를 적절하게 구성하면 유용성과 리소스 사용량이 모두 향상됩니다.

7.2.1 권장 새로 고침 간격

새로 고침 간격을 목적에 맞게 설정하세요.

  • 활성 문제 해결: 10초면 적당한 오버헤드로 좋은 반응성을 얻을 수 있습니다.
  • 확장된 모니터링: 30~60초로 설정하면 관찰 기간이 길어질 때 서버에 미치는 영향이 줄어듭니다.
  • 중요 문제 진단: 1초가 중요할 때는 5초를 사용하면 세밀한 측정이 가능하지만, 짧게 사용하세요.
  • 정기 건강 검진: 시청하지 않을 때 수동 새로 고침(1시간 간격)

작업이 끝나면 활동 모니터를 닫는 것을 잊지 마세요. 활동 모니터를 길게 설정하고 잊어버리면 서버 리소스가 낭비됩니다.

7.2.2 필터링 전략

필터를 사용하여 관련 정보에 집중하고 인지 부하를 줄이세요.

  • 필터 프로세스 데이터베이스 특정 데이터베이스에 대한 활동만 확인합니다.
  • 태그 로그인 특정 사용자의 활동을 추적합니다.
  • 태그 작업 상태 = RUNNING을 눌러 유휴 세션을 숨깁니다.
  • 태그 어플리케이션 특정 프로그램의 트래픽을 분리합니다.
  • 비어 있지 않은 것만 표시 차단됨 차단 상황만 볼 수 있습니다.

7.2.3 열 선택 및 정렬

활동 모니터 데이터를 검토하기 위한 체계적인 접근 방식을 개발합니다.

  1. 개요부터 시작하세요: 그래프를 확인하여 뚜렷한 급증이나 이상 징후를 찾아보세요.
  2. 차단을 위한 프로세스 확인: 세션 ID로 정렬한 다음 차단된 값을 찾습니다.
  3. 리소스 대기 시간 검토: 누적 대기 시간별로 정렬하여 리소스 병목 현상을 파악합니다.
  4. 비용이 많이 드는 쿼리 분석: 다양한 문제 유형을 찾으려면 다양한 지표(CPU, 실행, 읽기)를 기준으로 정렬하세요.
  5. I/O 패널로 확인하세요: I/O 집약적 쿼리가 높은 디스크 활동과 상관관계가 있는지 확인합니다.

7.3 다른 도구와의 통합

활동 모니터는 단독 솔루션보다는 광범위한 툴킷의 일부로 사용할 때 가장 잘 작동합니다.

7.3.1 ~와 함께 사용 SQL Server 프로파일

활동 모니터 및 SQL Server 프로파일러는 서로 잘 보완됩니다. 활동 모니터에서 문제가 있는 세션을 발견하면 마우스 오른쪽 버튼을 클릭하고 다음을 선택하세요. 추적 프로세스 SQL Server 프로파일.

해당 세션의 활동만 캡처하도록 필터가 이미 구성된 Profiler가 실행됩니다. 실행된 명령문의 전체 시퀀스, 타이밍 정보, 오류 메시지가 표시되는데, 이는 Activity Monitor에서는 제공하지 않는 세부 정보입니다.

에 대한 자세한 내용을 보려면 SQL Server 프로파일러 기능 및 고급 추적 기술에 대해서는 다음을 참조하세요. 포괄적 인 SQL Server 프로파일러 가이드.

7.3.2 확장 이벤트로 보완

확장 이벤트는 Activity Monitor에서 놓치는 정보를 포착하는 저부하의 상세 모니터링 기능을 제공합니다. 확장 이벤트 세션을 생성하여 교착 상태, 장기 실행 쿼리 또는 과도한 재컴파일과 같은 특정 이벤트를 추적할 수 있습니다.

즉각적인 조사에는 활동 모니터를 사용하고, 지속적인 모니터링 및 과거 이력 분석에는 확장 이벤트를 사용하세요. 두 도구는 서로 다른 요구 사항을 충족합니다.

에 대한 자세한 내용을 보려면 SQL Server 확장된 이벤트 기능 및 고급 모니터링 기술은 다음을 참조하세요. 포괄적 인 SQL Server 확장 이벤트 가이드.

7.3.3 타사 모니터링 솔루션

Commercial tools like SolarWinds Database Performance Analyzer, Redgate SQL Monitor, and Quest Spotlight provide features Activity Monitor lacks: alerting, historical trending, capacity planning, and automated diagnostics.

이러한 도구는 활동 모니터를 대체하는 것이 아니라, 활동 모니터에 귀중한 추가 기능입니다. 정교한 모니터링 도구가 출시된 후에도 활동 모니터는 빠른 확인 및 조사에 여전히 유용합니다.

7.4 피해야 할 일반적인 실수

활동 모니터와 관련된 일반적인 실수를 이해하면 활동 모니터를 더 효과적으로 사용하는 데 도움이 됩니다.

7.4.1 활동 모니터를 계속 실행 상태로 두기

The most common mistake is opening Activity Monitor and leaving it running indefinitely. This wastes server resources and provides little value since you’re not actively watching.

활동 모니터를 사용하지 않을 때는 닫으세요. 지속적인 모니터링이 필요한 경우, 예약된 데이터 수집 기능을 갖춘 적절한 모니터링 솔루션을 구현하세요.

7.4.2 활동 모니터에만 지나치게 의존하는 것

활동 모니터는 서버 상태에 대한 한 가지 관점을 제공합니다. 이것에만 의존하지 마세요. OS 수준 메트릭을 위한 Windows 성능 모니터, 자세한 추적을 위한 확장 이벤트, 그리고 쿼리 튜닝을 위한 실행 계획 분석을 함께 활용하세요.

활동 모니터는 문제를 식별하는 데 도움이 되지만, 문제를 해결하려면 추가 도구와 심층적인 분석이 필요한 경우가 많습니다.

전단지에 포함된 링크에 대해 더 알아보기 SQL Server 우리의 성과 모니터 완전한 가이드.

7.4.3 과거 추세 무시

활동 모니터는 현재 상태를 보여주지만, 성능 문제는 종종 시간에 따른 패턴을 보입니다. 과거 데이터 수집을 구현하여 현재 지표를 기준선과 비교하고 추세를 파악하세요.

역사적 맥락이 없다면 오늘의 "정상적인" CPU 사용량이 지난달 기준보다 30% 더 높다는 사실을 알아차리지 못할 수도 있습니다. 이는 점진적인 저하를 나타냅니다.

8. 활동 모니터 문제 해결

활동 모니터 자체에도 문제가 발생할 수 있습니다. 이러한 문제를 해결하는 방법을 알고 있으면 불편함을 예방할 수 있습니다.

8.1 활동 모니터가 열리지 않거나 데이터가 표시되지 않음

활동 모니터가 열리지만 빈 창이 표시되거나 전혀 열리지 않는 경우, 여러 가지 요인이 원인일 수 있습니다.

8.1.1 권한 문제

The most common cause of Activity Monitor problems is insufficient permissions. To verify and resolve:

  1. 서버 수준 권한을 확인하세요.
    SELECT * FROM fn_my_permissions(NULL, 'SERVER')
    WHERE permission_name = 'VIEW SERVER STATE';
    
  2. 행이 반환되지 않으면 VIEW SERVER STATE 권한이 없습니다.
  3. 서버 관리자에게 권한을 부여해 달라고 요청하세요.
    USE master;
    GRANT VIEW SERVER STATE TO [YourLogin];
    
  4. 권한이 부여된 후 활동 모니터를 닫았다가 다시 엽니다.

8.1.2 버전 호환성 문제

이전 버전을 사용하여 SQL Server Management Studio를 사용하여 최신 버전에 연결 SQL Server 버전에 따라 활동 모니터 오류가 발생할 수 있습니다. 도구가 새로운 대기 유형이나 시스템 보기 열을 이해하지 못할 수 있습니다.

항상 귀하의 버전과 일치하거나 최신인 SSMS 버전을 사용하십시오. SQL Server 버전. Microsoft는 최신 SSMS를 별도로 무료 다운로드로 제공합니다. SQL Server 자체.

8.1.3 방화벽 및 네트워크 문제

활동 모니터에는 연결이 필요합니다. SQL Server 표준 포트(기본값 1433)에서 인스턴스를 실행합니다. 개체 탐색기를 통해 연결할 수 있지만 활동 모니터가 실패하는 경우, 방화벽 규칙이 특정 연결을 차단하고 있을 수 있습니다.

귀하의 클라이언트가 다음에 도달할 수 있는지 확인하십시오. SQL Server 모든 필수 포트에서 컴퓨터를 연결하세요. Windows 방화벽과 클라이언트와 서버 간의 네트워크 방화벽을 모두 확인하세요.

8.2 활동 모니터가 영구적으로 일시 중지됨

특히 다음과 같은 일반적인 문제 SQL Server 2019년, 활동 모니터가 일시 정지 상태로 열리고 다시 시작되지 않습니다.

8.2.1 일시 정지 상태 이해

활동 모니터가 일시 중지되면 모든 창에 "일시 중지됨" 상태가 표시되고, 다시 시작 버튼이 작동하지 않을 수 있습니다. 이로 인해 서버 활동을 볼 수 없게 됩니다.

일시 중지 상태는 의도적인 일시 중지 작업보다는 권한 문제, 원격 연결 제한 또는 SSMS 버전 버그로 인해 발생하는 경우가 많습니다.

8.2.2 일반적인 원인

활동 모니터는 다음과 같은 이유로 영구적으로 일시 중지 상태가 될 수 있습니다.

  • 최근에 추가된 새 창에 VIEW SERVER STATE 권한이 없습니다. SQL Server 버전
  • 원격 연결이 비활성화되었습니다. SQL Server 예
  • 특정 시스템 쿼리에 대한 인증 실패
  • 특히 18.0~18.3의 특정 SSMS 빌드의 버그
  • 클라이언트와 서버 간 연결 문제

8.2.3 해결 단계

활동 모니터 일시 중지 상태 문제를 해결하려면 다음을 수행하세요.

  1. SSMS 업데이트: 최신 다운로드 및 설치 SQL Server Microsoft 웹사이트의 Management Studio 버전입니다. 이후 릴리스에서는 일시 중지된 상태와 관련된 많은 버그가 수정되었습니다.
  2. 권한 확인: VIEW SERVER STATE 및 VIEW ANY DEFINITION 권한이 있는지 확인하세요.
  3. 원격 연결을 확인하세요: 해당 SQL Server 인스턴스는 원격 연결을 허용합니다.
    EXEC sp_configure 'remote access';
    

    값이 0이면 관리자에게 요청하여 활성화하세요.

  4. Restart SSMS: Sometimes simply closing all windows and restarting SQL Server Management Studio가 이 문제를 해결합니다.
  5. Windows 인증으로 연결: SQL 인증을 사용하는 경우 Windows 인증을 대신 사용해 보세요. Windows 인증은 때때로 인증 관련 일시 중지 문제를 우회합니다.

8.3 활동 모니터 사용 시 성능 문제

활동 모니터 자체가 느려지거나 서버 성능이 저하되는 경우 조정이 필요합니다.

8.3.1 모니터링 오버헤드 감소

활동 모니터의 영향을 최소화하려면 다음을 수행하세요.

  1. 새로 고침 간격을 30초 또는 1분으로 늘리세요.
  2. 사용하지 않는 창은 축소 버튼을 클릭하여 닫으세요.
  3. 창이 축소되면 활동 모니터는 해당 창에 대한 데이터를 쿼리하지 않습니다.
  4. 여러 개의 활동 모니터 인스턴스를 동시에 실행하지 마세요.
  5. 문제를 적극적으로 조사하지 않을 때는 활동 모니터를 완전히 닫으세요.

8.3.2 대체 경량 모니터링 방법

활동 모니터가 사용자 환경에 비해 리소스를 너무 많이 사용하는 경우 다음 대안을 고려하세요.

  • DMV에 직접 문의하세요: 필요한 정보만 검색하는 구체적인 T-SQL 쿼리를 작성합니다.
  • sp_WhoIsActive를 사용하세요. 이 저장 프로시저는 매우 최적화되어 있으며 일반적으로 Activity Monitor보다 오버헤드가 낮습니다.
  • 샘플링 구현: 정기적으로 DMV 데이터의 스냅샷을 캡처하고 나중에 분석할 수 있도록 결과를 테이블에 저장하는 SQL 에이전트 작업을 예약합니다.
  • 보조 복제본 모니터링: In 상시 가동 가능 그룹기본 서버가 아닌 읽기 가능한 보조 서버에서 활동 모니터를 실행하십시오.

8.4 부정확하거나 누락된 정보

때로는 활동 모니터에 잘못된 정보나 불완전한 정보가 표시될 수 있습니다.

8.4.1 DMV를 통한 데이터 확인

활동 모니터 결과가 의심스러운 경우, 기본 DMV에 직접 쿼리하여 확인해 보세요. 예를 들어, 프로세스 창에 차단이 표시되지 않지만 사용자가 이를 보고하는 경우, 다음과 같이 쿼리합니다.

SELECT 
    blocking_session_id,
    session_id,
    wait_type,
    wait_time,
    wait_resource
FROM sys.dm_exec_requests
WHERE blocking_session_id != 0;

이 쿼리에서 활동 모니터가 놓친 차단이 표시되면 디스플레이 문제가 확인된 것입니다.

8.4.2 데이터 새로 고침 타이밍 이해

활동 모니터는 스냅샷을 표시합니다. 새로 고침 간격 사이에 실행된 쿼리는 실행 계획이 캐시에 남아 있지 않으면 최근 비용이 많이 드는 쿼리에 표시되지 않습니다.

마찬가지로, 리소스 대기 창의 대기 통계는 마지막 스냅샷 이후 누적된 대기 통계를 반영합니다. 빠르게 변화하는 워크로드는 새로 고침할 때마다 다른 패턴을 보일 수 있습니다.

9. 고급 활동 모니터 기술

Experienced database administrators use Activity Monitor in sophisticated ways to extract maximum diagnostic value.

9.1 근본 원인 분석을 위한 여러 창 결합

활동 모니터의 진정한 힘은 여러 창에 걸쳐 정보를 상호 연관시켜 복잡한 성능 문제를 이해할 때 드러납니다.

9.1.1 대기와 프로세스의 상관 관계

리소스 대기 창에 범주별로 긴 대기 시간이 표시되는 경우 프로세스 창을 사용하여 해당 대기가 발생하는 세션을 식별합니다.

  1. 누적 대기 시간이 긴 대기 범주(예: "잠금")에 주목하세요.
  2. 프로세스 창으로 전환합니다.
  3. 정렬 기준 대기 유형 현재 대기 시간을 기준으로 세션을 그룹화합니다.
  4. 문제가 있는 카테고리에서 대기 유형을 보여주는 세션을 찾으세요.
  5. 해당 세션의 경우 다음을 검사하세요. 대기 리소스 어떤 데이터베이스 객체가 관련되어 있는지 확인하려면 열을 클릭하세요.
  6. 마우스 오른쪽 버튼으로 클릭하고 선택하십시오. 세부 정보 쿼리 텍스트를 보려면.

이러한 상관관계는 "잠금 대기가 있습니다"에서 "이 특정 쿼리가 이 테이블의 잠금을 기다리고 있습니다"로 전환하는 데 도움이 됩니다.

9.1.2 비용이 많이 드는 쿼리를 I/O 문제에 연결

데이터 파일 I/O 창에 특정 데이터베이스에서 높은 디스크 활동이 표시되는 경우:

  1. 어느 데이터베이스 파일의 읽기 또는 쓰기 속도가 MB/초로 높은지 확인하세요.
  2. 최근 비용이 많이 드는 쿼리로 전환합니다.
  3. 정렬 기준 물리적 읽기/초 디스크에서 많은 양의 데이터를 읽는 쿼리를 식별합니다.
  4. 높은 I/O로 데이터베이스에 실행되는 쿼리를 필터링하거나 시각적으로 식별합니다.
  5. 과도한 I/O를 유발하는 테이블 스캔이나 누락된 인덱스가 있는지 해당 쿼리의 실행 계획을 조사합니다.

이 다중 창 분석은 증상(높은 디스크 I/O)과 원인(특정 비효율적인 쿼리)을 연결합니다.

9.2 용량 계획을 위한 활동 모니터 사용

Activity Monitor는 과거 데이터를 저장하지 않지만, 용량 계획 관찰을 위해 전략적으로 활용할 수 있습니다.

9.2.1 최대 사용 패턴 식별

하루 중 다양한 시간대에 서버 활동을 모니터링하여 사용 패턴을 파악합니다.

  1. 알려진 최대 영업 시간 동안 활동 모니터를 엽니다.
  2. % 프로세서 시간 그래프의 최고값을 확인하세요.
  3. 최대 대기 작업 수를 기록합니다.
  4. 최대 시간대에 초당 배치 요청을 관찰합니다.
  5. 프로세스 창에서 가장 바쁜 데이터베이스를 문서화합니다.
  6. 비교를 위해 비수요시간대에 반복합니다.

최대 사용 시간 프로세서 시간이 지속적으로 80%를 초과하면 CPU 용량 한계에 도달한 것입니다. 마찬가지로, 대기 횟수가 증가하는 것은 리소스 경합이 심화되고 있음을 나타냅니다.

9.2.2 자원 추세 분석

활동 모니터는 현재 상태를 보여주는 동시에 시간 경과에 따른 주요 지표를 기록하여 추세를 즉석에서 확인하는 데 사용할 수 있습니다.

  • 매일 같은 시간에 개요 창의 스크린샷을 찍으세요.
  • 각 그래프에서 피크 값을 기록합니다.
  • 주간별 비교를 통해 성장 추세 파악
  • 평균 프로세서 시간 또는 I/O 속도가 점진적으로 증가하는지 살펴보세요.

이 매뉴얼 트렌드는 보다 정교한 모니터링 솔루션을 보완하고 용량 확장을 정당화하는 데 도움이 됩니다.

9.3 성능 기준 문서화

기준 성과 지표를 확립하면 성과가 저하되는 시점을 파악하는 데 도움이 됩니다.

9.3.1 기준 메트릭 캡처

성능이 양호한 것으로 알려진 기간 동안 활동 모니터 지표를 문서화합니다.

  1. 일반적인 업무 운영 시간(성수기나 비수기 제외)에 활동 모니터를 엽니다.
  2. 기록 개요 창 값:
    • 일반적인 % 프로세서 시간 범위
    • 평균 대기 작업 수
    • 일반 데이터베이스 I/O 속도
    • 일반적인 배치 요청/초
  3. Note Resource Waits pane categories that show the most wait time.
  4. 일반적으로 프로세스 창에 활성 프로세스의 수를 기록합니다.
  5. 최근 비용이 많이 드는 쿼리에서 대표적인 쿼리 실행 지표를 기록합니다.

성능 문제를 조사할 때 나중에 참조할 수 있도록 이 기준 문서를 저장하세요.

9.3.2 현재 성능과 기준 성능 비교

성능 문제가 발생하면 현재 활동 모니터 판독값을 문서화된 기준선과 비교하세요.

  • 프로세서 시간이 기준선보다 상당히 높습니까? CPU 사용량이 많은 쿼리에 집중하세요.
  • 대기 중인 작업이 기준 수준의 2~3배인가요? 리소스 대기를 조사하세요.
  • I/O가 상당히 높습니까? 데이터 파일 I/O 창과 비용이 많이 드는 쿼리를 확인하세요.
  • 최대 사용량 시간대에 배치 요청이 기준치보다 적습니까? 차단 또는 연결 문제를 살펴보세요.

이러한 비교는 변경 사항을 파악하고 문제 해결 노력에 적절히 집중하는 데 도움이 됩니다.

9.4 사용자 정의 모니터링 워크플로 생성

일반적인 조사 시나리오에 대한 체계적인 워크플로를 개발하여 철저하고 반복 가능한 분석을 보장합니다.

9.4.1 단계별 조사 프로세스

사용자가 성능 문제를 보고하면 일관된 워크플로를 따르세요.

  1. 간단한 건강 검진: 활동 모니터를 열고 개요 창 그래프를 검사하여 명확한 이상 징후를 확인합니다.
  2. 차단 여부를 확인하세요. 프로세스 창을 확장하고 차단된 항목 열에서 비어 있지 않은 항목을 필터링합니다.
  3. 리소스 경합을 식별하세요. 대기 시간별로 정렬된 리소스 대기 창을 검토합니다.
  4. 비싼 쿼리 찾기: CPU, 실행, 읽기 순으로 정렬된 최근의 비싼 쿼리를 살펴봅니다.
  5. I/O 패턴 상관 관계: 데이터 파일 I/O 창 활동과 비용이 많이 드는 쿼리를 교차 참조합니다.
  6. 문서 결과: 스크린샷을 찍고 관련 세션 ID, 대기 유형, 쿼리 세부 정보를 기록합니다.
  7. 심해 잠수: 식별된 문제에 대한 자세한 조사를 위해 Profiler 추적, 실행 계획 분석 및 DMV 쿼리를 사용합니다.

9.4.2 에스컬레이션 기준

문제를 확대할지 아니면 조사를 계속할지에 대한 기준을 설정합니다.

  • 즉시 에스컬레이션하세요: 5분 이상 지속되는 블로킹 체인, 2분 이상 100% 프로세서 시간, 중요 시스템 프로세스가 일시 중단 상태를 보이고 있습니다.
  • 분석을 통해 확대: CPU를 50% 이상 소모하는 비용이 많이 드는 쿼리가 반복적으로 발생하고, I/O 응답 시간이 50ms 이상 일관되게 높으며, 메모리 부여가 반복적으로 실패합니다.
  • 더 자세히 조사해보세요: Temporary waits resolving within minutes, queries with suboptimal plans but acceptable performance, minor blocking <30 seconds duration.

10. 다양한 활동 모니터 SQL Server 버전

활동 모니터는 다음과 같이 발전했습니다. SQL Server 각 릴리스에는 향상된 기능과 새로운 문제점이 추가되었습니다.

10.1 활동 모니터 SQL Server 2008 이상

SQL Server 2008년에는 오늘날까지 크게 변하지 않은 현대적인 활동 모니터 디자인이 도입되었습니다.

10.1.1 새로운 기능 도입 SQL Server 2008

The SQL Server 2008년 활동 모니터 재설계로 상당한 개선이 이루어졌습니다.

  • 개요 창에 실시간 차트가 있는 그래픽 대시보드
  • 기존의 그리드 전용 보기를 대체하는 확장/축소 가능한 창 인터페이스
  • 집계된 쿼리 성능 데이터를 보여주는 최근 비싼 쿼리 창
  • 파일별 디스크 활동 모니터링을 위한 데이터 파일 I/O 창
  • 대기 분류를 통한 향상된 리소스 대기 창
  • 세션 종료 및 Profiler 실행과 같은 프로세스 작업을 위한 마우스 오른쪽 버튼 클릭 컨텍스트 메뉴
  • 1초에서 1시간까지 구성 가능한 새로 고침 간격

이러한 변화로 인해 Activity Monitor는 단순한 프로세스 목록에서 포괄적인 모니터링 대시보드로 바뀌었습니다.

10.1.2 변경 사항 SQL Server 2005

SQL Server 2005년의 활동 모니터는 훨씬 더 제한적이었습니다.

  • 도구 모음이 아닌 개체 탐색기의 관리 폴더를 통해 액세스됨
  • 기본 정보가 포함된 프로세스 목록을 보여주는 단일 그리드
  • 그래픽 차트나 여러 개의 창이 없습니다.
  • 비용이 많이 드는 쿼리나 I/O 모니터링이 없습니다.
  • 제한된 대기 통계 정보

2008년의 재설계는 점진적인 개선이라기보다는 전면적인 재구상을 의미했습니다.

10.2 활동 모니터 SQL Server 2014/2016

SQL Server 2014년과 2016년에는 활동 모니터의 기본 데이터 수집 기능이 점진적으로 개선되었지만 시각적인 변화는 거의 없었습니다.

10.2.1 개선 및 향상

이 버전의 주요 개선 사항은 다음과 같습니다.

  • 수천 개의 캐시된 계획이 있는 서버를 모니터링할 때 더 나은 성능
  • 프로세스 창에서 향상된 필터링 기능
  • 대기 통계 집계의 정확도 향상
  • 대규모 결과 집합을 사용한 열 정렬 및 필터링의 더 나은 처리
  • 모니터링 오버헤드를 줄이는 보다 효율적인 DMV 쿼리

핵심 인터페이스는 일관성을 유지했습니다. SQL Server 2008년부터 관리자에게 친숙함을 유지해 왔습니다.

10.3 활동 모니터 SQL Server 2019/2022

최근 SQL Server 다양한 버전이 성능과 안정성에 초점을 맞춰 Activity Monitor의 진화를 이어갑니다.

10.3.1 최신 기능 및 성능

SQL Server 2019년과 2022년 활동 모니터에는 다음이 포함됩니다.

  • 이 버전에서 도입된 새로운 대기 유형에 대한 지원
  • WPF 기술을 사용하여 SSMS에서 렌더링 성능 향상
  • 많은 수의 활성 세션을 보다 효과적으로 처리
  • 클라우드 SQL 플랫폼과의 향상된 호환성
  • 더욱 정확한 CPU 및 I/O 메트릭

10.3.2 최신 버전의 알려진 문제

SQL Server 2019년에는 여러 가지 활동 모니터 버그가 발생했습니다.

  • 영구 일시 중지 상태: 활동 모니터가 자주 일시 중지 상태로 전환되고 재개되지 않는 문제가 발생하며, 특히 SSMS 18.0~18.3에서 그렇습니다. 이 문제는 이후 SSMS 버전에서 수정되었습니다.
  • 원격 연결 실패: 일부 구성에서는 원격 인스턴스에서 활동 모니터가 열리지 않습니다. 해결 방법으로는 특정 추적 플래그를 활성화하거나 최신 SSMS 빌드를 사용하는 것이 있습니다.
  • 권한 문제: 새로운 시스템 보기에는 명확하게 문서화되지 않은 추가 권한이 필요하므로 VIEW SERVER STATE에서도 빈 화면이 표시됩니다.

SSMS 작업 시에는 항상 최신 버전을 사용하세요. SQL Server 이런 문제를 피하기 위해 2019년과 2022년에 시행했습니다.

11. 실제 사용 사례 및 예

실제 사례는 일반적인 문제 해결 시나리오에서 활동 모니터를 효과적으로 적용하는 방법을 보여줍니다.

11.1 사례 연구: 느린 웹 애플리케이션 진단

개발팀은 웹 애플리케이션이 너무 느려져서 페이지 로드에 평소 2~3초가 걸리는데 20~30초가 걸린다고 보고했습니다.

11.1.1 개요 창을 사용한 초기 조사

활동 모니터를 열고 개요 창을 살펴보세요.

  1. % 프로세서 시간 그래프는 일반적인 30-40% 기준보다 상당히 높은 85-95%의 CPU 사용률을 보여줍니다.
  2. 대기 작업은 일반적으로 0~3개의 작업으로 구성되어 있는데 반해, 10~20개의 작업으로 변동합니다.
  3. 데이터베이스 I/O는 약 50MB/s로 중간 정도의 활동을 보입니다.
  4. 일괄 요청/초는 예상보다 낮은 100/초이며, 일반적으로 업무 시간 중 300-400/초입니다.

이 패턴은 리소스 경합으로 인한 CPU 병목 현상으로 인해 처리량이 감소함을 나타냅니다. 서버는 열심히 작업하고 있지만 많은 요청을 처리하지 못하고 있습니다.

11.1.2 문제가 있는 쿼리 식별

최근 비용이 많이 드는 쿼리 창을 확장하고 실행/분별로 정렬합니다.

  1. 상위 쿼리는 분당 15,000건의 실행을 보여줍니다.
  2. 마우스 오른쪽 버튼으로 클릭하고 선택하십시오. 쿼리 텍스트 편집 쿼리를 검토합니다.
  3. 쿼리는 단일 사용자 레코드를 검색하는 간단한 SELECT 문입니다. SELECT * FROM Users WHERE UserId = @UserId.
  4. 이 쿼리는 일반적인 애플리케이션 사용의 경우 분당 15,000번 실행되어서는 안 됩니다.

쿼리를 마우스 오른쪽 버튼으로 클릭하고 선택하세요 실행 계획 표시이 계획은 UserId 열에 인덱스가 없다는 경고와 함께 Users 테이블에 대한 테이블 스캔을 보여줍니다.

프로세스 창을 애플리케이션별로 필터링하여 웹 애플리케이션의 연결만 표시합니다. 여러 세션에서 동일한 쿼리가 반복적으로 실행되는 것을 확인할 수 있습니다.

11.1.3 해결 및 검증

이 문제는 과도한 쿼리 실행과 인덱스 누락이라는 두 가지 문제에서 비롯됩니다. 해결 단계는 다음과 같습니다.

  1. 누락된 인덱스를 만듭니다.
    CREATE NONCLUSTERED INDEX IX_Users_UserId 
    ON Users (UserId);
    
  2. 개발팀에 문의하세요 과도한 실행에 대한 내용입니다. 조사 결과, 애플리케이션 코드에서 N+1 쿼리 문제가 발견되었습니다. 이 문제는 루프를 통해 목록의 각 항목에 대한 사용자 정보를 검색하는 방식입니다.
  3. 응용 프로그램을 수정하세요 IN 절이나 테이블 반환 매개변수를 사용하여 사용자 조회를 단일 쿼리로 일괄 처리합니다.
  4. 수정 사항을 확인하세요 배포 후 활동 모니터를 모니터링하면 CPU 사용량이 35~40%로 떨어지고, 분당 실행 횟수가 200~300회로 줄어들며, 애플리케이션 응답 시간이 정상으로 돌아옵니다.

11.2 사례 연구: 차단 문제 해결

사용자들은 주문 입력 시스템이 정상 작동을 재개하기 전에 주기적으로 30~60초 동안 정지된다고 보고합니다.

11.2.1 블로킹 체인 감지

이러한 정지 이벤트 중 하나가 발생하는 동안 활동 모니터를 열고 프로세스 창을 확장합니다.

  1. 정렬 기준 세션 ID 모든 세션을 구성해 보세요.
  2. 여러 세션에서 값이 표시됩니다. 차단됨 모든 열은 세션 ID 73을 가리킵니다.
  3. 세션 73에서는 '1'이 표시됩니다. 헤드 블로커 기둥을 세워 이것이 근본 원인임을 확인했습니다.
  4. The 대기 유형 차단된 세션의 경우 LCK_M_X가 표시되어 독점 잠금을 기다리고 있음을 나타냅니다.
  5. The 대기 리소스 열은 차단이 주문 테이블에서 이루어졌음을 나타냅니다.

11.2.2 원인 분석

세션 73을 마우스 오른쪽 버튼으로 클릭하고 선택하세요 세부 정보 명령을 보려면:

UPDATE Orders 
SET Status = 'Processing', 
    LastModified = GETDATE()
WHERE OrderId IN (SELECT OrderId FROM #TempOrders);

이 업데이트는 매시간 실행되는 일괄 처리 작업의 일부입니다. 로그인 열은 세션이 일괄 처리 서비스 계정에 속함을 확인합니다.

쿼리는 수천 개의 주문을 처리하는 동안 Orders 테이블에 대한 잠금을 유지하고 있습니다. 기다리는 시간 차단된 세션이 꾸준히 증가함에 따라 이 장기간의 작업이 문제라는 것이 확인되었습니다.

11.2.3 수정 사항 구현

단기 해결책:

  1. 쿼리 텍스트와 기간을 포함한 세션 73의 세부 정보를 문서화합니다.
  2. 합법적인 일괄 처리이므로 업데이트가 자연스럽게 완료되도록 하세요.
  3. 완료 후 차단된 세션이 지워지고 정상적인 작업이 재개되는지 확인하세요.

장기적 솔루션 구현:

  1. 일괄 작업 일정 변경 업무 시간 대신 비수요 시간(오전 2~4시)에 운영합니다.
  2. 일괄 처리 수정 한 번에 100개 레코드씩 작은 배치로 주문을 업데이트하고 배치 간 잠금을 해제합니다.
  3. 인덱스 추가 OrderId 열에 업데이트 작업을 빠르게 진행하세요.
  4. SNAPSHOT 격리를 고려하세요 읽기 작업을 위해 차단 영향을 줄입니다.

11.3 사례 연구: 과도한 쿼리 실행 식별

데이터베이스 모니터링 결과, CPU 사용량은 지난달 동안 점차 증가했지만 애플리케이션 코드에는 눈에 띄는 변화가 없었습니다.

11.3.1 비정상 실행 횟수 발견

활동 모니터를 열고 최근 비용이 많이 드는 쿼리 창을 살펴보세요.

  1. 정렬 기준 실행/분 to see the most frequently executed queries.
  2. 가장 많은 쿼리는 분당 37,000건의 실행을 보여주는데, 이는 다른 모든 쿼리보다 훨씬 높은 수치입니다.
  3. 마우스 오른쪽 버튼으로 클릭하고 선택하십시오. 쿼리 텍스트 편집.
  4. 이 쿼리는 제품 카테고리 정보를 검색합니다.
    SELECT CategoryId, CategoryName 
    FROM ProductCategories 
    WHERE CategoryId = @CategoryId;
    
  5. 이 간단한 쿼리는 빠르고 캐시 가능해야 하지만, 분당 수만 번이나 실행됩니다.

11.3.2 애플리케이션 코드 추적

프로세스 창에서 이 쿼리를 실행하는 세션을 찾으세요.

  1. 참고 사항 어플리케이션 열에 "ProductCatalogService"가 표시됩니다.
  2. 이 세션 중 하나를 마우스 오른쪽 버튼으로 클릭하고 선택하세요. 추적 프로세스 SQL Server 프로파일.
  3. SQL Profiler는 쿼리가 다양한 CategoryId 값을 사용하여 빠르게 연속해서 반복해서 실행된다는 것을 보여줍니다.
  4. 코드 검토를 위해 ProductCatalogService를 관리하는 개발팀에 문의하세요.

코드 검토 결과, 문제가 드러났습니다. 최근 변경 사항으로 인해 카테고리가 있는 제품 목록이 검색됩니다. 결과 집합의 각 제품(대개 1,000개 이상)에 대해 코드는 별도의 데이터베이스 호출을 수행하여 카테고리 정보를 가져옵니다. 이는 전형적인 N+1 쿼리 문제입니다.

11.3.3 애플리케이션 최적화

적절한 수정을 구현하세요:

  1. 애플리케이션 쿼리 수정 단일 데이터베이스에서 제품과 해당 카테고리를 검색하는 JOIN을 사용하려면 다음을 호출합니다.
    SELECT p.ProductId, p.ProductName, c.CategoryId, c.CategoryName
    FROM Products p
    INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
    WHERE p.Active = 1;
    
  2. 업데이트된 코드 배포 그리고 활동 모니터를 모니터링합니다.
  3. 수정 사항을 확인하세요: 카테고리 쿼리에 대한 분당 실행 횟수가 37,000회에서 100회 미만으로 줄어들었고, 전체 CPU 사용량은 40% 감소했습니다.
  4. 배운 교훈을 문서화하세요 향후 코드 변경 시 유사한 문제가 발생하지 않도록 개발팀과 공유합니다.

12. 잠재적인 데이터베이스 손상 감지

활동 모니터는 데이터베이스 손상을 감지하도록 특별히 설계된 것은 아니지만, 표시되는 특정 패턴은 추가 조사가 필요한 잠재적 손상 문제를 시사할 수 있습니다.

12.1 잠재적인 데이터베이스 손상의 증상

데이터베이스가 손상되어 액세스 중인 경우 다음과 같은 문제가 가끔 발생할 수 있습니다.

1. 프로세스 창에서:

  • 비정상적인 대기 유형으로 인해 세션이 SUSPENDED 상태에 갇힘
  • 오류 상태를 보여주는 프로세스
  • 반복적으로 실패하는 쿼리

2. 리소스 대기 창에서:

  • 디스크 문제를 나타낼 수 있는 비정상적인 I/O 관련 대기 유형(이는 논리적 손상보다는 하드웨어 문제를 나타낼 가능성이 더 높음)

3. 최근 비싼 쿼리:

  • 손상된 페이지를 반복적으로 읽으려고 시도하는 경우 비정상적으로 높은 물리적 읽기가 발생하는 쿼리

12.2 DBCC CHECKDB로 추가 확인

활동 모니터에 잠재적 손상을 시사하는 증상이 표시되면 즉시 DBCC CHECKDB를 실행하여 데이터베이스 무결성을 확인해야 합니다. 이 명령은 모든 데이터베이스 페이지를 검사하고, 체크섬을 검증하고, 논리적 일관성 오류를 검사합니다.

DBCC CHECKDB를 사용하여 데이터베이스 손상을 확인하고 수정하는 방법에 대해 자세히 알아보려면 다음을 참조하세요. 포괄적인 DBCC CHECKDB 가이드.

12.3 전문 도구를 사용한 수리

DBCC CHECKDB에서 데이터베이스 손상을 확인한 경우 복구를 위한 몇 가지 옵션이 있습니다.

13. 결론

SQL Server Activity Monitor는 데이터베이스 관리자에게 매우 귀중한 도구로, 서버 성능에 대한 즉각적인 통찰력을 제공하고 문제를 빠르고 효과적으로 진단하는 데 도움이 됩니다.

13.1 요점 요약

이 가이드에서는 활동 모니터가 어떻게 이해하고 문제를 해결하는 데 도움이 되는지 살펴보았습니다. SQL Server 공연:

  • 활동 모니터는 체계적이고 그래픽적인 인터페이스를 통해 프로세스, 대기, 쿼리 및 I/O에 대한 실시간 가시성을 제공합니다.
  • 개요, 프로세스, 리소스 대기, 데이터 파일 I/O, 최근 비용이 많이 드는 쿼리의 5개 창은 각각 서버 활동에 대한 고유한 관점을 제공합니다.
  • 과도한 쿼리 실행, 블로킹 체인, 높은 CPU 사용률과 같은 일반적인 문제 해결 시나리오는 체계적인 활동 모니터 조사를 통해 관리 가능해집니다.
  • While powerful, Activity Monitor has limitations including lack of historical data, wait type grouping, and monitoring overhead that affect its applicability.
  • DMV 쿼리, sp_WhoIsActive, 확장 이벤트 및 잠재적으로 타사 도구를 사용하여 활동 모니터를 보완하면 포괄적인 모니터링 전략이 만들어집니다.
  • 새로 고침 간격에 대한 모범 사례를 따르고, 사용하지 않을 때는 활동 모니터를 닫고, 상관 관계를 위해 여러 창을 결합하면 영향을 최소화하면서 가치를 극대화할 수 있습니다.

13.2 툴킷의 일부로서의 활동 모니터

활동 모니터는 성능 조사를 위한 유일한 도구가 아니라, 첫 번째 대응 도구로 활용해야 합니다. 활동 모니터의 장점은 능동적인 문제 해결 과정에서 즉각적인 가시성을 제공하여 데이터베이스의 병목 현상을 신속하게 파악하고 심층적인 조사가 필요한 부분을 파악하는 데 도움이 된다는 것입니다.

활동 모니터는 자동차의 대시보드와 비슷하다고 생각하면 됩니다. 문제가 발생하면 즉시 알려주고 전반적인 문제 영역을 파악하는 데 도움을 줍니다. 자동차 대시보드가 ​​엔진 경고등이 켜진 정확한 이유를 알려주지 않는 것처럼, 활동 모니터는 문제의 근본 원인을 항상 보여주지는 않고 문제를 지적합니다. 이러한 심층적인 분석을 위해서는 추가적인 도구와 전문 지식이 필요합니다.

실행 계획 분석, 대기 통계 추적, 과거 모니터링 솔루션, 그리고 성능 모범 사례를 포함하는 광범위한 툴킷에 Activity Monitor를 통합하세요. 적절한 인덱싱 전략, 쿼리 최적화 기법, 그리고 용량 계획과 함께 활용하세요.

13.3 학습 여정 계속하기

활동 모니터를 완벽하게 익히는 것은 유능한 데이터베이스 관리자가 되기 위한 첫 단계일 뿐입니다. 다음을 통해 계속해서 기술을 향상시키세요.

  • 실행 계획을 해석하고 비효율적인 작업을 식별하는 방법 학습
  • 이해 SQL Server 대기 통계와 그 의미
  • 지수 설계 및 최적화 기법 연구
  • 탐색 SQL Server아키텍처와 쿼리 처리 방법
  • 체계적인 문제 해결 방법론 연습
  • 자세한 추적을 위한 확장 이벤트 경험 구축
  • 트랜잭션 격리 수준과 성능 영향 이해

Activity Monitor를 사용한 각 성과 조사는 다음과 같은 새로운 내용을 알려줍니다. SQL Server works and how applications interact with databases. Document your findings, share knowledge with colleagues, and build a library of solutions for common problems.

13.4 추가 리소스

다음과 같은 귀중한 자료를 통해 지식을 넓혀보세요.

14. 자주 묻는 질문(FAQ)

Q : 무엇입니까 SQL Server 활동 모니터?

A: SQL Server 활동 모니터는 내장 도구입니다. SQL Server 프로세스에 대한 실시간 정보를 표시하는 Management Studio SQL Server 인스턴스와 서버 리소스에 미치는 영향. 프로세서 사용량, 대기 작업, I/O 속도, 활성 세션, 고비용 쿼리 등 서버 활동의 다양한 측면을 보여주는 5개 창으로 구성된 그래픽 대시보드를 제공합니다.

질문: SSMS에서 활동 모니터를 열려면 어떻게 해야 하나요?

A: 활동 모니터는 다음 네 가지 방법을 사용하여 열 수 있습니다. (1) SSMS 도구 모음에서 활동 모니터 아이콘을 클릭합니다. (2) 마우스 오른쪽 버튼을 클릭합니다. SQL Server 개체 탐색기에서 인스턴스 이름을 선택하고 활동 모니터, (3) 누르세요 Ctrl 키 + 다른 + A또는 (4) SSMS를 구성하여 자동으로 실행되도록 합니다. 도구 -> 옵션 -> 환경 -> 시작.

질문: 활동 모니터를 사용하려면 어떤 권한이 필요합니까?

A: 당신에게 필요한 것은 서버 상태 보기 permission to see most Activity Monitor information. For the Data File I/O pane, you also need either 데이터베이스 생성, 모든 데이터베이스 변경모든 정의 보기 권한이 없습니다. 이러한 권한이 없으면 활동 모니터가 열리지만 빈 창이 표시될 수 있습니다.

질문: 활동 모니터가 일시 중지되거나 작동하지 않는 이유는 무엇인가요?

답변: 활동 모니터는 일반적으로 권한 문제, 오래된 SSMS 버전 또는 비활성화된 원격 연결로 인해 일시 중지됩니다. 해결 방법: (1) 최신 SSMS 버전으로 업데이트, (2) VIEW SERVER STATE 권한이 있는지 확인, (3) 원격 연결이 활성화되어 있는지 확인 SQL Server instance, (4) Restart SSMS, and (5) Try connecting with Windows authentication instead of SQL authentication if applicable.

질문: 활동 모니터와 sp_WhoIsActive의 차이점은 무엇인가요?

A: 활동 모니터는 SSMS에 내장된 그래픽 도구로, 다양한 모니터링 측면에 대한 체계적인 창을 제공합니다. sp_WhoIsActive는 커뮤니티에서 무료로 제공하는 저장 프로시저로, 활동 모니터보다 더욱 구체적인 대기 유형, 차단 세부 정보 및 사용자 지정 옵션을 포함하여 단일 결과 집합으로 자세한 세션 정보를 반환합니다. 활동 모니터는 시각적 탐색에 더 적합한 반면, sp_WhoIsActive는 스크립트 기반 모니터링에 탁월하며 더욱 자세한 정보를 제공합니다.

질문: 활동 모니터가 서버 성능에 영향을 미칩니까?

A: 네, 활동 모니터는 새로 고침 간격마다 시스템 DMV를 쿼리하기 때문에 측정 가능한 오버헤드가 발생합니다. 새로 고침 빈도가 낮을수록 그 영향은 커집니다. Microsoft는 새로 고침 간격이 10초 미만이면 서버 성능에 영향을 미칠 수 있다고 경고합니다. 활동 모니터를 사용하지 않을 때는 항상 닫고, 부하가 심한 프로덕션 서버에서는 30~60초 간격으로 새로 고침하는 것이 좋습니다.

질문: T-SQL을 사용하여 활동 모니터 데이터를 얻을 수 있나요?

A: 네, 활동 모니터는 sys.dm_exec_requests, sys.dm_exec_sessions, sys.dm_os_wait_stats, sys.dm_exec_query_stats와 같은 시스템 동적 관리 뷰를 쿼리합니다. T-SQL을 사용하여 이러한 DMV를 직접 쿼리하여 프로그래밍 방식으로 동일한 정보를 검색하고, 사용자 지정 모니터링 스크립트 및 자동화된 데이터 수집을 구현할 수 있습니다.

질문: 기본 새로 고침 간격은 무엇입니까?

A: 기본 새로 고침 간격은 10초입니다. 개요 창의 아무 곳이나 마우스 오른쪽 버튼으로 클릭하고 다음을 선택하여 이 간격을 변경할 수 있습니다. 새로 고침 간격미리 정의된 옵션(1초, 5초, 10초, 30초, 1분 또는 1시간) 중에서 선택할 수 있습니다. 간격이 짧을수록 실시간 보기가 더 많지만 모니터링 오버헤드가 증가합니다.

Q: How can I automatically open Activity Monitor on SSMS startup?

A: SSMS 옵션을 통해 자동 시작 구성: 이동 도구 -> 옵션 -> 환경 -> 시작다음 선택 개체 탐색기 및 활동 모니터 열기 인사말 시작시 드롭다운. SSMS에서 서버에 연결할 때마다 활동 모니터가 자동으로 열립니다.

질문: 활동 모니터의 한계는 무엇인가요?

A: 주요 제한 사항은 다음과 같습니다. (1) 과거 데이터 저장 또는 추세 분석 기능 없음, (2) 대기 유형이 구체적으로 표시되지 않고 범주별로 그룹화됨, (3) CXPACKET과 같은 일부 대기 유형이 나타나지 않을 수 있음, (4) 특정 시점 스냅샷에서 일시적인 문제가 누락될 수 있음, (5) 모니터링 오버헤드가 바쁜 서버에 영향을 미칠 수 있음, (6) 사전 모니터링을 위한 알림 메커니즘 없음, (7) 여러 개의 데이터를 집계할 수 없음 SQL Server 인스턴스. 이러한 요구 사항에 맞게 확장 이벤트, 데이터 수집 세트 또는 타사 모니터링 도구를 사용하여 활동 모니터를 보완하세요.


저자에 관하여

위안 셩 10년 이상의 경력을 가진 선임 데이터베이스 관리자(DBA)입니다. SQL Server 환경 및 기업 데이터베이스 관리 분야에서 그는 금융 서비스, 의료, 제조 분야에서 수백 건의 데이터베이스 복구 시나리오를 성공적으로 해결했습니다.

원은 다음을 전문으로 합니다. SQL Server 데이터베이스 복구, 고가용성 솔루션또한 성능 최적화에도 능숙합니다. 그는 수 테라바이트 규모의 데이터베이스 관리, 상시 가동 가용성 그룹 구현, 핵심 비즈니스 시스템을 위한 자동 백업 및 복구 전략 개발 등 폭넓은 실무 경험을 보유하고 있습니다.

Yuan은 기술적 전문성과 실용적인 접근 방식을 통해 데이터베이스 관리자와 IT 전문가가 복잡한 문제를 해결하는 데 도움이 되는 포괄적인 가이드를 만드는 데 중점을 둡니다. SQL Server 효율적으로 도전합니다. 그는 최신 정보를 유지합니다. SQL Server Microsoft의 새로운 릴리스와 진화하는 데이터베이스 기술을 활용하고, 정기적으로 복구 시나리오를 테스트하여 권장 사항이 실제 모범 사례를 반영하는지 확인합니다.

에 대한 질문이 SQL Server 복구가 필요하거나 추가적인 데이터베이스 문제 해결 지침이 필요하신가요? Yuan이 환영합니다. 피드백과 제안 이러한 기술적 자원을 개선하기 위해.

지금 공유 :