정확한 쿼리 성능을 얻는 방법?


9

저장 프로 시저의 성능을 향상 시키려고합니다. SP를 실행하면 마치 캐시 된 것처럼 거의 즉시 완료됩니다. SSMS에서 SP를 실행하기 전에 다음 두 줄의 SQL을 사용하라는 지시를 받았습니다.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

SP 위의 두 줄의 코드로 SP를 실행하면 약 8 초 후에 완료됩니다. 그러나 이것이 실제로 실제 실행 시간을 제공합니까 (응용 프로그램에서 실행하는 것처럼)? 내가 어떻게 알아?


답변:


9

이러한 명령은 두 가지 작업을 수행합니다.

  • 디스크에서 이미 검색된 데이터 페이지를 저장하는 페이지 캐시를 지우십시오 (일반적으로 쿼리에서 가장 큰 시간 요소는 디스크 액세스입니다)
  • 쿼리 계획 캐시를 지 웁니다. 즉, 서버는 새 쿼리 계획을 만들어야합니다. 트랜잭션 볼륨이 매우 큰 경우를 제외하고 일반적으로 중요하지 않습니다.

기본적으로 "가장 최악의"시나리오와 동등한 시간을 받고 있습니다. 서버를 재부팅 한 후 메모리에 아무것도 없습니다. 후속 실행은 해당 페이지가 이미 메모리에로드되어 있으므로 디스크에서 데이터를 가져 오는 데 드는 비용을 지불 할 필요가 없습니다.

이는 실제 상황과 유사합니다. 특정 쿼리를 처음 실행하는 사용자는 동일한 데이터를 확인한다고 가정 할 때 후속 실행보다 더 오래 기다려야 할 것입니다.

내가 좋아하는 좋은 방법은 여러 번 실행하고 평균을 취하는 것입니다. tempdb와 같은 공유 리소스를 완전히 제어 할 수 없으므로 공유 환경에서 특히 유용합니다.

이러한 명령을 사용하여 실제로 뒤에서 일어나는 일에 대한 자세한 정보를 얻을 수 있습니다.

SET STATISTICS IO ON
SET STATISTICS TIME ON

이것들은 디스크에서 (객체 당) 페이지 읽기, 논리적 페이지 읽기, 계획 컴파일 시간 및 쿼리 실행 시간에 대한 자세한 정보를 제공합니다.


평소 JNK처럼 훌륭한 답변.
OO

도와 줄 수있어서 기뻐! 당신은 내가 많이 다루었던 것들에 대해 질문하고 있습니다. 복제 또는 메모리 관리에 대해 묻는다면 추가 할 것이 많지 않습니다 :)
JNK

2
SET STATISTICS IO ON에 대해서는 알았지 만 SET STATISTICS TIME ON에 대해서는 몰랐습니다. 감사합니다 JNK.
datagod

2
참고로 SQL Sentry Plan Explorer를 사용하여 실제 계획을 생성하여 모든 SET 설정 없이이 정보를 많이 얻을 수 있습니다. 그리고 여러 번 (5 번의) 런을 얻으려면 GO 5SSMS 에서처럼 배치를 간단히 종료 할 수 있습니다 . 무료로 다운로드 할 수 있으며 아무것도 판매하지 않습니다. sqlsentry.net/plan-explorer/sql-server-query-view.asp
Aaron Bertrand

1
@JNK는 물론 무료이며 시간을 절약 할 수 있으며 Management Studio에서 나가기가 불가능하거나 매우 번거로운 정보를 보여줍니다. 그리고 나는 거기서 일합니다. :-)
Aaron Bertrand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.