활성 트랜잭션 찾기
현재 활성되어 있는 트랜잭션에서 오래된 트랜잭션은 어떤 것이 있을가? 그리고 누가 이 트랜잭션을 발생 시켰을까?
다음 스크립트를 이용해서 찾아 보도록 합니다.
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
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SQL Server의 Errorlog는 어디에 저장 될까? (0) | 2015.07.17 |
---|---|
통계(Statistics) (0) | 2015.07.17 |
Forwarded Record (행 이동에 대한 포워드) (0) | 2015.07.17 |
인덱스 생성 순서에 따른 내부 작업 변화 (0) | 2015.07.17 |
Ghost Record(인덱스에서 행 삭제시 발생) (1) | 2015.07.17 |