[스크랩] MSSQL CPU 사용률 높은 쿼리 찾기
http://blog.naver.com/jevida/140212017534
SQL Server CPU 사용률이 높은 프로세서 및 쿼리 찾기
-
Version : SQL Server 2005, 2008, 2008R2, 2012, 2014
SQL Server에서 CPU사용률이 높게 나타났다. 어떤 프로세스가 어떤 쿼리를 실행하여 CPU 사용률이 높은지 SPID와 KPID를 사용하여 알아보자.
[시작] – [실행] - [perfmon] 또는 성능 카운터를 실행한다. [Thread] 카운터 목록에서 [% Processor Time], [ID Thread]를 선택하고 인스턴스에 [sqlservr]를 선택 한다.
![]()
카운터를 추가하면 다음과 같이 스레드를 모니터링 할 수 있으며 이때 프로세서 값이 높은 스레드를 찾는다. 아래 그림에서는 스레드 1776이 CPU를 많이 사용하고 있는 것을 확인 할 수 있다.
![]()
스레드 ID 값을 사용하여 SPID 정보를 확인한다. SPID는 SQL Server 프로세스 ID 이며 KPID는 커널 프로세스ID 이다. KPID 1776의 SPID는 66이다.
sysprocess 테이블에 spid 정보를 얻기 위해 쿼리를 한다.
|
SELECT spid, kpid, dbid, cpu, memusage FROM sysprocesses WHERE kpid=1776 |
![]()
SPID 66번의 상태를 확인하면 현재 실행중인 것을 알 수 있다.
이 스레드에 Transaction이 얼마나 설정되어 있는지 확인한다.
|
SELECT spid, kpid, status, cpu, memusage, open_tran, dbid FROM sysprocesses WHERE spid=66 |
![]()
DBCC INPUTBUFFER 명령어를 사용하면 현재 입력된 쿼리의 정보를 확인할 수 있다. 현재 WHILE 구문의 쿼리로 인하여 CPU 사용률이 높은 것을 확인 할 수 있다.
|
dbcc inputbuffer(66) |
![]()
참고 자료
sys.sysprocesses (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms179881.aspx
DBCC INPUTBUFFER(Transact-SQL)