1.bmp

 

Select * from sys.dm_tran_session_transactions

 -->연결된 트랜잭션 및 활성화된 세션에 대한 상관 관계 정보를 표시 

       현재 열린 Tran 없음

1(2).bmp 

 

Select * from sys.dm_exec_sessions

-->모든 활성 사용자 연결 표시

     현재 사용자 세션으로는 SERVER MANAGEMENT STUDIO 와 쿼리 분석기에 대한 세션이 열려있음

     중요 컬럼으로 last_request_end_time은 해당 세션 사용자가 마지막으로 요청한 쿼리요청 응답결과의 시간을 표시

  

 2(1).bmp

 

 

Select * from sys.dm_exec_connections  

-->SQL Server의 이 인스턴스에 대해 설정된 연결에 대한 정보와 각 연결에 대한 세부 정보를 표시

현재 인스턴스에 설정된 열결정보 표시 51,52번 세션에 대한 세부정보가 표시된

 3(1).bmp

 

새쿼리로 세션창 하나 추가(53번 세션이 추가되었음)

4.bmp 

 

53번 세션 창에서 하기의 SQL 실행

begin tran

select * from Person.Address

where addressid =4

 

52번 세션창에서 sys.dm_tran_session_transactions DMV 조회결과 53번 세션창에서 사용자가 

실행한 트랜젝션 내역이 표시(Is_User_TranSACTION=1)

5.bmp 

 

 

 52번 세션 창에서 하기의 쿼리를 실행

  로직은 간단함 마지막 실행 요청 응답 시간과 현재 시간을 비교하여 3초이상이 걸리는 쿼리 및 유처 정보 상세 내역을 가져오는 쿼리

  응답시간이 있다고 해도 sys.dm_tran_session_transactions 과 Inner 조인에 걸리는 쿼리는 Commit OR rollback된 쿼리가 아님

  초를 분으로 시간은 3초에서 원하는 시간으로 변경가능함

 

Select es.login_name,es.original_login_name, st.session_id,

        datediff(SECOND, last_request_end_time, getdate()) AS '걸린시간()',

text, last_request_end_time, getdate() AS '현재시간',

es.reads, es.writes, es.logical_reads

From sys.dm_tran_session_transactions st

Inner join sys.dm_exec_sessions es

on es.session_id = st.session_id

Inner join sys.dm_exec_connections ec

on ec.session_id = es.session_id

Cross apply sys.dm_exec_sql_text(ec.most_recent_sql_handle)

where IS_USER_Transaction = 1

AND   datediff(SECOND, last_request_end_time, getdate()) > 3

  

결과

6.bmp 

 

만약 실수로 Tran 걸고 Commit 안하고 퇴근한놈 걸리면 그놈은 죽는거다 -_-

+ Recent posts