SQL 분석 도구
실행 계획을 읽을 때 봐야 할 접근 방식, 조인 방식, 예상 비용, 실제 처리량의 의미를 정리합니다.
출제 빈도 ★★★☆☆ 관련 문제 2개 |
실행 계획CostCardinality 분석 도구의 목적
SQL 분석 도구는 “이 SQL이 왜 느린가”를 추측이 아니라 근거로 확인하게 해줍니다. 핵심 자료는 실행 계획과 실제 실행 통계입니다.
실행 계획은 DBMS가 선택한 접근 경로를 보여줍니다. 다만 예상 정보만으로는 부족할 수 있으므로 실제 실행 후의 처리 건수와 읽은 블록 수를 함께 보는 습관이 필요합니다.
실행 계획에서 먼저 볼 것
| 항목 | 질문 |
|---|---|
| 접근 방식 | 테이블을 전체 스캔하는가, 인덱스를 사용하는가 |
| 조인 순서 | 어느 테이블을 먼저 읽는가 |
| 조인 방식 | NL, Hash, Sort Merge 중 무엇인가 |
| 예상 건수 | 옵티마이저가 몇 행으로 예상했는가 |
| 정렬 여부 | 불필요한 SORT, ORDER BY, GROUP BY 비용이 있는가 |
예상과 실제가 다르면 주의가 필요하다
옵티마이저는 통계 정보를 바탕으로 예상합니다. 예상 행 수가 실제와 크게 다르면 잘못된 실행 계획을 고를 수 있습니다.
예를 들어 옵티마이저가 어떤 조건 결과를 10행으로 예상했는데 실제는 100만 행이라면, 인덱스 반복 접근이나 NL 조인을 골라 크게 느려질 수 있습니다.
대표 확인 방법
도구 이름과 문법은 DBMS마다 다르지만 목적은 비슷합니다.
| 분석 대상 | 확인 내용 |
|---|---|
| 실행 계획 | 선택된 접근 경로와 조인 방식 |
| 실제 실행 통계 | 실제 행 수, 블록 읽기, 메모리·디스크 사용 |
| 대기 이벤트 | CPU가 아닌 잠금, I/O, 네트워크 대기 여부 |
| SQL 수행 이력 | 자주 실행되고 총 비용이 큰 SQL |
실행 계획을 읽는 순서
- 가장 많이 읽는 테이블이 무엇인지 봅니다.
- 조건절이 인덱스를 사용할 수 있는 형태인지 확인합니다.
- 조인 순서가 작은 결과부터 시작하는지 봅니다.
- 예상 행 수와 실제 행 수 차이를 확인합니다.
- 정렬, 해시, 임시 공간 사용이 과도한지 확인합니다.
흔한 오해
비용 숫자가 낮다고 항상 빠른 SQL은 아닙니다. 비용은 옵티마이저의 예상치입니다. 통계가 부정확하거나 조건 값의 분포가 치우쳐 있으면 예상이 틀릴 수 있습니다.
또한 인덱스를 사용한다고 항상 좋은 것도 아닙니다. 결과가 테이블 대부분이면 인덱스를 타고 많은 행을 반복 접근하는 것보다 전체 스캔이 더 빠를 수 있습니다.
한 문장 요약
실행 계획은 선택된 길이고, 실제 실행 통계는 그 길이 정말 빨랐는지 보여주는 증거입니다.