iT邦幫忙

0

請問 SQL Server 顯示鎖或是超時,但在 session 都查不到有卡的 sql,請問如何還原追蹤當時是哪些sql跟參數造成的問題?

sql
  • 分享至 

  • xImage

請問 SQL Server 顯示鎖或是超時,但在 session 都查不到有卡的 sql,請問如何還原追蹤當時是哪些sql跟參數造成的問題?

舉例: 系統在11-12點顯示幾個事務鎖或是超時

事務(進程 ID 97)與另一個進程被死鎖在 鎖 資源上,並且已被選作死鎖犧牲品。請重新運行該事務。  
或是
事務(進程 ID 98)與另一個進程被死鎖在 鎖 | 通信緩衝區 資源上,並且已被選作死鎖犧牲品。請重新運行該事務。  
或是
執行超時已過期。完成操作之前已超時或服務器未響應。 

我用以下SQL查詢DB session都沒看到有卡的 sql

SELECT      r.scheduler_id ,
            status         ,
            r.session_id   as SPID,
            r.blocking_session_id as BlockBy,
            substring(
				ltrim(q.text),
				r.statement_start_offset/2+1,
				(CASE
                 WHEN r.statement_end_offset = -1
                 THEN LEN(CONVERT(nvarchar(MAX), q.text)) * 2
                 ELSE r.statement_end_offset
                 END - r.statement_start_offset)/2)
                 AS [正在執行SQL命令],
            r.cpu_time      as [CPU Time(ms)],
            r.start_time    as [Start Time],
            r.total_elapsed_time as [Execute Total Time],
            r.reads              as [Reads],
            r.writes             as [Writes],
            r.logical_reads      as [Logical Reads],
            -- q.text, /* 完整的 T-SQL 指令碼 */
            d.name               as [DataBase]
FROM        sys.dm_exec_requests r 
			CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS q
			LEFT JOIN sys.databases d ON (r.database_id=d.database_id)
WHERE       r.session_id > 50 AND r.session_id <> @@SPID
ORDER BY    r.total_elapsed_time desc

是否能追出當時發生原因,跟能調查出是誰下哪個指令,被誰下的指令卡住
image

alien663 iT邦研究生 3 級 ‧ 2023-12-20 15:42:36 檢舉
鎖都結束了你才去查詢,當然查不到阿
alien663 iT邦研究生 3 級 ‧ 2023-12-20 15:45:08 檢舉
隨便google一下,就有很詳盡的文章了

https://dotblogs.com.tw/jamesfu/2021/09/25/Deadlock
小MIS iT邦研究生 1 級 ‧ 2023-12-21 08:32:10 檢舉
謝謝您!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
石頭
iT邦高手 1 級 ‧ 2023-12-20 17:13:18
最佳解答

假如你沒有 snapshot 當時發生 deadlock or blocking 資訊, 我們也查不到太多細節, sql server 有 deadlock report 可以啟動, 假如發生 deadlock 可以查看當時 deadlock 細節

https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-deadlocks-guide?view=sql-server-ver16

另外建議可以啟動 whoisactive 來監控 SQL Server 會依照你設定參數, snapshot 系統重要指標, 以便日後維運

https://whoisactive.com/

小MIS iT邦研究生 1 級 ‧ 2023-12-21 08:31:56 檢舉

謝謝您!

0
pilipala
iT邦研究生 5 級 ‧ 2023-12-20 16:36:26

發生的是 deadlock,但文字描述是找 block,兩個抓取的方式不一樣

我要發表回答

立即登入回答