반응형

SQL Server 데이터베이스를 운영하다보면 실행시간이 오래 걸리는 쿼리가 있습니다.  이번 포스팅에서는 해당하는 쿼리가 시간이 오래걸리는 문제를 해결하기 위해 쿼리의 성능을 분석하는 방법에 대해 알아보도록 하겠습니다.

 

 

쿼리 구문 추가

-- 컴파일 시간 및 실행 시간
SET STATISTICS TIME ON;

-- 각 구문의 IO 실행 결과
SET STATISTICS IO ON;

 

쿼리 앞에 위의 구문을 넣어 함께 실행시키면 컴파일 및 실행시간, 각 구문의 IO 실행결과를 알 수 있습니다. (IO 실행결과는 각 명령문에 대한 IO 작업 수입니다.)

간단한 예시를 작성해 보겠습니다.

 

[쿼리 실행]

 

 

 

 

[실행 결과]

 실행결과는 메시지 탭에서 확인할 수 있습니다.

  • 검색 수 : 테이블 에서 스캔 또는 탐색이 시작된 횟수 입니다. 각 테이블을 최대 한 번만 스캔해야 합니다.
  • 논리적 읽기 수 : 메모리 내 캐시(버퍼 풀)에서 행을 읽은 데이터 페이지 수입니다.
  • 물리적 읽기 수 : 데이터가 디스크로부터 버퍼풀에 전송된 페이지 수입니다. 데이터 전송이 완료 될 때까지 블록 또는 대기가 발생합니다.
  • 미리 읽기 수 : 비동기적으로 디스크로부터 데이터를 읽어 버퍼풀에 넣는 페이지 수입니다.
  • LOB 논리적 읽기 수 : LOB 데이터를 읽은 페이지 수입니다.
  • LOB 미리 읽기 수 : LOB 데이터를 읽은 페이지 수입니다.

 

논리적 읽기 수가 많으면 이상적인 조건에서도 긴 실행 시간과 높은 CPU 소비로 이어집니다. 논리적 읽기 수가 많으면 쿼리의 성능이 낮아져 실행 속도가 느려진다는 뜻이겠죠? 시간이 오래 걸리는 쿼리를 위의 구문과 함께 실행하여 논리적 읽기 수가 높은 테이블을 중점적으로 튜닝한다면 쿼리 성능 개선에 도움을 줄 것입니다.

 

여기까지 시간 오래 걸리는 쿼리 성능 분석하는 방법에 대한 포스팅을 마치도록 하겠습니다.

반응형

+ Recent posts