Notice
Recent Posts
Recent Comments
관리 메뉴

안까먹을라고 쓰는 블로그

[SQL Query] 실행계획 확인방법 본문

DataBase/MS SQL

[SQL Query] 실행계획 확인방법

YawnsDuzin 2021. 12. 30. 17:14

 

반응형

SQL구문의 지연이 발생했을 때 제일 먼저 실행 계획을 살펴봐야 합니다.

모든 DBMS는 실행 계획을 조사하는 수단을 제공합니다.

 

※ 실행계획이 만들어지면 DBMS는 그것을 바탕으로 데이터 접근을 수행합니다. 하지만 데이터양이 많은 테이블에 접근하거나 복잡한 SQL 구문을 실행하면 반응 지연이 발생하는 경우가 꽤 있습니다. 그 이유로는 통계정보가 부족한 경우도 있습니다만, 이미 최적의 경로(방법)가 설정되어 있는데도 느린 경우도 있습니다. 또한 통계 정보가 최신이라도 SQL구문이 너무 복잡하면 옵티마이저가 최적의 접근 경로(방법)를 선택하지 못할 수도 있습니다.

 

■ 실행계획 확인방법

 ■ MSSQL

SET SHOWPLAN_TEXT ON

 ■ ORACLE

set autotrace traceonly

 

■ 간단한 성능체크

 ■ MSSQL

SET STATISTICS IO ON
SET STATISTICS TIME ON 
GO

-- 쿼리
select * from  (
select SourceProdCode1 as ProdCode from vBlendProd
union
select SourceProdCode2 as ProdCode from vBlendProd) TSS
where TSS.ProdCode NOT IN (select ProdCode from vTank)

SET STATISTICS IO OFF
SET STATISTICS TIME OFF

 

■ 통계정보 갱신명령

 ■ MSSQL

UPDATE STATISTICS [테이블 이름]

 ■ ORACLE

exec DBMS_STATS.GATHER_TABLE_STATS([스키마 이름], [테이블 이름])

※ 통계정보

  • 각 테이블의 레코드 수
  • 각 테이블의 필드 수와 필드의 크기
  • 필드의 카디널리티(값의 개수)
  • 필드의 히스토그램(어떤 값이 얼마나 분포되어 있는가)
  • 필드 내부에 있는 NULL수
  • 인덱스 정보

 위와 같은 통계정보를 활용하여 옵티마이저는 실행계획을 만든다. 

반응형
Comments