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이다.
|
SELECT spid, kpid, dbid, cpu, memusage FROM sysprocesses WHERE kpid=1776 |
SPID 66번의 상태를 확인하면 현재 실행중인 것을 알 수 있다.
|
SELECT spid, kpid, status, cpu, memusage, open_tran, dbid FROM sysprocesses WHERE spid=66 |
DBCC INPUTBUFFER 명령어를 사용하면 현재 입력된 쿼리의 정보를 확인할 수 있다. 현재 WHILE 구문의 쿼리로 인하여 CPU 사용률이 높은 것을 확인 할 수 있다.
|
dbcc inputbuffer(66) |
CPU 사용률이 높은 쿼리를 찾았으면 해당 쿼리의 문제점을 수정 할 수 있도록 한다.
2014-05-09 / 강성욱 / http://sqlmvp.kr
CPU고부하쿼리, DB튜닝, 쿼리튜닝, DB강좌, mssql, SQL, DBA, KPID, SPID, DBCC INPUTBUFFER,
'SQL Server > SQL Server Tip' 카테고리의 다른 글
| SQL Server Agent Error log 위치 변경 (0) | 2015.07.23 |
|---|---|
| SQL Server에서 차단을 확인하는 다양한 방법 (0) | 2015.07.23 |
| Collation 변경 (0) | 2015.07.23 |
| 인덱스 리빌드 동작 (Gather Streams from SORT) (0) | 2015.07.23 |
| 최소한의 다운타임으로 데이터베이스 이동하기 (0) | 2015.07.23 |