Sql-Server

目標/總記憶體高於 max_server_memory

  • May 3, 2019

max_server_memory在生產 SQL Server 上將設置配置為 141 GB,目標/總伺服器記憶體為 144 GB。

我認為max_server_memory代表我願意讓 SQL Server 引擎使用多少記憶體,如果是,為什麼它使用更多?

執行 SQL Server 2012 SP3,安裝了 160 GB 記憶體的物理機,盒子上沒有執行其他實例,但我們也在執行集成服務。

我們有 75 個使用者數據庫,總大小為 928 GB。我不確定是否正在使用列儲存,或者我如何檢查它。這是一個供應商應用程序。

現在目標記憶體 = 144,384,008,總計 = 144,378,261。

自美國東部標準時間昨晚 2019-05-01 22:20:21.097 以來,該實例已啟動。我們進行了一些基礎架構維護,需要停止實例。但是我已經註意到很長一段時間以來,總/目標始終為 144,而最大值始終設置為 141。週一至週五主要工作時間的 PLE 平均約為 0.5 到 1 小時,有時會跳至 2 小時.

最大伺服器記憶體設置並不代表您願意讓 SQL 引擎使用多少記憶體。從記憶體管理架構指南

從 SQL Server 2012 (11.x) 開始,SQL Server 分配的記憶體可能比最大伺服器記憶體設置中指定的值多。當總伺服器記憶體 (KB) 值已達到目標伺服器記憶體 (KB) 設置(由最大伺服器記憶體指定)時,可能會發生此行為。如果由於記憶體碎片導致連續空閒記憶體不足以滿足多頁記憶體請求(超過 8 KB)的需求,SQL Server 可以執行過度承諾而不是拒絕記憶體請求。

執行此分配後,資源監視器後台任務開始向所有記憶體使用者發出信號以釋放分配的記憶體,並嘗試使總伺服器記憶體 (KB) 值低於目標伺服器記憶體 (KB) 規範。因此,SQL Server 記憶體使用可能會短暫超過最大伺服器記憶體設置。在這種情況下,總伺服器記憶體 (KB) 性能計數器讀數將超過最大伺服器記憶體和目標伺服器記憶體 (KB) 設置。

在以下操作期間通常會觀察到此行為:

  • 大型列儲存索引查詢。
  • 列儲存索引(重新)建構,它使用大量記憶體來執行雜湊和排序操作。
  • 需要大記憶體緩衝區的備份操作。
  • 跟踪必須儲存大量輸入參數的操作。

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