SQL Server/SQL Server Tip

Block 모니터링.

SungWookKang 2015. 7. 17. 09:00
반응형

Block 모니터링.

 

데드락(DeadLock)에 관해서는 지난 아티클에서 알아 보았습니다.

데드락 관련 링크 : http://blog.naver.com/jevida/140164120810

 

이번에는 블로킹 모니터링을 하도록 하겠습니다.

 

[SP_Lock]이라는 시스템 저장프로시저는 잠금과 관련된 정보를 제공합니다. 하지만 블로킹이 발생 하였을 때 블로킹 하는 프로세스와 블로킹 당하는 프로세스의 관계를 파악하기에는 불편함이 있습니다.

 

Sysprocess 와 inpubuffer를 통하여 블로킹의 관계와 최근 수행된 이벤트 정보를 확인해 보도록 하겠습니다.

 

BEGIN TRY

    DROP TABLE #TEMP

END TRY BEGIN CATCH END CATCH

GO

 

BEGIN TRY

    DROP TABLE #TEMP2

END TRY BEGIN CATCH END CATCH

GO

 

SELECT

    IDENTITY(INT, 1,1) AS NUM ,SPID, BLOCKED, WAITTIME, WAITTYPE, LASTWAITTYPE, STATUS, LOGINAME, HOSTNAME, LAST_BATCH, DB_NAME(DBID) AS [DB] INTO #TEMP

FROM SYS.SYSPROCESSES

WHERE BLOCKED <> 0 OR (SPID IN (SELECT BLOCKED FROM SYS.SYSPROCESSES))

 

CREATE TABLE #TEMP2(NUM INT IDENTITY, SPID INT, EVENTTYPE NVARCHAR(500), PARAMETERS INT, EVENTINFO NVARCHAR(500))

 

DECLARE @MIN INT = 1

DECLARE @MAX INT

DECLARE @QUERY NVARCHAR(500)

DECLARE @SPID INT

SET @MAX = (SELECT MAX(NUM) FROM #TEMP)

 

WHILE @MIN <= @MAX

BEGIN

     SELECT @QUERY = 'DBCC INPUTBUFFER(' + CONVERT(NVARCHAR(10), SPID) + ')', @SPID = SPID FROM #TEMP WHERE NUM = @MIN

    

    INSERT #TEMP2 (EVENTTYPE, PARAMETERS, EVENTINFO)

    EXEC (@QUERY)

    

    UPDATE #TEMP2 SET SPID = @SPID WHERE NUM = @@IDENTITY

    

    SET @MIN = @MIN + 1

END

 

SELECT * FROM #TEMP

SELECT * FROM #TEMP2

 

첫번째 세션에 BEGIN TRAN을 이용하여 잠금을 생성합니다.

두번째 세션에서 현재 잠금이 걸려있는 테이블을 조회 합니다.

두번째 세션에서 쿼리가 대기 상태로 인하여 기다리는 것을 확인 할 수 있습니다.

 

다른 세션에서 위의 쿼리를 실행하면 블로킹의 상관관계와 어떤 쿼리문이 실행되었는지 확인 할 수 있습니다.

 

 

SPID 56번이 블로킹 당한 것은 SPID 55번 때문이라는 것을 확인 할 수 있습니다.

DBCC INPUTBUFFER을 통하여 각 SPID의 최근 실행 명령어가 나타남을 확인 할 수 있습니다.

 

[참고 자료]

SQL Server 2000/2005 튜닝 – 정원혁, 손광수-

 

http://SQLMVP.KR

반응형

'SQL Server > SQL Server Tip' 카테고리의 다른 글

SQL Server를 활용한 Perfmon 로그 저장  (0) 2015.07.17
VLF 환경과 성능  (0) 2015.07.17
추적파일을 테이블로 로드하기  (0) 2015.07.17
  (0) 2015.07.17
Tempdb 경합 (동시성 강화)  (0) 2015.07.17