Sql-Server

SQL Server 使用的總記憶體(64 位)

  • March 14, 2022

我對這個主題的了解表明 perf counter SQL Server:Memory Manager: Total Server Memory 只為您提供緩衝池記憶體。在名為 sys.dm_os_process_memor 的 DMV 中有一個名為 physical_memory_in_use 的列,可為您提供物理工作集。

但我不確定…

是否有 DMV 或性能計數器可以告訴我 SQL Server 程序在 64 位 Windows 作業系統上執行的 64 位 SQL Server 2008 R2 和 SQL 2012 使用的總物理記憶體(緩衝池 + 非緩衝池,即 MemToLeave)?

我遇到了 Joe Sack 建議的這個解決方案(現在是 SQLSkills)

在“Private Bytes”中查找非緩衝池記憶體(MemToLeave)

在我看來(剛剛測試並且似乎正確)在 64 位 程序上:sqlservr:私有字節” 可以為您提供 SQL Server(緩衝池 + 非緩衝池)使用的總記憶體,考慮到記憶體中的鎖定頁面未啟用。

如果啟用記憶體中的鎖定頁面,那麼私有字節將為您提供 SQL Server 程序使用的總非緩衝池記憶體。

我不確定單個記憶體視圖,但您可以從兩個查詢中獲取資訊。第一個(取自Glenn Berry 的 DMV 查詢)利用sys.dm_os_buffer_descriptors並將按數據庫向您顯示緩衝池:

SELECT 
   DB_NAME(database_id) AS [Database Name]
   ,CAST(COUNT(*) * 8/1024.0 AS DECIMAL (10,2))  AS [Cached Size (MB)]
FROM sys.dm_os_buffer_descriptors WITH (NOLOCK)
WHERE database_id not in (1,3,4) -- system databases
AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC OPTION (RECOMPILE);

我通過查看sys.dm_os_memory_cache_entries組合的第二個查詢向我顯示非緩衝池資訊:

select 
   name
   ,sum(pages_allocated_count)/128.0 [Cache Size (MB)]
from sys.dm_os_memory_cache_entries
where pages_allocated_count > 0
group by name
order by sum(pages_allocated_count) desc

有許多與記憶相關的 DMVdm_os_memory_* ,用. 您可以使用這些來調查 SQL Server 在各個級別上如何使用記憶體。

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