sql server 自动kill 查询超过20分钟的语句

起源于同事的烂sql 容易拖垮 数据服务器,

周末没有人监控数据库,好几次导致主从数据库同步失败 ,不得不自动kill 烂sql

语句如下 :

-- 声明变量来存储超过20分钟的查询的会话ID

DECLARE @kill_sessions TABLE (session_id INT);

DECLARE @sql NVARCHAR(MAX) = '';

-- 终止找到的会话

DECLARE @session_id INT;

-- 插入超过20分钟的查询的会话ID到表中

INSERT INTO @kill_sessions

SELECT session_id

FROM sys.dm_exec_requests AS req

CROSS APPLY sys.dm_exec_sql_text(req.sql_handle) AS st

WHERE

-- 过滤出执行时间超过20分钟的查询

DATEDIFF(SECOND, req.start_time, GETDATE()) > 1200

AND st.text NOT LIKE '%--%kill_sessions%--%' and req.commAND='select';-- 避免终止这个脚本自身的会话

--select * from @kill_sessions

-- SELECT TOP 1 @session_id = session_id FROM @kill_sessions;

-- PRINT 'Killing session ID: ' + CAST(@session_id AS VARCHAR(10));

--DELETE FROM @kill_sessions WHERE session_id = @session_id;

--KILL @session_id;

WHILE EXISTS (SELECT 1 FROM @kill_sessions)

BEGIN

SELECT TOP 1 @session_id = session_id FROM @kill_sessions;

PRINT 'Killing session ID: ' + CAST(@session_id AS VARCHAR(10));

select @sql= @sql + 'KILL '+cast( @session_id as varchar(10))

EXEC sp_executesql @sql

DELETE FROM @kill_sessions WHERE session_id = @session_id;

END;

再在sql server 代理做定时任务 ,

相关推荐
Narutolxy7 分钟前
从 MySQL 5.7 到 8.0:理解 GROUP BY 的新规则与实战优化20241112
数据库
chusheng18408 分钟前
Python 正则表达式进阶用法:分组与引用详解
数据库·python·正则表达式
喵叔哟1 小时前
重构代码之移动字段
java·数据库·重构
念白4431 小时前
智能病历xml提取
数据库·sql·oracle
qingy_20461 小时前
【JavaWeb】JavaWeb入门之XML详解
数据库·oracle
大数据面试宝典1 小时前
用AI来写SQL:让ChatGPT成为你的数据库助手
数据库·人工智能·chatgpt
努力的小雨1 小时前
快速上手 KSQL:轻松与数据库交互的利器
数据库·经验分享
Gentle5861 小时前
labview中连接sql server数据库查询语句
数据库·labview
Gentle5861 小时前
labview用sql server数据库存取数据到一个单元格
数据库·labview
2401_857636391 小时前
共享汽车管理新纪元:SpringBoot框架应用
数据库·spring boot·汽车