Sql-Server

為什麼 SQL Server 不使用 Max Server Memory 設置?

  • December 6, 2013

我有一台具有以下功能的 SQL Server 機器:

  • Windows 2003 企業版 SP2(32 位)
  • SQL Server 2005(32 位)
  • 12GB 記憶體
  • /PAE 開關在 boot.ini 中設置
  • 6 個 SQL 實例,全部啟用 AWE
  • 機器上沒有執行其他應用程序。

我將最大伺服器記憶體使用量設置為我認為可以接受的值(大約 10GB 組合,為 Windows 留下 2GB)。我正在使用以下查詢來顯示緩衝池和非緩衝池的總 RAM 使用情況。我還展示了 MAX SERVER MEMORY 設置。每個實例上的數據庫都比分配的 RAM 大得多,儘管有幾個實例比其他實例使用得更多。實際使用的記憶體不應該總是非常接近 MAX SERVER MEMORY 設置嗎?我發現了一個讓我好奇的差距。

DECLARE @TotalRam as decimal (10,2)

--NON-BUFFER POOL
SET @TotalRam = (SELECT sum(pages_allocated_count)/128.0 [Non-Buffer (MB)]
from sys.dm_os_memory_cache_entries
where pages_allocated_count > 0)

--BUFFER POOL
SET @TotalRam = @TotalRam + (
SELECT CAST(COUNT(*) * 8/1024.0 AS DECIMAL (10,2))  AS [Buffer Pool (MB)]
FROM sys.dm_os_buffer_descriptors WITH (NOLOCK)
WHERE database_id > 4 AND database_id <> 32767 )

SELECT @TotalRam as RAMinUSE, value as MaxServerMemory 
FROM sys.configurations
WHERE name like '%max server memory%'

查詢結果:

按實例劃分的記憶體使用情況

我想為這台機器增加 12GB 的 RAM 用於兩個重型實例,我想確保它會被使用並且我沒有配置不正確的東西。我已驗證安裝的 SQL 和 Windows 版本將支持 24GB RAM。

看到這些值之間的差距是否正常?也許我的查詢遺漏了一些東西。

你們看到從 12GB 到 24GB 記憶體有什麼問題嗎?

此外,PerfMon 中剩餘的可用 MBytes 顯示大約 600MB。那個數應該是根據MAX SERVER MEMORY分配後剩下的吧?否則,我會期望看到更高的水平。

在您實際將數據載入到記憶體中之前,實際使用的記憶體不會增加。它不會跳到 10GB 的組合分配,因為這是您設置的最大記憶體,並且因為您的數據庫至少有那麼大。這是一個最大值,而不是最小值(更不用說 min 也不是那樣工作的),並且它不會試圖猜測 - 在你執行足夠的查詢之前 - 它應該將哪些表/索引載入到緩衝區中池記憶體。

所以是的,看到這些值的差距是正常的。如果通過在每個實例上發出一堆來抽取緩衝池,您可能會更接近最大值SELECT * FROM dbo.BiggestTables;,但通常最好讓 SQL Server 根據實際應用程序的實際使用情況分配它認為合適的記憶體。還要記住,最大伺服器記憶體不僅僅涵蓋緩衝池。

簡而言之,SQL Server 非常擅長記憶體管理;讓它做它的事情,當你有一個實際的性能問題時,擔心調整你的各種實例的最大記憶體。

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