重啓SQL Server——老是好事?

在實際工做中,我常常看到——有時人們按期重啓SQL Server!咱們都但願接受,SQL Server的按期重啓並不真的是一個好主意。但在今天的文章裏,我想進一步討論下,當你按期重啓你的SQL Server時,有哪些反作用。sql

緩衝池(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的先前的生命週期裏,你已經啥也不知道了。ide

故障恢復(Crash Recovery)

當你重啓你的SQL Server,每一個數據庫會經歷故障恢復過程,在這裏SQL Server最終進行全部未提交事務的回滾,將數據庫恢復到一致的狀態。所以——做爲反作用——當你發起SQL Server重啓時,你會丟失還沒有提交的全部事務。你也要記住:在故障恢復過程當中,全部未提交的事務會直接回滾。函數

小結

我但願今天的文章會給你一些想法:爲何按期重啓SQL Server不是個好主意。當人們在一些特定狀況裏重啓SQL Server,但這不是人們按期重啓的意義,由於那是由於你有問題才重啓,對此,我沒問題。若是你有問題,你應該去調查它們,找出潛在的根源是什麼。性能

感謝關注!idea

原文連接:

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

相關文章
相關標籤/搜索