Pass the database name as the parameter or '/all' for all dbs.
exec USP_KillSleepingProcesses 'WebDb' -- or '/all'
GO
ALTER PROCEDURE [Utils].[usp_KillSleepingProcesses] @database varchar(100) AS SET NOCOUNT ON -- Check validity of supplied database name IF DB_ID(@database) > 4 OR LOWER(LTRIM(RTRIM(@database))) = '/all' BEGIN -- variable declaration and initial values DECLARE @chv_killprocessestring VARCHAR(8000) DECLARE @ins_initialprocesses SMALLINT DECLARE @ins_remainingprocesses SMALLINT SET @ins_initialprocesses = 0 SET @ins_remainingprocesses = 0 SET @chv_killprocessestring = '' -- Fetch number of processes to kill IF LOWER(LTRIM(RTRIM(@database))) = '/all' BEGIN SELECT @ins_initialprocesses = COUNT(* ) FROM MASTER..SYSPROCESSES WHERE STATUS = 'sleeping' AND SPID <> @@spid -- avoid system processes AND spid > 50 END ELSE BEGIN SELECT @ins_initialprocesses = COUNT(* ) FROM MASTER..SYSPROCESSES WHERE DBID = DB_ID(@database) AND STATUS = 'sleeping' AND SPID <> @@spid -- avoid system processes AND spid > 50 END -- Check there are processes to kill IF @ins_initialprocesses > 0 BEGIN -- Build command string of processes to kill > IF LOWER(LTRIM(RTRIM(@database))) = '/all' BEGIN SELECT @chv_killprocessestring = COALESCE(@chv_killprocessestring,',') + 'KILL ' + CONVERT(VARCHAR,SPID) + '; ' FROM MASTER..SYSPROCESSES WHERE STATUS = 'sleeping' AND SPID <> @@spid -- avoid system processes AND spid > 50 END ELSE BEGIN SELECT @chv_killprocessestring = COALESCE(@chv_killprocessestring,',') + 'KILL ' + CONVERT(VARCHAR,SPID) + '; ' FROM MASTER..SYSPROCESSES WHERE DBID = DB_ID(@database) AND STATUS = 'sleeping' AND SPID <> @@spid -- avoid system processes AND spid > 50 END -- Kill processes (run command created above) > EXEC( @chv_killprocessestring) -- Fetch number of processes remaining > IF LOWER(LTRIM(RTRIM(@database))) = '/all' BEGIN SELECT @ins_remainingprocesses = COUNT(* ) FROM MASTER..SYSPROCESSES WHERE STATUS = 'sleeping' AND SPID <> @@spid -- avoid system processes AND spid > 50 END ELSE BEGIN SELECT @ins_remainingprocesses = COUNT(* ) FROM MASTER..SYSPROCESSES WHERE DBID = DB_ID(@database) AND STATUS = 'sleeping' AND SPID <> @@spid -- avoid system processes AND spid > 50 END IF @ins_remainingprocesses = 0 BEGIN -- Report on processes killed if killed them all > PRINT LTRIM(RTRIM(UPPER(@database))) + ' - Killed ' + RTRIM(CONVERT(VARCHAR(10),@ins_initialprocesses)) + ' process(s)' END IF @ins_remainingprocesses <> 0 BEGIN -- Report on processes remaining if could not end them all > PRINT LTRIM(RTRIM(UPPER(@database))) + ' - Killed ' + RTRIM(CONVERT(VARCHAR(10),@ins_initialprocesses - @ins_remainingprocesses)) + ' process(s), ' + RTRIM(CONVERT(VARCHAR(10),@ins_remainingprocesses)) + ' processes remaining.' END END IF @ins_initialprocesses = 0 BEGIN -- Report there are no processes for that DB > PRINT @database + ' - No processes to kill' END END ELSE BEGIN -- Supplied database name not valid or was a system db, hence report that > PRINT 'Invalid Database name or System Database supplied' END GO
No comments:
Post a Comment