실행계획
실행 계획 종류
- 예상 실행 계획
- 쿼리 컴파일만 수행
- 실행에 포함되는 정보들은 안나옴(EX. 쿼리 실행 후 CPU 점유율, 실행시간 등)
- 실제 실행 계획
- (예상 실행 계획 + 실행 정보)
- 비교
- 예상 실행 계획에서 볼 수 있는 내용
- FASTFIRSTROW, (FAST n), 힌트, SET문
- 실행 계획에서 볼 수 있는 내용
- 활성 쿼리 통계
- 쿼리 실행을 직접 모니터하여 진행과정을 보는 것
실행게획 출력 요소
( 괄호 밖 : 물리적 연산자
물리적 구현 알고리즘
Clustered Index Seek
Nested Loop Join
Stream Aggregate, etc
( 괄호 안 : 논리적 연산자
관계형 대수 연산
쿼리 자체에 포함된 구문과 연관
Inner Join
Aggregate, etc
2012SP3/2014SP2+ 읽은 행 수 새롭게 추가
예상 행수와 실제 행수 간의 편차가 심한 경우
- 복합 인덱스 튜닝 부족
- 열 통계(Statistics) 관련 문제(매우 오래된 경우나 잘 못 쓴 경우)
- SARG(Search Argument) 위반 등의 SQL 쿼리 자체 문제(ex. 옵티마이저가 행수를 추적하는데 방해되는 요소)
경고 정보
- 유형
- SpillsToTempdb (tempdb사용됨)
- PlanAffectingConvert (실행계획에 영향을 미치는 형 변환 있음)
- ColumnsWithNoStatistics (열에 통계 정보 없음)
- Unmatched Indexs (filtered Index 사용 못함)
- No Join Predicate (조인 조건자 없음)
SET STATISTICS IO { ON /OFF }
- 논리적 읽기 수 가 핵심
- 목적
- 테이블 별 I/O 크기를 평가하는 것이 주 목적
- Worktable, Workfile 발생 여부/ 크기 확인 (옵티마이저의 내부 임시 table )