有些時候,我們在企業管理器中發現或通過sp_who發現,session的數目達到很高,有些時候甚至達到2000+。這個時候,用戶根本就不能連接到數據庫了。于是找到腳本,跟大家分享下。
在master數據庫中創建以下SP
CREATE PROCEDURE dbo.KillAllProcesses @dbName varchar(50)
AS
BEGIN
SET NOCOUNT ON
DECLARE @spid INT,
@cnt INT,
@sql VARCHAR(255)
SELECT @spid = MIN(spid),@cnt = COUNT(*)
FROM master..sysprocesses
WHERE dbid = DB_ID(@dbname) AND spid != @@SPID AND status = 'sleeping' and last_batch< getdate()-0.0416 and spid>51 and loginname='jrzsfc' and program_name='SQL Query Analyzer'
WHILE @spid IS NOT NULL
BEGIN
SET @sql = 'KILL ' + RTRIM(@spid)
EXEC ( @sql )
SELECT @spid = MIN(spid),@cnt = COUNT(*)
FROM master..sysprocesses
WHERE dbid = DB_ID(@dbname) AND spid != @@SPID AND status = 'sleeping' and last_batch< getdate()-0.0416 and spid>51 and loginname='jrzsfc' and program_name='SQL Query Analyzer'
END
END
GO
我這里面的選擇條件是將
(1):狀態為sleeping
(2):最后一次執行時間距離當前時間為1小時(getdate()-0.0416) 1小時/24小時
(3):spid>51 表示是用戶的session,<51的表示是系統的進程
(4):loginname為jrzsfc 表示只刪除登陸帳號為jrzsfc的session
(5):表示只刪除使用查詢分析器連接到數據庫的session
大家可以根據自己的需求來進行篩選條件的設置
但是在網上看到,一般情況下,不建議對session進行手動kill,除非有死鎖,或我上面說到那情況(session數目達到自認為很高的數值)。
需要慎用
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16754036/viewspace-609393/ ,如需转载,请注明出处,否则将追究法律责任。