是否可以使用单个线程回滚事务?
我试图找到这个问题的答案,但我找不到提供参考的答案。我读到了回滚机制。见下文:
如果您回滚事务,引擎将开始向后扫描日志以查找您的事务完成的工作记录并撤消工作:当它找到从 A 到 B 的更新记录时,会将值更改回 A。插入将通过删除插入的行来撤消。通过插入该行将撤消删除。这在事务日志逻辑架构和预写事务日志中进行了描述。
这是高级解释,确切的内部细节是如何发生的,外行没有记录,也不受您的检查或更改。
回滚事务比执行它需要更长的时间。有几个原因。
现在的问题是,如何在各种场景中测试这些操作消耗了多少资源(单/多线程)?
据我所知,声称有一个线程。但是,我找不到任何证据来支持这种说法。
如果执行单线程操作,是否可以将行为更改为多线程?相反的呢?
回滚主要是单线程的(这就是为什么回滚可能需要比您正在回滚的事务更长的时间)。 https://www.brentozar.com/archive/2014/03/happens-issue-kill/
您无法“控制” SQL 将如何进行回滚。
引用 Brent Ozar 的话:“你要解决的问题是什么”。
SQL Server 2019 引入了加速数据库恢复 (ADR)。
https://learn.microsoft.com/en-us/sql/relational-databases/accelerated-database-recovery-concepts?view=sql-server-ver16
如果启用了 ADR,则数据库恢复期间的事务回滚是即时的,与事务处于活动状态的时间或已执行的更新次数无关。
所以有时候,如果出现紧急情况,最好重新启动服务器而不是等待回滚。
另外,如果我没记错的话,在数据库恢复阶段的 ADR 回滚之前是多线程的。
在 Sql server 中没有多线程概念,如其他高级语言(如 c#)的线程管理,并且回滚机制不受您的控制,它由内部 sql 引擎实现和管理。