You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SQL Server Agent中执行SQL终止特定主机超时进程的问题

解决SQL Server进程筛选与终止的问题

原SQL语句的问题点

  • 等待时间筛选逻辑错误:使用wait_time = '120000'是精确匹配等于2分钟的进程,而需求是超过2分钟;同时wait_time是int类型,不应使用字符串值匹配,需用数值比较。
  • Kill命令格式错误:重复拼接了session_id,会生成类似kill 5151的无效命令,正确格式应为kill 51。

修正后的SQL脚本

先正确筛选目标进程并生成有效Kill命令,再通过动态SQL执行:

DECLARE @KillCmd NVARCHAR(MAX) = ''

SELECT @KillCmd += 'KILL ' + CAST(session_id AS VARCHAR(20)) + ';'
FROM sys.dm_exec_sessions
WHERE host_name = 'TS2012'
  AND wait_time > 120000 -- 筛选等待时间超过2分钟(120000毫秒)的进程
  AND session_id <> @@SPID -- 排除当前执行脚本的会话,避免误杀自身

-- 仅当存在需要终止的进程时执行命令
IF @KillCmd <> ''
EXEC sp_executesql @KillCmd

SQL Server Agent作业配置注意事项

SQL Server Agent的作业计划默认最小执行间隔为1分钟,若要实现每隔10秒执行一次,可在作业步骤中加入循环逻辑:

WHILE 1=1
BEGIN
    DECLARE @KillCmd NVARCHAR(MAX) = ''
    SELECT @KillCmd += 'KILL ' + CAST(session_id AS VARCHAR(20)) + ';'
    FROM sys.dm_exec_sessions
    WHERE host_name = 'TS2012'
      AND wait_time > 120000
      AND session_id <> @@SPID

    IF @KillCmd <> ''
    EXEC sp_executesql @KillCmd

    WAITFOR DELAY '00:00:10' -- 等待10秒后再次执行
END

注意:这种循环方式会让作业步骤持续运行,需手动在SQL Server Agent中终止作业才能停止。

内容的提问来源于stack exchange,提问作者Frizosty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:17:14