본문 바로가기
● Data Insights/SQL

MSSQL 실행계획과 쿼리 통계: 개념, 중요성, 활용 방법 및 내부 로직

by DATA Canvas 2025. 11. 15.
반응형
  • 실행계획(Execution Plan)은 SQL Server가 쿼리를 처리하기 위해 선택한 연산 순서와 방법을 시각적으로 보여준다.
  • 쿼리 통계(Query Statistics)는 실행 중 발생한 실제 리소스 사용량, 처리 시간, I/O 횟수 등을 정량적으로 수집하여 성능을 분석할 수 있게 한다.
  • 이를 통해 개발자와 DBA는 쿼리 병목 지점을 식별하고 적절한 인덱스 최적화, 조정, 힌트 적용 등을 통해 시스템 성능을 극대화할 수 있다.


1. 실행계획(Execution Plan) 개념과 구성 요소

1.1 정의

실행계획은 SQL Server 옵티마이저가 쿼리를 분석해 가장 효율적이라고 판단한 연산 순서와 접근 방법을 설명하는 청사진이다.

  • 쿼리 옵티마이저(Query Optimizer)가 여러 후보 계획을 비용 모델에 따라 평가
  • 비용(cost)이 가장 낮은 계획을 선택해 실행 단계로 넘김

1.2 유형

  • 예상 실행계획(Estimated Execution Plan)
    • 실제 실행 없이 옵티마이저가 예측한 계획을 보여줌
    • 실행 전에 쿼리 구조 분석과 잠재 병목 파악에 활용
  • 실제 실행계획(Actual Execution Plan)
    • 쿼리 수행 후 실제 통계(행 수, 비용 분포 등)를 포함해 리포팅
    • 예상 계획 대비 실제 성능 차이를 분석

1.3 주요 연산자

  • Index Seek/Scan: 인덱스를 통해 특정 행을 조회(Seek)하거나 전체 스캔(Scan)
  • Nested Loops / Hash / Merge Join: 테이블 간 조인 방식
  • Sort / Aggregate: 정렬과 그룹화 연산
  • Compute Scalar: 계산식 평가
  • Parallelism: 병렬 처리 단위

각 연산자 위·아래로 데이터 흐름과 각 단계의 예상 비용이 계층 구조로 표현된다.

반응형

2. 쿼리 통계(Query Statistics) 개념과 항목

2.1 정의

쿼리 통계는 실행 계획뿐 아니라 실제 수행 시점의 정량적 정보를 수집해 성능 분석 자료로 제공한다.

2.2 주요 통계 항목

  • Elapsed Time: 총 수행 시간
  • CPU Time: CPU 사용 시간
  • Logical Reads/Writes: 버퍼에서 읽고 쓴 페이지 수
  • Physical Reads: 디스크 I/O 발생 건수
  • Rows Returned/Processed: 반환 혹은 처리된 행 수
  • Compile Time: 컴파일(옵티마이저 평가) 소요 시간

3. 사용자·개발자가 필요한 이유와 중요성

  1. 병목 지점 파악
    • 실행계획을 통해 비용이 큰 연산자(예: 전체 테이블 스캔, 정렬) 확인
    • 통계를 통해 I/O 과다, CPU 과점유 확인
  2. 인덱스 최적화
    • 인덱스가 제대로 활용되지 않거나 과다 사용되는 부분 발견
    • 적절한 인덱스 추가/수정으로 성능 대폭 향상
  3. 쿼리 조정 및 힌트 적용
    • Join 순서 변경, 힌트(Query Hint)로 옵티마이저에 직접 지시
    • 병렬 처리 옵션 조정
  4. 리소스 계획 수립
    • 피크 시간대 예상 부하 대비
    • 용량 계획, 스케일업·아웃 전략 수립

4. 사용 방법

4.1 SQL Server Management Studio(SSMS) 활용

  • 실행계획 보기
    • 툴바의 ‘실행 계획 포함(Include Actual Execution Plan)’ 버튼 클릭
    • 쿼리 실행 후 하단 탭에서 그래픽 계획 확인
  • 통계 수집
    • SET STATISTICS IO ON; : 논리/물리 읽기 정보 출력
    • SET STATISTICS TIME ON; : CPU·실행 시간 정보 출력

4.2 DMV(동적 관리 뷰) 활용

  • sys.dm_exec_query_stats
    • 최근 실행된 쿼리 통계 집합 제공
  • sys.dm_exec_query_plan(plan_handle)
    • 관련 실행계획 XML 반환
  • 예시:
    SELECT 
      qs.execution_count,
      qs.total_logical_reads,
      qs.total_worker_time,
      qp.query_plan
    FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
    ORDER BY qs.total_worker_time DESC;

5. 내부 로직(옵티마이저와 통계 수집 과정)

  1. 파싱 및 유효성 검사: SQL 텍스트 구문 분석, 객체 유무 확인
  2. 논리적 최적화: 조인 순서, 필터 순서 재배치처럼 의미상 동일하지만 효율적인 구조 변환
  3. 물리적 최적화: 가능한 접근 방법(인덱스 사용, 조인 알고리즘 등) 후보 생성
  4. 비용 평가(Cost Estimation): 내부 통계(테이블·인덱스 분포 통계) 기반으로 각 후보 비용 계산
  5. 계획 선택 및 캐싱: 최저 비용 계획 선택, 계획 캐시에 저장
  6. 실행 및 통계 기록: 실행 중 실제 리소스 사용량 수집, 캐시된 계획과 비교 분석

MSSQL에서 실행계획쿼리 통계 분석은 쿼리 성능 문제를 정확히 진단하고 최적화 방안을 마련하기 위한 핵심 도구다. 이를 적극 활용해 병목을 제거하고, 효율적인 인덱스 설계·쿼리 작성을 통해 데이터베이스 성능을 극대화할 수 있다.

반응형