KILL Linked Server異常中斷會話後一直處於KILLED/ROLLBACK狀態

一、 問題背景

開發反饋有一個job下午一直沒執行,登上數據庫檢查發現job之前只執行幾分鐘,但這一次執行了5個小時還在跑。查看SqlServer中當前在執行的語句,發現有一個用到了Linked Server的查詢執行了將近5小時,並且正在等待OELDB事件。嘗試手動執行這個sql,發現跟平時一樣幾分鐘就能跑完。

這個時間恰好和早上防火牆故障的時間能對上,估計是由於防火牆故障導致 源會話一直在等待Linked Server返回結果,但實際上這個連接已經異常中斷了,永遠無法給這個會話返回任何結果,導致job一直等待OELDB事件無法結束。

 

我們選擇KILL掉該會話,select語句本來應該直接能被KILL掉不用回滾,但是卻發現會話狀態變成KILLED/ROLLBACK,半個小時之後再看,回滾進度一直是0%,估計剩餘時間也一直是0秒。

KILL 129 WITH STATUSONLY; 
SPID 129: 正在進行事務回滾。估計回滾已完成: 0%。估計剩餘時間: 0 秒。

 

二、 解決方法

查了網上一些文章,這種Linked Server連接異常中斷的語句(包括目標庫突然宕機、防火牆故障等),確實是無法通過SqlServer的kill會話來結束,原因暫時沒看有人查到。另外根據觀察雖然這個會話一直處於KILLED/ROLLBACK狀態,但它並不會導致日誌無法截斷問題。

 

下面整理了網上查到的幾種解決方法,第1,2種測試過是可以的,第3種是新發現的,沒驗證過。

1. 法一

重啓SqlServer服務,對於測試庫或者能有停機時間的業務,這種是最簡單的方法。

 

2. 法二

下載微軟的TCPView 軟件,在數據庫服務器運行,殺掉源庫到Linked Server的連接。注意是點end connection,千萬別點end process,否則會kill掉SqlServer進程(萬一已經點了,重新啓動服務就好)。

 

3. 法三

  • 查詢出處於阻塞的sql線程
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SELECT
db_id(DB_NAME(er.[database_id])) [DBID]
,er.[session_id] AS [SessionID]
,er.[command] AS [CommandType]
,est.[text] [StatementText]
,er.[status] AS [Status]
,CONVERT(DECIMAL(5, 2), er.[percent_complete]) AS [Complete_Percent]
,CONVERT(DECIMAL(38, 2), er.[total_elapsed_time] / 60000.00) AS [ElapsedTime_m]
,CONVERT(DECIMAL(38, 2), er.[estimated_completion_time] / 60000.00) AS [EstimatedCompletionTime_m]
,er.[last_wait_type] [LastWait]
,er.[wait_resource] [CurrentWait]
FROM sys.dm_exec_requests AS er
INNER JOIN sys.dm_exec_sessions AS es ON er.[session_id] = es.[session_id]
CROSS APPLY sys.dm_exec_sql_text(er.[sql_handle]) est
WHERE er.[command] like 'Killed%';
  • 找到spid(例如是75),根據spid查詢系統進程hostprocess
select spid, blocked,waittime,lastwaittype,dbid,last_batch,open_tran,hostprocess,cmd from sysprocesses where spid = 75;

  • 在執行這條語句的機器上,cmd中,利用進程號查進程名
# tasklist|findstr 進程號
tasklist|findstr 20540
  • cmd中,根據進程名稱kill進程
# taskkill /f /t /im 進程名稱
taskkill /f /t /im /svchost.exe

 

參考

https://docs.microsoft.com/zh-cn/sysinternals/downloads/tcpview

https://www.cnblogs.com/kerrycode/p/5981763.html

https://www.colabug.com/2018/0111/2184621/

https://www.cnblogs.com/kerrycode/p/5981763.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章