程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 避免資源死鎖:識別已打開的事務

避免資源死鎖:識別已打開的事務

編輯:關於SqlServer

因為打開的事務可能會死鎖資源,引發性能的問題,所以了解在一個專用數據庫中哪些事務是打開的是很有幫助的。被死鎖的資源可能堵塞其他數據庫的用戶。

為了找出這些已打開的事務就要查詢master數據庫中的sysprocesses表。sysprocesses表有一個open_tran的列,它表示已有命令是否是一個打開的事務。如果值大於0表示它是一個已經打開的事務。sysprocesses表還有一個spid的列,表示正在訪問SQL Server的系統進程的id。你可以使用spid列作為DBCC INPUTBUFFER()系統函數的參數。只有SQL Server的sysadmins帳號才可以執行這個函數。這個函數的輸出首先是spid對應的255字符的命令。你可以由此確定哪個命令是影響數據庫性能的罪魁禍首,然後根據spid發出一個KILL命令。

下面是打印已打開事務的命令的腳本。它用到了表變量,因此只能在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, @command VARCHAR(2000)
SET @ctr = 1


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved