Sql-Server

檢查 SQL Server 的記憶體使用率

  • January 8, 2018

有沒有辦法檢查 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;

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