Sql-Server

將緩衝池轉儲到磁碟,以便在重新啟動後載入

  • March 4, 2018

有沒有辦法保留緩衝池記憶體,以便在重新啟動後可以載入?我的研究表明其他數據庫伺服器可以做到這一點,但 SQL Server 不是其中之一。我正在尋找在維護重啟後最大化伺服器性能的方法。

不,沒有辦法恢復緩衝池。有些人會建議通過從所有表中選擇所有行來預先填充它,但考慮到系統使用所有表中的所有行是多麼罕見(除了其他原因,它不會執行這樣的操作被感知到)去做)。

我什至不確定這在概念上是否有意義,這應該是一件事情。這裡的實際收益是多少?節省將這些數據頁從磁碟讀入記憶體所需的時間?如果緩衝池中的頁面被保存到一個文件中以在啟動時重新載入,那麼將這些數據頁面載入到緩衝池中仍然需要相同(或幾乎相同)的時間,只是從不同的文件。或者,也許您不希望應用程序頁面的初始反映必須載入數據頁的響應時間?您的系統載入頁面需要多長時間?一個人為那個特定的結果集額外等待了 1 秒(因為在那之後,這些頁面在記憶體中供後續查詢使用,對嗎?)幾乎不會被注意到,當後續頁面載入花費更少的時間時,他們也不會記住這一點。但是,如果這是一個基於 Web 的應用程序,那麼是否可以說任何延遲都是 DB 而不是應用伺服器或客戶端電腦和應用伺服器之間的某些路由段的故障?

不要擔心數據頁面的初始載入時間。任何改進初始載入時間的領域都將是更好的數據建模和索引結構(即確保從磁碟讀取頁面盡可能高效)。相反,請擔心一旦載入數據後重複請求會拖累性能的區域。

此外,誰能說您想要緩衝池中的所有頁面?最近執行了多少臨時支持查詢,這些查詢仍在記憶體中,可能在 6 個月左右不會再次查看?只需讓 SQL Server 負責管理記憶體,因為當使用者在重新啟動後開始訪問系統時載入的頁面必然是應該存在的頁面。

此外,鑑於 SQL Server 可以隨時從記憶體中逐出頁面(如果它覺得其他項目需要更多記憶體),那麼您可能會載入一堆稍後會被逐出的頁面。

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