排查buffer latch type4错误时为何无计划备份却有BACKUP DATABASE日志?
异常备份的核心识别特征
你日志里的备份记录有两个非常明确的非手动/非SQL内部作业的标识:
- 所有备份使用的设备类型是
VIRTUAL_DEVICE,不是普通备份会用到的磁盘、磁带实体设备,所有备份对应的虚拟设备GUID前缀完全一致:{D0FDCDF5-6122-409F-83E2-9FE1EB231826},后缀数字是不同数据库对应的备份通道 - 多条备份记录显示
processed 0 pages in 100+ seconds (0.000 MB/sec),这是通过虚拟设备接口备份的典型计数特征:这类通道由第三方程序对接SQL的备份API建立,SQL侧统计的传输速率是虚拟通道的本地值,不会显示真实备份的大小和实际吞吐。
这类备份完全绕开SQL Server的代理作业、维护计划调度,是由外部第三方程序主动连接SQL Server发起的,所以你在SQL代理作业脚本、维护计划配置里完全找不到对应项,不是SQL自身的系统自动备份。
和缓冲区闩锁类型4超时的关联
虚拟设备备份启动后,会在数据页读取阶段,对所有要读取的数据库页面加共享缓冲区闩锁。如果备份和业务任务抢占磁盘IO、备份端自身读写性能不足,就会直接造成闩锁等待队列堆积,触发缓冲区闩锁类型4的超时问题,和你观察到的“备份与超时任务同时间段运行”的现象完全匹配。
定位备份来源的步骤
- 首先在SQL Server上执行以下查询,直接关联当前发起虚拟设备备份的会话,拿到对应的客户端主机、程序名、登录账号:
SELECT s.session_id, s.login_name, s.host_name, s.program_name, sql_text.text FROM sys.dm_exec_sessions s CROSS APPLY sys.dm_exec_sql_text(s.most_recent_sql_handle) sql_text WHERE s.program_name LIKE 'SQLVDI%' -- 虚拟备份设备的固定程序名标识
- 排查服务器上安装的所有可发起数据库备份的组件,常见的触发源包括:系统VSS卷快照备份工具、企业统一部署的备份客户端、云盘同步类软件的卷备份功能,这些组件的定时策略完全独立于SQL Server调度体系,不会在SQL代理中留配置痕迹。
处理建议
- 先确认对应备份的所属方,调整备份的运行时段,避开业务高峰和闩锁超时的触发窗口,同时给备份进程配置IO优先级限制,降低对业务IO的抢占
- 无主的备份流程,可通过上述查询定位到对应软件后,直接卸载对应的服务器端组件,即可彻底停止这类异常备份
- 不要直接强制终止运行中的虚拟设备备份会话,避免导致第三方备份程序生成损坏的备份集,甚至触发数据库的异常恢复流程
内容的提问来源于stack exchange,提问作者GunnerFan420
相关产品推荐
相关产品推荐

