首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

識別開啟中交易避免資源鎖死:查詢 sysprocesses 實戰腳本

     編輯:關於SqlServer

開啟交易導致鎖死與效能問題

長時間未認可/回滾的交易會持續持有鎖定資源,阻塞其他連線,甚至引發死結。掌握目前資料庫中「開啟中交易」的狀況,是 DBA 排查阻塞與效能異常的基本功。

核心系統表與函數

  • master..sysprocesses:open_tran > 0 表示該 SPID 有開啟交易;spid 為處理序識別碼。
  • DBCC INPUTBUFFER(spid):取得該 SPID 最近執行的 255 字元指令(需 sysadmin 權限)。

SQL Server 2000 專用腳本:列印所有開啟交易的指令

SET NOCOUNT ON;
DECLARE @Commands TABLE (
    ctr INT IDENTITY NOT NULL,
    command VARCHAR(2000) NOT NULL
);

INSERT @Commands (command)
SELECT 'DBCC INPUTBUFFER (' + CONVERT(VARCHAR(10), spid) + ')'
FROM master..sysprocesses
WHERE open_tran > 0;

DECLARE @ctr INT = 1, @command VARCHAR(2000);

WHILE @ctr < (SELECT COUNT(*) + 1 FROM @Commands)
BEGIN
    SELECT @command = command FROM @Commands WHERE ctr = @ctr;
    PRINT '-- ' + @command;
    EXECUTE (@command);
    SET @ctr = @ctr + 1;
END;

後續處理建議

  1. 依輸出指令判斷是否為失控交易(如遺漏 COMMIT/ROLLBACK、長跑批次作業)。
  2. 確認後可對該 SPID 下達 KILL spid 釋放資源(謹慎執行,確認業務影響)。
  3. 建議將此腳本納入定期巡檢作業,搭配封鎖監控報警。

總結

透過 sysprocesses.open_tran 快速定位開啟交易,再以 DBCC INPUTBUFFER 還原指令內容,能精準鎖定阻塞源頭,縮短事故處理時間,保障資料庫服務穩定性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved