Sql-Server

使用單執行緒/多執行緒回滾事務

  • June 11, 2022

是否可以使用單個執行緒回滾事務?

我試圖找到這個問題的答案,但我找不到提供參考的答案。我讀到了回滾機制。見下文:

SQL-Server 中事務回滾的機制是什麼?

如果您回滾事務,引擎將開始向後掃描日誌以查找您的事務完成的工作記錄並撤消工作:當它找到從 A 更新到 B 的記錄時,會將值更改回 A。插入將通過刪除插入的行來撤消。通過插入該行將​​撤消刪除。這在事務日誌邏輯架構和預寫事務日誌中進行了描述。

這是高級解釋,確切的內部細節是如何發生的,外行沒有記錄,也不受您的檢查或更改。

回滾事務比執行它需要更長的時間。有幾個原因。

現在的問題是,如何在各種場景中測試這些操作消耗了多少資源(單/多執行緒)?

據我所知,聲稱有一個執行緒。但是,我找不到任何證據來支持這種說法。

如果執行單執行緒操作,是否可以將行為更改為多執行緒?相反的呢?

回滾主要是單執行緒的(這就是為什麼回滾可能需要比您正在回滾的事務更長的時間)。 https://www.brentozar.com/archive/2014/03/happens-issue-kill/

您無法“控制” SQL 將如何進行回滾。

引用 Brent Ozar 的話:“你要解決的問題是什麼”。

SQL Server 2019 引入了加速數據庫恢復 (ADR)。

https://docs.microsoft.com/en-us/sql/relational-databases/accelerated-database-recovery-concepts?view=sql-server-ver16

如果啟用了 ADR,則數據庫恢復期間的事務回滾是即時的,與事務處於活動狀態的時間或已執行的更新次數無關。

所以有時候,如果出現緊急情況,最好重新啟動伺服器而不是等待回滾。

另外,如果我沒記錯的話,在數據庫恢復階段的 ADR 回滾之前是多執行緒的。

引用自:https://dba.stackexchange.com/questions/313213