透過 sys.dm_os_memory_clerks 多維度剖析 SQL Server 記憶體配置:依 Clerk 類型細分保留/認可/AWE/共享/單頁/多頁記憶體,並彙總 Buffer Pool 與 MemToLeave 總覽,輔助診斷記憶體壓力、洩漏與配置不當。
SELECT
type,
SUM(virtual_memory_reserved_kb) AS vm_Reserved_KB,
SUM(virtual_memory_committed_kb) AS vm_Committed_KB,
SUM(awe_allocated_kb) AS awe_Allocated_KB,
SUM(shared_memory_reserved_kb) AS sm_Reserved_KB,
SUM(shared_memory_committed_kb) AS sm_Committed_KB,
SUM(single_pages_kb) AS SinglePage_KB, -- Buffer Pool 內 Stolen
SUM(multi_pages_kb) AS MultiPage_KB -- MemToLeave
FROM sys.dm_os_memory_clerks
GROUP BY type
ORDER BY type;
SELECT
SUM(virtual_memory_reserved_kb) AS [Reserved_KB],
SUM(virtual_memory_committed_kb) AS [Committed_KB],
SUM(virtual_memory_reserved_kb) * 1.0 / SUM(virtual_memory_committed_kb) AS [Reserved/Commit_Ratio],
SUM(single_pages_kb) + SUM(multi_pages_kb) AS [Stolen_KB],
SUM(virtual_memory_committed_kb) + SUM(single_pages_kb) AS [BufferPool_KB],
SUM(multi_pages_kb) AS [MemToLeave_KB],
SUM(awe_allocated_kb) AS [AWE_Allocated_KB]
FROM sys.dm_os_memory_clerks;
SELECT * FROM sys.dm_os_process_memory;
| 術語 | 說明 |
|---|---|
| Clerk | 記憶體分配器類型(如 CACHESTORE_SQLCP 計畫快取、MEMORYCLERK_SQLBUFFERPOOL 緩衝集區) |
| Reserved | 虛擬位址空間保留(尚未認可實體記憶體) |
| Committed | 實際認可的實體記憶體頁面 |
| Single Pages | 8KB 頁面,來自 Buffer Pool(single_pages_kb 即 Stolen 記憶體) |
| Multi Pages | >8KB 配置,來自 MemToLeave 區域(CLR、擴充預存程序、大型查詢工作區等) |
| AWE Allocated | 啟用 AWE 機制時,32 位元版本鎖定的實體記憶體 |
| Buffer Pool | Committed + Single Pages,核心資料快取區 |
| MemToLeave | Multi Pages 總和,保留給非 Buffer Pool 配置 |
optimize for ad hoc workloads、參數化查詢、清理單用計畫。MEMORYCLERK_* 預留未釋放。DBCC MEMORYSTATUS 取得更詳細的 Clerk 內部結構。sys.dm_os_ring_buffers (RING_BUFFER_RESOURCE_MONITOR) 記憶體壓力通知。Max Server Memory 留足 OS 與非 SQL 工作負載記憶體(建議保留 4-8GB 或總量 10-15%)。