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

相关推荐
betazhou34 分钟前
MySQL ROUTER安装部署
android·数据库·mysql·adb·mgr·mysql router
中东大鹅1 小时前
Mybatis Plus 多数据源
java·数据库·spring boot·后端·mybatis
一枚小小程序员哈2 小时前
springboot基于Java与MySQL库的健身俱乐部管理系统设计与实现
数据库·spring boot·mysql·spring·java-ee·intellij-idea
Antonio9152 小时前
【Redis】 Redis 基础命令和原理
数据库·redis·缓存
非优秀程序员2 小时前
未来的编程将会是什么样子?从面向对象转为面向业务数据!!
数据库·架构
老华带你飞3 小时前
口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
java·数据库·微信小程序·小程序·论文·毕设·口腔小程序
hqxstudying3 小时前
J2EE模式---服务层模式
java·数据库·后端·spring·oracle·java-ee
Yu_Lijing3 小时前
MySQL进阶学习与初阶复习第四天
数据库·学习·mysql
大熊程序猿3 小时前
net8.0一键创建支持(Orm-Sqlite-MySql-SqlServer)
数据库·mysql·sqlite
-SGlow-12 小时前
MySQL相关概念和易错知识点(2)(表结构的操作、数据类型、约束)
linux·运维·服务器·数据库·mysql