Delen via


sys.memory_optimized_tables_internal_attributes (Transact-SQL)

Van toepassing op: SQL Server 2016 (13.x) en latere versies van Azure SQL DatabaseAzure SQL Managed Instance

Bevat een rij voor elke interne, door geheugen geoptimaliseerde tabel die wordt gebruikt voor het opslaan van tabellen die zijn geoptimaliseerd voor gebruikersgeheugen. Elke gebruikerstabel komt overeen met een of meer interne tabellen. Er wordt één tabel gebruikt voor de kerngegevensopslag. Aanvullende interne tabellen worden gebruikt ter ondersteuning van functies zoals tijdelijke, columnstore-index en LOB-opslag (off-row) voor tabellen die zijn geoptimaliseerd voor geheugen.

Kolomnaam Gegevenstype Description
object_id int Id van de gebruikerstabel. Voor intern geheugen geoptimaliseerde tabellen die bestaan ter ondersteuning van een gebruikerstabel (zoals opslag buiten rij of verwijderde rijen in het geval van combinaties van Hk/Columnstore) hebben dezelfde object_id als de bovenliggende tabel.
xtp_object_id bigint In-Memory OLTP-object-id die overeenkomt met de tabel die is geoptimaliseerd voor intern geheugen die wordt gebruikt ter ondersteuning van de gebruikerstabel. Deze is uniek in de database en kan gedurende de levensduur van het object worden gewijzigd.
type int Type interne tabel.

0 => DELETED_ROWS_TABLE
1 => USER_TABLE
2 => DICTIONARIES_TABLE
3 => SEGMENTS_TABLE
4 => ROW_GROUPS_INFO_TABLE
5 => INTERNE OFF-ROW GEGEVENSTABEL
252 => INTERNAL_TEMPORAL_HISTORY_TABLE
type_beschrijving nvarchar(60) Beschrijving van het type

DELETED_ROWS_TABLE -> Interne rijen voor het bijhouden van verwijderde rijen voor een columnstore-index
USER_TABLE -> Tabel met de gebruikersgegevens in de rij
DICTIONARIES_TABLE -> Woordenlijsten voor een columnstore-index
SEGMENTS_TABLE -> Gecomprimeerde segmenten voor een columnstore-index
ROW_GROUPS_INFO_TABLE -> Metagegevens over gecomprimeerde rijgroepen van een columnstore-index
INTERNAL OFF-ROW DATA TABLE -> Interne tabel die wordt gebruikt voor opslag van een kolom buiten de rij. In dit geval weerspiegelt minor_id de column_id.
INTERNAL_TEMPORAL_HISTORY_TABLE -> Hot tail van de geschiedenistabel op basis van schijven. Rijen die in de geschiedenis zijn ingevoegd, worden eerst ingevoegd in deze interne tabel die is geoptimaliseerd voor geheugen. Er is een achtergrondtaak die asynchroon rijen van deze interne tabel verplaatst naar de geschiedenistabel op basis van de schijf.
minor_id int 0 geeft een gebruiker of interne tabel aan

Niet-0 geeft de id aan van een kolom die buiten de rij is opgeslagen. Wordt samengevoegd met column_id in sys.columns.

Elke kolom die buiten de rij is opgeslagen, heeft een bijbehorende rij in deze systeemweergave.

Permissions

De zichtbaarheid van de metagegevens in catalogusweergaven is beperkt tot beveiligbare items waarvan een gebruiker eigenaar is of waarvoor de gebruiker een bepaalde machtiging heeft gekregen. Zie Zichtbaarheidsconfiguratie voor metagegevensvoor meer informatie.

Voorbeelden

Eén. Alle kolommen retourneren die buiten de rij zijn opgeslagen

Het volgende T-SQL-script illustreert een tabel met meerdere grote niet-LOB-kolommen en één LOB-kolom:

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

In de volgende query ziet u alle kolommen die buiten de rij zijn opgeslagen, samen met hun grootte. Een grootte van -1 geeft een LOB-kolom aan. Alle LOB-kolommen worden buiten de rij opgeslagen.

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. Geheugenverbruik retourneren van alle kolommen die buiten de rij zijn opgeslagen

Voor meer informatie over het geheugenverbruik van kolommen buiten rij kunt u de volgende query gebruiken, waarin het geheugenverbruik van alle interne tabellen en de bijbehorende indexen wordt weergegeven voor het opslaan van de kolommen buiten rij:

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. Geheugenverbruik van columnstore-indexen retourneren voor tabellen die zijn geoptimaliseerd voor geheugen

Gebruik de volgende query om het geheugenverbruik van columnstore-indexen weer te geven voor tabellen die zijn geoptimaliseerd voor geheugen:

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;

Gebruik de volgende query om het geheugenverbruik op te splitsen in interne structuren die worden gebruikt voor columnstore-indexen in tabellen die zijn geoptimaliseerd voor geheugen:

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)