SQL Server/SQL Server Tip

활성 트랜잭션 찾기

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

활성 트랜잭션 찾기

 

현재 활성되어 있는 트랜잭션에서 오래된 트랜잭션은 어떤 것이 있을가? 그리고 누가 이 트랜잭션을 발생 시켰을까?

다음 스크립트를 이용해서 찾아 보도록 합니다.

SELECT

    A.SESSION_ID, DATEDIFF(MINUTE, B.LAST_REQUEST_END_TIME, GETDATE()) AS [LOCKING MINUTS],

    B.LOGIN_TIME, B.HOST_NAME, B.PROGRAM_NAME, B.CLIENT_INTERFACE_NAME, B.LOGIN_NAME,

    B.STATUS, B.LAST_REQUEST_START_TIME, B.LAST_REQUEST_END_TIME,

    TEXT

FROM SYS.DM_TRAN_SESSION_TRANSACTIONS AS A

    INNER JOIN SYS.DM_EXEC_SESSIONS AS B ON A.SESSION_ID = B.SESSION_ID

    INNER JOIN SYS.DM_EXEC_CONNECTIONS AS C ON B.SESSION_ID = C.SESSION_ID

CROSS APPLY SYS.DM_EXEC_SQL_TEXT(C.MOST_RECENT_SQL_HANDLE)

WHERE DATEDIFF(MINUTE, B.LAST_REQUEST_END_TIME, GETDATE()) > 0 사용자시간수정()

 

--=================================================================================

 

SELECT

    'KILL ' + CONVERT(CHAR(4),SPID) AS [KILL_LIST], SPID, DATEDIFF(SS, LAST_BATCH, GETDATE()) AS [LOCK_TIME],

    LOGINAME, LASTWAITTYPE, CMD, TEXT

FROM SYS.SYSPROCESSES AS A

CROSS APPLY SYS.DM_EXEC_SQL_TEXT(A.SQL_HANDLE)

WHERE OPEN_TRAN >0 AND DATEDIFF(SS, LAST_BATCH, GETDATE()) > 0 사용자시간수정()

AND SPID > 50

 

세션1에 트랜잭션을 명시하고 활성 상태로 둡니다. 그리고 다른 세션을 열어 위의 스크립트를 실행하면 세션을 실행한 시간, 세션 활성 시간, 로그인 계정, 실행 쿼리 등이 나타납니다.

 

2012-08-07 / 강성욱 / http://sqlmvp.kr

 

반응형