Sql-Server

最大 SQL Server 記憶體配置限制是多少?

  • March 10, 2022

假設我將 SQL Server 記憶體限制為 100 GB。

這是否僅將緩衝區限制為 100 GB,或者它是否還限制了查詢記憶體授予?

在 SQL Server 2012 及更高版本上,max server memory幾乎限制了 SQL Server 送出的所有記憶體。緩衝池只是一個記憶體,它與其他記憶體(如記憶體授予和計劃記憶體)競爭該限制內的記憶體。

如果設置max server memory為 100GB,則會限制所有潛在消費者可用的總記憶體。所以,不,這不僅僅是對緩衝池的限制,它會更普遍地限制記憶體使用。

然而,沒有什麼是簡單的。如果多頁分配需要目前不可用的連續記憶體, SQL Server 可能會在max server memory短時間內超過限制(過度使用)。

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

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

請參閱文件中的記憶體管理架構指南伺服器記憶體配置選項。後者包含以下建議:

使用max_server_memory來保證作業系統不會遇到有害的記憶體壓力。要設置最大伺服器記憶體配置,請監視 SQL Server 程序的總體消耗以確定記憶體要求。對於初始配置或沒有機會隨時間收集 SQL Server 程序記憶體使用情況,請使用以下通用最佳實踐方法為單個實​​例配置max_server_memory :

  • 從總 OS 記憶體中,減去最大伺服器記憶體控制之外的潛在 SQL Server 執行緒記憶體分配的等價物,它由堆棧大小1 * 計算的最大工作執行緒2組成。
  • 然後為最大伺服器記憶體控制之外的其他記憶體分配減去 25% ,例如備份緩衝區、擴展儲存過程 DLL、使用自動化過程(sp_OA 呼叫)創建的對像以及來自連結伺服器提供程序的分配。這是一個通用的近似值,里程可能會有所不同。
  • 剩下的應該是單個實例設置的 max_server_memory 設置。

1有關每個架構的執行緒堆棧大小的資訊,請參閱記憶體管理架構指南

2請參閱有關如何配置最大工作執行緒伺服器配置選項的文件頁面,了解有關為目前主機中給定數量的關聯 CPU 計算的預設工作執行緒的資訊。

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