ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 快速kill用戶session的存儲過程

快速kill用戶session的存儲過程

原创 Linux操作系统 作者:hwtong 时间:2009-07-17 00:56:31 0 删除 编辑

      有些時候,我們在企業管理器中發現或通過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博客 ” ,链接:http://blog.itpub.net/16754036/viewspace-609393/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-07-06

  • 博文量
    116
  • 访问量
    282371