Sql-Server

停止 Microsoft SQL Server 實例時執行查詢會發生什麼情況?

  • March 18, 2016

考慮到一個 MS SQL Server 實例正在執行一個長時間執行的查詢,該服務通過 services.msc 停止,或者 - 正如它實際發生的那樣 - 由 UPS 觸發的系統關閉,因為伺服器位於經歷滾動停電的發展中國家。

發生這種情況時,服務會在一段時間內保持“停止”狀態,並且該程序的 CPU 和磁碟 I/O 仍然很高。

正在執行的查詢會發生什麼情況?是否允許它們在服務進入“停止”狀態之前完成,或者它們是否被取消並回滾?

理想情況下,我正在尋找權威來源(Microsoft 文件)作為答案,因為我懷疑不同的行為取決於我不知道的因素。即有時我們看到查詢回滾,有時我們看到它們完成。也許服務會呼叫事務處理的距離以及回滾或完成是否更快。

如果它有所作為,那就是 SQL 2012。

提前致謝!

這取決於您是否使用NOWAIT 關閉伺服器。

來自MSDN

除非使用 WITH NOWAIT 選項,否則 SHUTDOWN 會通過以下方式關閉 SQL Server:

  • 禁用登錄(sysadmin 和 serveradmin 固定伺服器角色的成員除外)。
  • 等待目前執行的 Transact-SQL 語句或儲存過程完成。要顯示所有活動程序和鎖的列表,請分別執行 sp_who 和 sp_lock。
  • 在每個數據庫中插入一個檢查點。

使用 SHUTDOWN 語句可以最大限度地減少 sysadmin 固定伺服器角色成員重新啟動 SQL Server 時所需的自動恢復工作量。

至於立即關閉:

選修的。關閉 SQL Server 而不在每個數據庫中執行檢查點。SQL Server 在嘗試終止所有使用者程序後退出。當伺服器重新啟動時,未完成的事務會發生回滾操作。

預設是等待目前正在執行的事務完成(NOWAIT 是可選的)。

引用自:https://serverfault.com/questions/764603