症状
假设你安装了 Microsoft SQL Server 2014、2016 或 2017。 你可能会遇到以下一个或多个问题:
- SQL Server 实例显示为无响应,并出现“Non-yielding Scheduler”错误。 你可能需要重启服务器才能恢复。
- 事务回滚可能需要很长时间才能完成。 在大多数情况下,重新启动实例将允许数据库恢复速度比回滚快得多。 请注意,回滚可能需要很长时间才能完成的原因有很多,有关在尝试重启之前监视回滚的详细信息,请参阅下面的“更多信息”部分。
- 你可能会看到旋转锁(如 SOS_OBJECT_STORE)的等待时间较长。
解决方法
此问题已在 SQL Server 的以下累积更新中修复:
关于 SQL Server 的累积更新:
SQL Server 的每个新累积更新都包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
SQL Server 的 Service Pack 信息
此更新已在以下 SQL Server 服务包中修复:
适用于 SQL Server 2014 的 Service Pack 3
关于 SQL Server 的 Service Pack:
Service Pack 具有累积性。 每个新 Service Pack 除了包含所有新修复程序外,还包含以前 Service Pack 中的所有修复程序。 建议应用最新的 Service Pack 和该 Service Pack 的最新累积更新。 在安装最新的 Service Pack 之前,不需要安装以前的 Service Pack。 使用以下文章中的表 1 查找有关最新 Service Pack 和最新累积更新的详细信息。
如何确定 SQL Server 及其组件的版本、版本类别和更新级别
回滚需要很长时间的原因有很多,例如事务运行时间过长、事务日志文件中有大量 VLF、I/O 速度慢等。为了验证本文中所述的问题是回滚速度缓慢的根本原因,我们建议使用以下技术来监视回滚操作的进度:
- 从 sys.dm_exec_requests 中,确定其命令设置为“KILLED/ROLLBACK”的session_id,并确保会话累积指示进度的 IO 和 CPU 时间。 如果 IO 未更改,则可能表明你遇到了本文中描述的问题。
- 用于使用如下查询确定回滚的当前状态的查询 sys.dm_tran_database_transactions :
注意
- SELECT getdate () as CurrentTime, database_transaction_next_undo_lsn,database_transaction_begin_lsn,t.transaction_id,database_transaction_begin_time,database_transaction_log_record_count,db_name (t.database_id)
- FROM sys.dm_tran_database_transactions t
- 加入sys.dm_exec_requests
ON t.transaction_id=s.transaction_id - WHERE t.database_id=db_id ('Database<Name') 且 s.session_id=<Session_id 执行回滚操作>
注意:
在上述查询中,
database_transaction_next_undo_lsn 是要撤消的下一条记录的 LSN。 database_transaction_begin_lsn 是事务日志中事务的开始记录的 LSN。
database_transaction_next_undo_lsn应随此查询的每个快照而减少。 当 database_transaction_next_undo_lsn 达到 database_transaction_begin_lsn 时,回滚将成功完成。
此处的目标是在预定间隔内拍摄上一个查询的几个快照,然后使用该间隔内 database_transaction_next_undo_lsn 处理的 LSN 的增量,并推断出所用的时间,以估计 database_transaction_next_undo_lsn 到达 database_transaction_begin_lsn所需的时间。
如果回滚在每个快照之间以合适的速度进行,我们建议允许回滚自行完成,而无需重新启动 SQL Server 实例。
有关长时间运行恢复的详细信息,请参阅以下文章:
- 了解 SQL Server 中的恢复性能
- SQL Server (2000、2005、2008) :恢复/回滚时间比预期时间长
- 日志文件结构如何影响数据库恢复时间
- 使用来自 DMV 的信息跟踪数据库恢复进度
状态
Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。
参考资料
了解 Microsoft 用于描述软件更新的术语。