2018年6月11日 星期一

交易狀態查詢

查詢目前資料庫內各Session的交易狀態以及交易量 select DTST.Session_id,DES.login_name [登入帳號],DB_NAME(DTDT.database_id) [資料庫],
DTDT.database_transaction_begin_time AS [起始時間],
DATEDIFF(ms,DTDT.database_transaction_begin_time,GETDATE()) AS [至目前耗時(ms)],
case DTAT.transaction_type when 1 then '讀取/寫入交易'
when 2 then '唯讀交易' when 3 then '系統交易'
when 4 then '分散式交易' end [交易類型],
case DTAT.transaction_state when 0 then '交易尚未完全初始化'
when 1 then '交易已經初始化,但尚未啟動'
when 2 then '交易在作用中' when 3 then '交易已經結束。它只用於唯讀交易'
when 4 then '認可處理序已經在分散式交易上起始。分散式交易在作用中,但無法再進一步處理'
when 5 then '交易是在已準備的狀態,正在等候解析。' when 6 then '已認可交易'
when 7 then '正在回復交易' when 8 then '已回復交易' end [交易狀態],
DTDT.database_transaction_log_record_count [交易紀錄(log)筆數],
DTDT.database_transaction_log_bytes_used [交易紀錄byte 數],
DTDT.database_transaction_log_bytes_reserved [交易紀錄保留byte 數],
DEST.text [最後交易文字],
DEQP.query_plan [最後查詢計畫]
from sys.dm_tran_database_transactions DTDT
JOIN sys.dm_tran_session_transactions DTST ON DTST.transaction_id=DTDT.transaction_id
JOIN sys.dm_tran_active_transactions DTAT ON DTST.transaction_id=DTAT.transaction_id
JOIN sys.dm_exec_sessions DES ON DES.session_id=DTST.session_id
JOIN sys.dm_exec_connections DEC ON DEC.session_id=DTST.session_id
LEFT JOIN sys.dm_exec_requests DER ON DER.session_id=DTST.session_id
CROSS APPLY sys.dm_exec_sql_text(DEC.most_recent_sql_handle) AS DEST
OUTER APPLY sys.dm_exec_query_plan(DER.plan_handle) AS DEQP
ORDER BY DTDT.database_transaction_log_bytes_used DESC

沒有留言:

張貼留言