Sql Server 清理长期存在的无用会话

DECLARE @killCommand NVARCHAR(1000);
DECLARE @sessionID INT;

-- 定义超时阈值(以分钟为单位)
DECLARE @idleTimeThreshold INT = 30;

-- 获取超过超时阈值的会话ID列表
SELECT 
    @sessionID = session_id
FROM 
    sys.dm_exec_sessions
WHERE 
    status = 'sleeping' -- 空闲状态
    AND last_request_end_time <= DATEADD(minute, -@idleTimeThreshold, GETDATE());

WHILE @sessionID IS NOT NULL
BEGIN
    SET @killCommand = N'KILL ' + CAST(@sessionID AS NVARCHAR(10));

    -- 执行KILL命令
    EXEC (@killCommand);

    -- 获取下一个空闲会话ID
    SELECT 
        @sessionID = session_id
    FROM 
        sys.dm_exec_sessions
    WHERE 
        status = 'sleeping' 
        AND session_id > @sessionID
        AND last_request_end_time <= DATEADD(minute, -@idleTimeThreshold, GETDATE())
    ORDER BY 
        session_id ASC;

END
posted @   Nine4酷  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示