Database/MS-SQL

[스크랩] MSSQL CPU 사용률 높은 쿼리 찾기

99iberty 2014. 9. 16. 14:03

 

http://blog.naver.com/jevida/140212017534

 

 

SQL Server CPU 사용률이 높은 프로세서 및 쿼리 찾기

  • Version : SQL Server 2005, 2008, 2008R2, 2012, 2014

SQL Server에서 CPU사용률이 높게 나타났다. 어떤 프로세스가 어떤 쿼리를 실행하여 CPU 사용률이 높은지 SPIDKPID를 사용하여 알아보자.

[시작] – [실행] - [perfmon] 또는 성능 카운터를 실행한다. [Thread] 카운터 목록에서 [% Processor Time], [ID Thread]를 선택하고 인스턴스에 [sqlservr]를 선택 한다.

카운터를 추가하면 다음과 같이 스레드를 모니터링 할 수 있으며 이때 프로세서 값이 높은 스레드를 찾는다. 아래 그림에서는 스레드 1776CPU를 많이 사용하고 있는 것을 확인 할 수 있다.

스레드 ID 값을 사용하여 SPID 정보를 확인한다. SPIDSQL Server 프로세스 ID 이며 KPID는 커널 프로세스ID 이다. KPID 1776SPID66이다.

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)

http://technet.microsoft.com/ko-kr/library/ms187730.aspx