Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
Innehåller en rad för varje intern minnesoptimerad tabell som används för att lagra minnesoptimerade tabeller. Varje användartabell motsvarar en eller flera interna tabeller. En enda tabell används för kärndatalagringen. Ytterligare interna tabeller används för att stödja funktioner som temporal, columnstore-index och LOB-lagring (off-row) för minnesoptimerade tabeller.
| Kolumnnamn | Datatyp | Description |
|---|---|---|
| object_id | int | ID för användartabellen. Interna minnesoptimerade tabeller som finns för att stödja en användartabell (till exempel lagring utanför rad eller borttagna rader i händelse av Hk/Columnstore-kombinationer) har samma object_id som deras överordnade. |
| xtp_object_id | bigint | In-Memory OLTP-objekt-ID som motsvarar den interna minnesoptimerade tabellen som används för att stödja användartabellen. Den är unik i databasen och kan ändras under objektets livslängd. |
| type | int | Typ av intern tabell. 0 => DELETED_ROWS_TABLE 1 => USER_TABLE 2 => DICTIONARIES_TABLE 3 => SEGMENTS_TABLE 4 => ROW_GROUPS_INFO_TABLE 5 => INTERN OFF-ROW DATATABELL 252 => INTERNAL_TEMPORAL_HISTORY_TABLE |
| typbeskrivning | nvarchar(60) | Beskrivning av typen DELETED_ROWS_TABLE –> Intern tabellspårning av borttagna rader för ett columnstore-index USER_TABLE –> Tabell som innehåller användardata på rad DICTIONARIES_TABLE –> Ordlistor för ett kolumnlagringsindex SEGMENTS_TABLE –> Komprimerade segment för ett kolumnlagringsindex ROW_GROUPS_INFO_TABLE –> Metadata om komprimerade radgrupper i ett kolumnlagringsindex INTERN OFF-ROW DATA TABLE –> Intern tabell som används för lagring av en kolumn utanför rad. I det här fallet återspeglar minor_id column_id. INTERNAL_TEMPORAL_HISTORY_TABLE –> Frekvent svans i den diskbaserade historiktabellen. Rader som infogas i historiken infogas först i den här interna minnesoptimerade tabellen. Det finns en bakgrundsaktivitet som asynkront flyttar rader från den här interna tabellen till den diskbaserade historiktabellen. |
| minor_id | int | 0 anger en användare eller intern tabell Icke-0 anger ID för en kolumn som lagras utanför rad. Ansluter med column_id i sys.columns. Varje kolumn som lagras utanför raden har en motsvarande rad i den här systemvyn. |
Permissions
Synligheten för metadata i katalogvyer är begränsad till skyddsbara objekt som en användare antingen äger eller som användaren har beviljats viss behörighet för. För mer information, se inställningar för metadatasynlighet.
Examples
A. Returnerar alla kolumner som lagras utanför rad
Följande T-SQL-skript illustrerar en tabell med flera stora icke-LOB-kolumner och en enda LOB-kolumn:
CREATE TABLE dbo.LargeTableSample
(
Id int IDENTITY PRIMARY KEY NONCLUSTERED,
C1 nvarchar(4000),
C2 nvarchar(4000),
C3 nvarchar(4000),
C4 nvarchar(4000),
Misc nvarchar(max)
) WITH (MEMORY_OPTIMIZED = ON);
GO
Följande fråga visar alla kolumner som lagras utanför rad, tillsammans med deras storlekar. En storlek på -1 anger en LOB-kolumn. Alla LOB-kolumner lagras utom raden.
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
c.name AS 'column',
c.max_length
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.columns c ON moa.object_id = c.object_id AND moa.minor_id=c.column_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type=5;
B. Returnera minnesförbrukning för alla kolumner som lagras utanför rad
Om du vill få mer information om minnesförbrukningen för kolumner utanför rad kan du använda följande fråga, som visar minnesförbrukningen för alla interna tabeller och deras index som används för att lagra kolumner utanför rad:
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
c.name AS 'column',
c.max_length,
mc.memory_consumer_desc,
mc.index_id,
mc.allocated_bytes,
mc.used_bytes
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.columns c ON moa.object_id = c.object_id AND moa.minor_id=c.column_id
JOIN sys.dm_db_xtp_memory_consumers mc ON moa.xtp_object_id=mc.xtp_object_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type=5;
C. Returnera minnesförbrukning för columnstore-index i minnesoptimerade tabeller
Använd följande fråga för att visa minnesförbrukningen för kolumnlagringsindex i minnesoptimerade tabeller:
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
i.name AS 'columnstore index',
SUM(mc.allocated_bytes) / 1024 as [allocated_kb],
SUM(mc.used_bytes) / 1024 as [used_kb]
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.indexes i ON moa.object_id = i.object_id AND i.type in (5,6)
JOIN sys.dm_db_xtp_memory_consumers mc ON moa.xtp_object_id=mc.xtp_object_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type IN (0, 2, 3, 4)
GROUP BY o.schema_id, moa.object_id, i.name;
Använd följande fråga för att dela upp minnesförbrukningen i interna strukturer som används för kolumnlagringsindex i minnesoptimerade tabeller:
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
i.name AS 'columnstore index',
moa.type_desc AS 'internal table',
mc.index_id AS 'index',
mc.memory_consumer_desc,
mc.allocated_bytes / 1024 as [allocated_kb],
mc.used_bytes / 1024 as [used_kb]
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.indexes i ON moa.object_id = i.object_id AND i.type in (5,6)
JOIN sys.dm_db_xtp_memory_consumers mc ON moa.xtp_object_id=mc.xtp_object_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type IN (0, 2, 3, 4)