SQL Server的连接过多及释放 定期清理长时间没动作的SPID来避免问题发生的SQL脚本: USE Master GO SET NOCOUNT ON DECLARE @DBID int DECLARE @CMD1 varchar(8000) DECLARE @spidNumber int DECLARE @SpidListLoop int DECLARE @SpidListTable table (UIDSpidList int IDENTITY (1,1),SpidNumber int) INSERT INTO @SpidListTable (SpidNumber) SELECT spid FROM Master.dbo.sysprocesses WHERE DBID NOT IN (1,2,3,4) -- Master, Tempdb, Model, MSDB AND spid > 50 -- 代表非系统SPID AND spid<> @@spid -- 代表非运行这个脚本的SPID本身 AND status = 'sleeping' -- SPID在sleep AND DATEDIFF(minute, last_batch, getdate()) >120 -- 该SPID从上一个语句执行以后已经空闲了2个小时。 这个时间可以有唐先生根据实际情况做调整。 AND programname like ‘MS SQLEM%’ --通过programname来区分是否来自特定应用程序的连接。 这个如果不确定,可以删掉这一行。 ORDER BY spid DESC SELECT @SpidListLoop = MAX(UIDSpidList) FROM @SpidListTable WHILE @SpidListLoop > 0 BEGIN SELECT @spidNumber = spidnumber FROM @spidListTable WHERE UIDspidList = @SpidListLoop SELECT @CMD1 = 'KILL ' + CAST(@spidNumber AS varchar(5)) EXEC (@CMD1) SELECT @SpidListLoop = @SpidListLoop - 1 END SET NOCOUNT OFF GO
|