При работе со встроенной в MS SQL Server процедурой sp_who2 столкнулся с тем, что в ней нельзя производить сортировки и выборки, например, по DBName и/или HostName:
Это по понятным причинам создает сложности в поиске блокирующего или зависшего процесса. Для решения данной проблемы сделал процедуру с примером снятия блокировок по процессам
kill {SPID} (снимал процессы с высоким CPUTime, DiskIO):
--1. Создаем временную таблицу #sp_who2
CREATE TABLE #sp_who2
(
SPID INT,
Status VARCHAR(250) NULL,
Login SYSNAME NULL,
HostName SYSNAME NULL,
BlkBy SYSNAME NULL,
DBName SYSNAME NULL,
Command VARCHAR(250) NULL,
CPUTime INT NULL,
DiskIO INT NULL,
LastBatch VARCHAR(250) NULL,
ProgramName VARCHAR(250) NULL,
SPID2 INT NULL,
REQUESTID INT NULL
)
GO
--2. Вставляем данные из процедуры sp_who2 во временную таблицу #sp_who2
INSERT INTO #sp_who2 EXEC sp_who2
GO
--3. Делаем выборку данных по процессам из таблицы #sp_who2
SELECT * FROM #sp_who2
WHERE DBName = 'monitorPK'
AND HostName = 'DB02'
ORDER BY LastBatch desc
GO
--4. Снимаем блокировки по процессам (пример):
kill 70
kill 76
kill 91
kill 97
--5. Удаляем временную таблицу #sp_who2
DROP TABLE #sp_who2
GO