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 代理做定时任务 ,

相关推荐
薛定谔的算法7 小时前
phoneGPT:构建专业领域的检索增强型智能问答系统
前端·数据库·后端
Databend8 小时前
Databend 亮相 RustChinaConf 2025,分享基于 Rust 构建商业化数仓平台的探索
数据库
得物技术9 小时前
破解gh-ost变更导致MySQL表膨胀之谜|得物技术
数据库·后端·mysql
Raymond运维13 小时前
MariaDB源码编译安装(二)
运维·数据库·mariadb
沢田纲吉14 小时前
🗄️ MySQL 表操作全面指南
数据库·后端·mysql
RestCloud1 天前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud1 天前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence1 天前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
DemonAvenger2 天前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化
AAA修煤气灶刘哥2 天前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql