在 SQL Server 中保留預設的最大記憶體 2147483647 MB 值,這是一種不好的做法嗎?
基於那個msdn頁面: 伺服器記憶體設置保持SQL-Servers min和max memory的預設值以保持動態是一個很好的做法……
根據我通過教程學到的知識,您應該始終定義一個最大值,大約是最小值,我沒聽過太多。我正在使用簡單的舊 perfmon 監視我的頁面文件,我意識到很少發生磁碟交換,一旦它幾乎導致伺服器崩潰。
這可能與 SQL Server 中的預設最大記憶體設置有關嗎?數據庫大約 150 GB,記憶體為 48 GB,該機器上沒有執行其他應用程序。
另外,為什麼你應該有一個最小值?我知道太低的值會阻止 SQL-Server 啟動,而且我知道 SQL-Server 將內容保存在記憶體中,因此不會嘗試釋放它的記憶體。
我正在使用 SQL-Server 2012,提前謝謝你!
一些細節來澄清事情
基於該 msdn 頁面:伺服器記憶體設置,保持 SQL-Server 最小和最大記憶體的預設值以保持動態是一個很好的做法。
不,它不是寫的,
good practice
它說的是它recommended
,我確信線上 MS 書籍不能寫得那麼好,這是因為環境各不相同,對一種環境有益的東西可能不適合其他環境。儘管管理有效,但對大量消耗的東西進行限制是最好的。我認為在系統上定義最大伺服器記憶體是一個很好的做法,因為它會限制緩衝池並告訴 SQL Server 緩衝池可以增長多少最大值,儘管 SQL Server 可以在緩衝池/最大伺服器記憶體設置之外消耗記憶體,如果它大量使用第三方 DLL 的擴展儲存過程和連結伺服器。Windows 使用頁面文件來保存在物理記憶體中交換進出的臨時數據,以提供更大的虛擬記憶體集。頁面文件很大程度上取決於作業系統送出的記憶體量,並根據設置的最小值和最大值進行相應的更改。如果要監視頁面文件,則必須依賴 perfmon 計數器。請閱讀此MSDN 部落格
Memory: Committed Bytes – 已送出的虛擬記憶體的字節數。這不一定代表頁面文件的使用 - 它代表如果程序完全非駐留將使用的頁面文件空間量
記憶體:送出限制——無需擴展頁面文件即可送出的虛擬記憶體字節數。
分頁文件:% Usage – 送出的分頁文件的百分比
分頁文件:% Usage Peak – 送出的分頁文件的最高百分比
另外,為什麼你應該有一個最小值?我知道太低的值會阻止 SQL-Server 啟動,而且我知道 SQL-Server 將內容保存在記憶體中,因此不會嘗試釋放它的記憶體。
Min Server memory 是 SQL Server 記憶體管理器可用於 SQL Server 實例的最小記憶體量。當視窗面臨記憶體壓力時,這將進入活動畫面,在這種情況下,它將引發低記憶體通知標誌。SQLOS 將響應它,它會要求 SQL Server 削減其記憶體消耗並釋放其記憶體,然後 SQL Server 不會搶先削減直到其最小伺服器記憶體值。如果壓力太大,SQL Server 可能無法快速做出反應,然後 SQL Server 程序將被調出。請記住 min server memory 並不是說當 SQL Server 啟動時,如果不需要,它會最少佔用這麼多記憶體,SQL Server 啟動時消耗的記憶體將比 min server memory 少得多。
Min server memory 的其他用途是如果您不希望 SQL Server 由於某些行為不端的作業系統/第三方驅動程序而被分頁到磁碟。您將 max server 和 min server memory 設置為幾乎相同的值,並為 SQL Server 服務帳戶 Locked pages in memory 特權,在這種情況下,即使作業系統面臨記憶體緊縮,SQL Server 也會最大程度降低到 min server 並且如果作業系統記憶體緊縮仍然存在作業系統程序將被調出並且會變得非常緩慢。但這是一件壞事,我不推薦