34,838
社区成员




如截图,我的数据库里这几个进程一直在等待,时间超长,哪怕重启服务,也仅仅是清零重新等待而已。但目前使用是没有影响,我怕有什么隐患,现在数据库已经100G多了,万一崩了就麻烦了。
大神们帮忙看看这些进程正不正常?
根据您提供的截图内容,我发现了几个关键风险点,需要立即排查。以下是详细分析和解决方案:
异常等待时间
高风险等待类型(需重点排查):
进程ID | 任务名 | 等待类型 | 风险等级 |
---|---|---|---|
5 | TTL_CRT_AGRIT | ATL_TTL_RIST_WLIT | ⚠️⚠️⚠️ |
21 | PTS_FREALDCAFOR | PS_FREALDCAIT | ⚠️⚠️ |
13,20 | BRSR_TASK | MORER_TRAINSETTER | ⚠️⚠️⚠️ |
12 | BRSR_PYRT_NONLR | MORER_PYRTNONRLER | ⚠️⚠️ |
- | STORM_NONLLER | SOURCE WAXZIP | ⚠️⚠️⚠️⚠️(极高) |
阻塞特征:
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'; -- 替换为实际等待类型名
-- 查找长时间未提交事务
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小时的事务
终止恶性进程(临时救急)
KILL [进程ID]; -- 针对BRSR_TASK等长期占用进程
注意:先确认该进程是否关键业务
优化索引(针对ATL_TTL_RIST_WLIT
等待)
-- 检查缺失索引
SELECT * FROM sys.dm_db_missing_index_details
WHERE database_id = DB_ID('SIGFINDID');
事务拆分(预防SOURCE WAXZIP
等待)
BRSR_
系列任务拆分为小事务,每处理1000条记录提交一次资源限制(防雪崩)
-- 设置最大并行度
ALTER DATABASE SIGFINDID SET MAXDOP = 4;
-- 创建等待类型监控
CREATE EVENT SESSION [Long_Waits] ON SERVER
ADD EVENT sqlos.wait_info(
WHERE duration > 300000 -- 超过5分钟的等待
AND wait_type LIKE ('ATL_%|SOURCE%') -- 指定高危类型
);
EXEC sp_blitz @CheckServerInfo = 1; -- 使用Brent Ozar工具
📌 重要提醒:您的
SOURCE WAXZIP
等待类型极可能是自定义等待,需联系开发团队确认其含义(可能是资源池耗尽或外部依赖阻塞)。100G数据库已进入风险临界点,建议3天内完成上述排查。
请先执行第一步的阻塞链查询,将结果发我进一步分析。