天天看點

重新開機SQL Server——總是好事?

在實際工作中,我經常看到——有時人們定期重新開機SQL Server!我們都希望接受,SQL Server的定期重新開機并不真的是一個好主意。但在今天的文章裡,我想進一步讨論下,當你定期重新開機你的SQL Server時,有哪些副作用。

重新開機SQL Server——總是好事?

緩沖池(Buffer Pool)

一旦你重新開機你的SQL Server,你會丢失緩沖池的所有内容,這是SQL Server儲存來自存儲子系統的資料庫頁。作為副作用,在重新開機後,你的查詢會簡單的更慢,因為SQL Server需要進行很多的實體I/O讀,從存儲子系統請求回資料到緩沖池。

計劃緩存(Plan Cache)

SQL Server重新開機的另一個非常重要的副作用時,你丢失所有來自計劃緩存,編譯好的執行計劃。對于每個送出到資料庫的每個查詢,SQL Server現在必須再次編譯實體執行計劃——而且這會花點時間。當你有一些不穩定的執行計劃,這會更糟,SQL Server會生成和先前不一樣的執行計劃。在這個情況下,你的整個性能會慘遭傷害,因為沒有足夠的執行計劃被緩存,然後被盲目重用——反複如此……

動态管理視圖和函數(DMVs/DMFs)

在上一篇文章裡,SQL Server存儲各個動态管理視圖和函數的整個資料的地方:它直接存儲在sqlservr.exe程序空間裡。那麼當你重新開機SQL Server時,sqlservr.exe程序被銷毀并重新開機。是以,通過各個動态管理視圖和函數通路的資料都不可用。從性能故障排除角度來說,這非常不好,因為重新開機後,對于SQL Server的先前的生命周期裡,你已經啥也不知道了。

故障恢複(Crash Recovery)

當你重新開機你的SQL Server,每個資料庫會經曆故障恢複過程,在這裡SQL Server最終進行所有未送出事務的復原,将資料庫恢複到一緻的狀态。是以——作為副作用——當你發起SQL Server重新開機時,你會丢失尚未送出的所有事務。你也要記住:在故障恢複過程中,所有未送出的事務會直接復原。

小結

我希望今天的文章會給你一些想法:為什麼定期重新開機SQL Server不是個好主意。當人們在一些特定情況裡重新開機SQL Server,但這不是人們定期重新開機的意義,因為那是因為你有問題才重新開機,對此,我沒問題。如果你有問題,你應該去調查它們,找出潛在的根源是什麼。

感謝關注!

原文連結:

https://www.sqlpassion.at/archive/2016/08/08/restarting-sql-server-always-a-good-idea

注:此文章為

WoodyTu

學習MS SQL技術,收集整理相關文檔撰寫,歡迎轉載,請在文章頁面明顯位置給出此文連結!

若您覺得這篇文章還不錯請點選下右下角的推薦,有了您的支援才能激發作者更大的寫作熱情,非常感謝!

繼續閱讀