오랫동안 활성화 되어있는 트랜잭션이 있는 경우 문제점
트랜잭션이 오랫동안 수행되고 있는 경우, 이후에 같은 페이지를 접근하는 다른 세션들은 대기해야 합니다.
이런 경우 트랜잭션을 수행하는 세션을 정리해야 이후의 세션들이 작업을 진행할 수 있습니다.
또한 트랜잭션이 활성화 되어 있다면, 트랜잭션 로그도 정리할 수 없어 사용량이 계속 늘어나게 됩니다.
다양한 원인(락, 네트워크 등)으로 트랜잭션을 정상종료하지 못하고 남아있는 좀비세션들이 있을 수 있습니다.
오랫동안 수행되는 트랜잭션을 찾는 쿼리
오랫동안 수행되는 트랜잭션의 세션ID, 현재 상태, 접속계정, 접속 hostname, 수행된 시간, 쿼리를 확인할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SELECT p.spid , p.cmd , p.status , p.loginame , p.hostname , p.open_tran , datediff(s, p.last_batch, getdate()) as [wait tims(s)] , q.text FROM master.dbo.sysprocesses AS p WITH(NOLOCK) CROSS APPLY sys.dm_exec_sql_text (p.sql_handle) AS q WHERE p.open_tran > 0 AND p.spid > 50 AND EXISTS ( SELECT 1 FROM master.dbo.syslockinfo WHERE req_spid = p.spid and rsc_type <> 2 ) ORDER BY datediff(s, p.last_batch, getdate()) DESC | cs |
이렇게 찾은 세션ID 는 KILL 명령어로 강제종료시킬 수 있습니다.
1 | KILL 51 | cs |
'SQL Server > SQL Server 자주보는' 카테고리의 다른 글
[MSSQL] 모든 인덱스 사이즈를 조회하는 방법 (0) | 2020.10.29 |
---|---|
[MSSQL] 특정 단어가 포함된 프로시저 찾는 방법 (0) | 2020.04.19 |
[MSSQL] 데이터베이스 마지막 접속 시간 확인하는 쿼리 (0) | 2020.02.13 |
[MSSQL] TABLE 에 마지막으로 접근한 시간 확인하기 (0) | 2020.02.10 |
[MSSQL] SP 마지막으로 실행한 시간 확인하기 (0) | 2020.02.10 |