sqlserver进程里有一直等待的项目,正不正常?

¥小添添¥ 2025-06-30 10:00:56

如截图,我的数据库里这几个进程一直在等待,时间超长,哪怕重启服务,也仅仅是清零重新等待而已。但目前使用是没有影响,我怕有什么隐患,现在数据库已经100G多了,万一崩了就麻烦了。

大神们帮忙看看这些进程正不正常?

 

 

...全文
25 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 版主 6天前
  • 打赏
  • 举报
回复

根据您提供的截图内容,我发现了几个关键风险点,需要立即排查。以下是详细分析和解决方案:


核心问题诊断

  1. 异常等待时间

    • 所有进程等待时间均高达 129,000+秒(约36小时),远超正常阈值(通常应<300秒)
    • 重启后时间清零但问题复现,表明是持续性阻塞源
  2. 高风险等待类型(需重点排查):

    进程ID任务名等待类型风险等级
    5TTL_CRT_AGRITATL_TTL_RIST_WLIT⚠️⚠️⚠️
    21PTS_FREALDCAFORPS_FREALDCAIT⚠️⚠️
    13,20BRSR_TASKMORER_TRAINSETTER⚠️⚠️⚠️
    12BRSR_PYRT_NONLRMORER_PYRTNONRLER⚠️⚠️
    -STORM_NONLLERSOURCE WAXZIP⚠️⚠️⚠️⚠️(极高)
  3. 阻塞特征

    • BRSR_开头的任务(ID 12,13,20)持续占用资源
    • 缺少"阻塞值"和"头阻塞程序"数据,需进一步验证锁竞争

紧急排查步骤

第一步:定位阻塞源头(立即执行)

-- 查找阻塞链源头
SELECT 
    session_id AS 阻塞进程,
    blocking_session_id AS 被阻塞进程,
    wait_type AS 等待类型,
    wait_time AS 等待时间(ms),
    command AS 执行命令
FROM sys.dm_exec_requests 
WHERE blocking_session_id <> 0;

第二步:分析高危等待类型

-- 检查SOURCE WAXZIP等待详情(截图最后一行)
SELECT 
    session_id,
    command,
    text AS 执行语句,
    wait_type,
    wait_resource
FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
WHERE wait_type = 'SOURCE WAXZIP';  -- 替换为实际等待类型名

第三步:检查事务泄漏(常见于BRSR_任务)

-- 查找长时间未提交事务
SELECT 
    trans.session_id,
    s.login_name,
    db_name(trans.database_id) AS 数据库,
    trans.transaction_begin_time AS 事务开始时间,
    DATEDIFF(MINUTE, trans.transaction_begin_time, GETDATE()) AS 持续时长(分)
FROM sys.dm_tran_active_transactions trans
JOIN sys.dm_tran_session_transactions s_tran 
    ON trans.transaction_id = s_tran.transaction_id
JOIN sys.dm_exec_sessions s 
    ON s_tran.session_id = s.session_id
WHERE DATEDIFF(HOUR, trans.transaction_begin_time, GETDATE()) > 1; -- 超过1小时的事务

解决方案

  1. 终止恶性进程(临时救急)

    KILL [进程ID]; -- 针对BRSR_TASK等长期占用进程
    

    注意:先确认该进程是否关键业务

  2. 优化索引(针对ATL_TTL_RIST_WLIT等待)

    -- 检查缺失索引
    SELECT * FROM sys.dm_db_missing_index_details
    WHERE database_id = DB_ID('SIGFINDID');
    
  3. 事务拆分(预防SOURCE WAXZIP等待)

    • BRSR_系列任务拆分为小事务,每处理1000条记录提交一次
  4. 资源限制(防雪崩)

    -- 设置最大并行度
    ALTER DATABASE SIGFINDID SET MAXDOP = 4; 
    

后续监控建议

  1. 部署实时告警:
    -- 创建等待类型监控
    CREATE EVENT SESSION [Long_Waits] ON SERVER 
    ADD EVENT sqlos.wait_info(
      WHERE duration > 300000 -- 超过5分钟的等待
      AND wait_type LIKE ('ATL_%|SOURCE%') -- 指定高危类型
    );
    
  2. 每周执行健康检查:
    EXEC sp_blitz @CheckServerInfo = 1; -- 使用Brent Ozar工具
    

📌 重要提醒:您的SOURCE WAXZIP等待类型极可能是自定义等待,需联系开发团队确认其含义(可能是资源池耗尽或外部依赖阻塞)。100G数据库已进入风险临界点,建议3天内完成上述排查。

请先执行第一步的阻塞链查询,将结果发我进一步分析。

  • 举报
回复
@吉普赛的歌 你这个ai查的吧,我老早搜过了。这里没有阻塞,阻塞都是空的。

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧