如何正確重啟 MS SQL 伺服器,這樣做的最佳做法是什麼?
我對數據庫管理很陌生。
重新啟動 SQL Server 時出現問題,其中一個數據庫進入
Recovery
模式並在 30 分鐘內自動修復數據庫。我不知道為什麼會這樣。這是我所做的,但似乎還不夠:
我有 SQL Server Microsoft SQL Server 2014 (SP2-GDR)。
- 安裝 Windows 更新
- SQL:收縮所有數據庫和日誌文件
- SQL: 殺死所有執行時 Brocker`oв
- SQL:停止的 SQL 代理
- SQL:停止的 SQL 伺服器
- 重新啟動 Windows 伺服器。
更新 :
- 數據庫有多大?
4.5 GB + 400MB 日誌
2)你為什麼要重啟實例?安裝 Windows 更新,以及連接到該 SQL 伺服器的應用程序會隨著時間的推移變得越來越慢。我們通常每月重新啟動一次伺服器。啟動需要 15 分鐘,但這次需要 45 分鐘(在恢復數據庫時)。
- 這是伺服器還是偽伺服器(執行伺服器作業系統的桌面)?
它的虛擬機。在伺服器硬體上執行。
- 伺服器是為應用程序還是後台程序配置的?
伺服器執行 SQL 和其他後台應用程序/Web 服務
- 伺服器有多少記憶體?多少個處理器?
16 GB 記憶體 4 個 CPU
- SAN 儲存還是本地磁碟?….您提供的詳細資訊越多,我們就能越好地為您提供充分的答案。
我們將託管作為服務購買,無法說出確切的硬體架構。但是我們有 SSD 磁碟(儲存 SQL DB 的地方)。
- 30 分鐘可能是 SQL Server 所能做的最好的。這取決於很多因素。
它通常需要長達 15 分鐘。我想我錯過了以正確方式關閉所有數據庫所需的一些步驟。
幾乎可以肯定,有問題的數據庫的日誌文件中有大量虛擬日誌文件 (VLF)。關閉並重新啟動 SQL Server 會導致恢復過程在實例上的所有數據庫上執行。對於具有大量 VLF 的數據庫,此過程可能非常緩慢。
您可以通過以下 DBCC 命令查看 VLF:
DBCC LOGINFO;
每行代表一個 VLF。你有多少?我打賭你有大量的 VLF(行)。
您可以重建日誌文件以刪除多餘的 VLF;只需縮小日誌文件,然後將其以合理的增量增長到先前的大小。
我寫了一篇部落格文章,展示瞭如何在此處執行此操作。
如果您擔心關閉 SQL Server 實例而不導致恢復執行,您可以在關閉 SQL Server 之前發出此命令:
shutdown;
但是,如果存在現有連接,該命令將等待,直到所有連接都關閉。有關更多詳細資訊,請參閱Microsoft 文件。
SHUTDOWN WITH NOWAIT;
將導致 SQL Server 立即關閉,而無需等待現有連接關閉,但是這將在下次啟動時觸發恢復,這正是您通過控制面板關閉實例或通過關閉伺服器本身時發生的情況。
確保在關閉數據庫之前停止使用它。
這樣,如果數據庫以不正確的方式關閉,它將大大減少啟動時回滾/轉發的事務量。
通常,這是通過在關閉數據庫本身之前關閉使用數據庫的應用程序來完成的。
完成後,嘗試先關閉實例
shutdown;
。如果它不起作用,那麼您的實例上可能仍有一些會話掛起,要麼殺死它們,要麼shutdown with nowait;
導致實例在啟動時恢復。如果要回滾/轉發的事務量不高,並且您在啟動時仍然會遇到很長的恢復時間。
這可能是由於大量虛擬日誌文件所致。
您可以通過縮小事務日誌文件並將其設置回適當的大小來減少這些,然後對其進行參數化,使其每次增加足夠大的大小,而不是小部分。SQL Server 2019:
如果您使用的是 SQL Server 2019,您還可以考慮重新設計 SQL 數據庫引擎恢復過程以使用 ADR(加速數據庫恢復),如果以前的解決方案都不起作用。
參考 :