[SQL Server]Monitor Memory Usage in SQL2016 IN-Mrmory OLTP

大量使用In-Memory table功能後,那當然就得監控並掌握每個memory object記憶體使用量,

避免發生任何記憶體意外。

透過監控才能安全避免意外或失敗,有真實數據也才能讓你更放心正式環境是否有任何記憶體錯誤,

相信大家都有使用sp_spaceused來查看每個資料表所使用disk space的經驗,

但目前sp_spaceused不支援memory table,貼心的MS提供一張新的記憶體最佳化物件的記憶體使用量報表,

讓我們可以完全監控並掌握每個記憶體最佳化物件。

select count(*) as 'count' 
from [dbo].[rsa241_mem]
go
sp_spaceused 'rsa241_mem'
go

並無法支援memory table​。

透過新報表查看每個記憶體物件的記憶體使用量

當然我們也可以透過sys.dm_db_xtp_table_memory_stats來取的這些統計資料

SELECT t.object_id
    ,t.NAME
    ,ISNULL((
            SELECT CONVERT(DECIMAL(18, 2), (TMS.memory_used_by_table_kb) / 1024.00)
            ), 0.00) AS table_used_memory_in_mb
    ,ISNULL((
            SELECT CONVERT(DECIMAL(18, 2), (TMS.memory_allocated_for_table_kb - TMS.memory_used_by_table_kb) / 1024.00)
            ), 0.00) AS table_unused_memory_in_mb
    ,ISNULL((
            SELECT CONVERT(DECIMAL(18, 2), (TMS.memory_used_by_indexes_kb) / 1024.00)
            ), 0.00) AS index_used_memory_in_mb
    ,ISNULL((
            SELECT CONVERT(DECIMAL(18, 2), (TMS.memory_allocated_for_indexes_kb - TMS.memory_used_by_indexes_kb) / 1024.00)
            ), 0.00) AS index_unused_memory_in_mb
FROM sys.tables t
INNER JOIN sys.dm_db_xtp_table_memory_stats TMS ON (t.object_id = TMS.object_id)

參考

sys.dm_db_xtp_table_memory_stats (Transact-SQL)

Resolve Out Of Memory Issues

Restore and Recovery of Memory-Optimized Tables

Monitor and Troubleshoot Memory Usage

在 VM 環境使用記憶體中的 OLTP