Sdílet prostřednictvím


Monitorování paměťově optimalizovaných časových tabulek s verzováním podle systému

platí pro: SQL Server 2016 (13.x) a novější azure SQL Managed Instance

Pomocí existujících zobrazení můžete sledovat podrobnou a souhrnnou spotřebu paměti pro každou tabulku optimalizovanou pro systémovou verzi paměti.

Monitorování dočasných tabulek

Pomocí následujícího ukázkového kódu můžete monitorovat dočasné tabulky, které používají In-Memory OLTP. Tyto příklady používají běžné výrazy tabulek (CTE).

Podrobná spotřeba paměti

Následující dotaz podrobně popisuje spotřebu paměti, rozdělenu mezi hlavní systémově verzovanou tabulku a prozatímní tabulku interní historie.

WITH InMemoryTemporalTables
AS (
    SELECT SCHEMA_NAME(T1.schema_id) AS TemporalTableSchema,
        T1.object_id AS TemporalTableObjectId,
        IT.object_id AS InternalTableObjectId,
        OBJECT_NAME(IT.parent_object_id) AS TemporalTableName,
        IT.Name AS InternalHistoryStagingName
    FROM sys.internal_tables IT
    INNER JOIN sys.tables T1
        ON IT.parent_object_id = T1.object_id
    WHERE T1.is_memory_optimized = 1
        AND T1.temporal_type = 2
)
SELECT TemporalTableSchema,
    T.TemporalTableName,
    T.InternalHistoryStagingName,
    CASE 
        WHEN C.object_id = T.TemporalTableObjectId
            THEN 'Temporal Table Consumption'
        ELSE 'Internal Table Consumption'
        END ConsumedBy,
    C.*
FROM sys.dm_db_xtp_memory_consumers C
INNER JOIN InMemoryTemporalTables T
    ON C.object_id = T.TemporalTableObjectId
        OR C.object_id = T.InternalTableObjectId
WHERE T.TemporalTableSchema = 'dbo'
    AND T.TemporalTableName = 'FXCurrencyPairs';

Souhrn spotřeby paměti

Následující dotaz shrnuje spotřebu paměti s celkovým součtem pro tabulku optimalizovanou pro systémovou verzi paměti.

WITH InMemoryTemporalTables
AS (
    SELECT SCHEMA_NAME(T1.schema_id) AS TemporalTableSchema,
        T1.object_id AS TemporalTableObjectId,
        IT.object_id AS InternalTableObjectId,
        OBJECT_NAME(IT.parent_object_id) AS TemporalTableName,
        IT.Name AS InternalHistoryStagingName
    FROM sys.internal_tables IT
    INNER JOIN sys.tables T1
        ON IT.parent_object_id = T1.object_id
    WHERE T1.is_memory_optimized = 1
        AND T1.temporal_type = 2
    ),
DetailedConsumption
AS (
    SELECT TemporalTableSchema,
        T.TemporalTableName,
        T.InternalHistoryStagingName,
        CASE 
            WHEN C.object_id = T.TemporalTableObjectId
                THEN 'Temporal Table Consumption'
            ELSE 'Internal Table Consumption'
            END ConsumedBy,
        C.*
    FROM sys.dm_db_xtp_memory_consumers C
    INNER JOIN InMemoryTemporalTables T
        ON C.object_id = T.TemporalTableObjectId
            OR C.object_id = T.InternalTableObjectId
)
SELECT TemporalTableSchema TemporalTableName,
    sum(allocated_bytes) AS allocated_bytes,
    sum(used_bytes) AS used_bytes
FROM DetailedConsumption
WHERE TemporalTableSchema = 'dbo' ANDTemporalTableName = 'FXCurrencyPairs'
GROUP BY TemporalTableSchema,
    TemporalTableName;