Sql-Server
檢查 SQL Server 的記憶體使用率
有沒有辦法檢查 SQL Server 保留的記憶體有多少實際被 SQL Server 使用?
過去有沒有辦法查看這些資訊?即一小時前使用了多少記憶體?
您可以隨時執行
DBCC MEMORYSTATUS
(或者最好查看 sys.dm_os_memory* DMVs)。至於從一個小時前獲取數據,這將需要使用監視工具、MDW 等進行某種收集。SQL Server 不會一直保留記憶體使用率的快照——這將變得非常昂貴。
@AaronBertrand 是正確的。您無法真正獲得那種細粒度的數據。您可以查看環形緩衝區,看看是否可以找到您感興趣的任何統計資訊,但這些是事件驅動的,不一定可過濾到您正在尋找的時間精度。我只是稍微修改了 Jonathan Kehayias 的Memory Pressure query。它可能對你有用,也可能沒用,但是,正如我所指出的,Aaron 的回答是正確的。
SELECT EventTime, record.value('(/Record/ResourceMonitor/Notification)[1]', 'varchar(max)') as [Type], record.value('(/Record/ResourceMonitor/IndicatorsProcess)[1]', 'int') as [IndicatorsProcess], record.value('(/Record/ResourceMonitor/IndicatorsSystem)[1]', 'int') as [IndicatorsSystem], record.value('(/Record/MemoryRecord/AvailablePhysicalMemory)[1]', 'bigint') AS [Avail Phys Mem, Kb], record.value('(/Record/MemoryRecord/TotalPhysicalMemory)[1]', 'bigint') AS [Total Phys Mem, Kb], record.value('(/Record/MemoryRecord/AvailableVirtualAddressSpace)[1]', 'bigint') AS [Avail VAS, Kb], record.value('(/Record/MemoryRecord/TotalVirtualAddressSpace)[1]', 'bigint') AS [Avail VAS, Kb] FROM ( SELECT DATEADD (ss, (-1 * ((cpu_ticks / CONVERT (float, ( cpu_ticks / ms_ticks ))) - [timestamp])/1000), GETDATE()) AS EventTime, CONVERT (xml, record) AS record FROM sys.dm_os_ring_buffers CROSS JOIN sys.dm_os_sys_info WHERE ring_buffer_type = 'RING_BUFFER_RESOURCE_MONITOR') AS tab ORDER BY EventTime DESC;