프로그래밍/DB

[DB] MSSQL 프로필러(Profiler) 사용법. 속도느린쿼리 확인방법

ss-pro 2020. 9. 29. 23:01
반응형

시스템을 운영하다가보면 데이터베이스에 부하를 주는 쿼리문을 확인해야하는 경우가 있습니다. 이럴때 SQL Profiler를 사용하여 속도저하 쿼리를 확인할수 있습니다. SQL Management -> SQL Server Profiler항목을 선택합니다. 

 

 

추적하고하는 데이터페이스 서버에 로그인합니다. 

 

 

추적하고 싶은 이벤트를 선택합니다. 쿼리문을 추적할 예정이기때문에 저장프로시저(Stored Procedures)와 TSQL에 대하셔 선택하여 실행하도록 하겠습니다. 

 

 

Run버튼을 선택하여 추적을 시작합니다. 추적을 시작하면 아래와 같이 TSQL문과 저장프로시저에 대한부분을 추적할수 있습니다. 항목에 대하여 살펴보도록 하겠습니다. 

항목 리스트 

TextDataTSQL실행문정보 표시 
ApplicationName  접속한 응용프로그램 이름 표시
NTUserName       접속계정정보
CPU                   CPU부하
Reads                 IO Read 개수
Writes                IO Write 개수
Duration             실행속도

 

 

프로파일러로 추적한 결과와  SET STATISTICS IO ON; SET STATISTICS TIME ON; 명령을 사용하여 IO부하량과 속도관련부분을 체크해보면 동일한값이 나오는것을 확인할수 있습니다. 

1
2
3
4
5
6
SET STATISTICS IO ON;  
SET STATISTICS TIME ON;

SELECT
 1000 [ID]
      ,[PW]
  FROM [TEST].[dbo].[TABLE01]cs

이제 CPU부하를 많이 주는쿼리고 부하가 걸리는 쿼리에 대한부분이 확인 가능하며 어떤 Application에서 부하를 주는지 확인할 수 있습니다. 문제되는 부분을 찾았으니 해당부분을 고치면 서버부하를 줄이고 성능향상을 시킬수 있습니다. 

필터걸어서 원하는값만 확인하는 방법
이번에는 모든 쿼리를 확인할수 없기때문에 필터를 걸어서 추척하는 방법에 대해 설명드리겠습니다. Duration값이 1000ms보다 큰경우에대하여 필터를 걸어보겠습니다. 추적화면에서 오른쪽 하단에 Column Filters버튼을 클릭합니다. Edit Filter화면이 나타나고 Duration항목을 선택합니다. Creater than or equal 항목에 1000을 입력합니다. 결과값이 없는 행을 제외하는 옵션(Exclude rows that do not contain values)을 체크하도록 하겠습니다.

d

이제 실행해보면 Duration이 1000이상이 항목에 대해서 추적 할 수 있습니다.