활성 트랜잭션 찾기
현재 활성되어 있는 트랜잭션에서 오래된 트랜잭션은 어떤 것이 있을가? 그리고 누가 이 트랜잭션을 발생 시켰을까?
다음 스크립트를 이용해서 찾아 보도록 합니다.
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에 트랜잭션을 명시하고 활성 상태로 둡니다. 그리고 다른 세션을 열어 위의 스크립트를 실행하면 세션을 실행한 시간, 세션 활성 시간, 로그인 계정, 실행 쿼리 등이 나타납니다.
강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp