sys.memory_optimized_tables_internal_attributes (Transact-SQL)sys.memory_optimized_tables_internal_attributes (Transact-SQL)

Anwendungsbereich:Applies to: JaSQL Server 2016 (13.x)SQL Server 2016 (13.x)yesSQL Server 2016 (13.x)SQL Server 2016 (13.x) und höher JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceAnwendungsbereich:Applies to: JaSQL Server 2016 (13.x)SQL Server 2016 (13.x)yesSQL Server 2016 (13.x)SQL Server 2016 (13.x) and later JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance

Enthält eine Zeile für jede interne speicheroptimierte Tabelle, die zum Speichern von speicheroptimierten Benutzertabellen verwendet wird.Contains a row for each internal memory-optimized table used for storing user memory-optimized tables. Jede Benutzertabelle entspricht mindestens einer internen Tabelle.Each user table corresponds to one or more internal tables. Eine einzelne Tabelle wird für die Speicherung von Kerndaten verwendet.A single table is used for the core data storage. Zusätzliche interne Tabellen werden für die Unterstützung von Funktionen wie dem temporalen Columnstore-Index und die Speicherung außerhalb von Zeilen (LOB) für speicheroptimierte Tabellen verwendet.Additional internal tables are used to support features such as temporal, columnstore index and off-row (LOB) storage for memory-optimized tables.

SpaltennameColumn name DatentypData type BeschreibungDescription
object_idobject_id intint Die ID der Benutzertabelle.ID of the user table. Interne speicheroptimierte Tabellen, die der Unterstützung einer Benutzertabelle dienen (wie etwa Speicherung außerhalb der Zeile oder gelöschte Zeilen im Fall von Hk/Columnstore-Kombinationen), weisen die gleiche object_id wie ihr übergeordnetes Objekt auf.Internal memory-optimized tables that exist to support a user table (such as off-row storage or deleted rows in case of Hk/Columnstore combinations) have the same object_id as their parent.
xtp_object_idxtp_object_id bigintbigint In-Memory-OLTP-Objekt-ID, die der internen speicheroptimierten Tabelle entspricht, die für die Unterstützung der Benutzertabelle verwendet wird.In-Memory OLTP object ID corresponding to the internal memory-optimized table that is used to support the user table. Sie ist innerhalb der Datenbank eindeutig und kann sich im Lauf der Lebensspanne des Objekts ändern.It is unique within the database and it can change over the lifetime of the object.
Typtype intint Der Typ der internen Tabelle.Type of internal table.

0 => DELETED_ROWS_TABLE0 => DELETED_ROWS_TABLE
1 => USER_TABLE1 => USER_TABLE
2 => DICTIONARIES_TABLE2 => DICTIONARIES_TABLE
3 => SEGMENTS_TABLE3 => SEGMENTS_TABLE
4 => ROW_GROUPS_INFO_TABLE4 => ROW_GROUPS_INFO_TABLE
5 => INTERNAL OFF-ROW DATA TABLE5 => INTERNAL OFF-ROW DATA TABLE
252 => INTERNAL_TEMPORAL_HISTORY_TABLE252 => INTERNAL_TEMPORAL_HISTORY_TABLE
type_desctype_desc nvarchar(60)nvarchar(60) Beschreibung des TypsDescription of the type

DELETED_ROWS_TABLE -> Interne Tabelle zur Nachverfolgung gelöschter Zeilen für einen Columnstore-IndexDELETED_ROWS_TABLE -> Internal table tracking deleted rows for a columnstore index
USER_TABLE -> Tabelle, die die zeileninternen Benutzerdaten enthältUSER_TABLE -> Table containing the in-row user data
DICTIONARIES_TABLE -> Wörterbücher für einen Columnstore-IndexDICTIONARIES_TABLE -> Dictionaries for a columnstore index
SEGMENTS_TABLE -> Komprimierte Segmente für einen Columnstore-IndexSEGMENTS_TABLE -> Compressed segments for a columnstore index
ROW_GROUPS_INFO_TABLE -> Metadaten zu komprimierten Zeilengruppen eines Columnstore-IndexesROW_GROUPS_INFO_TABLE -> Metadata about compressed row groups of a columnstore index
INTERNAL OFF-ROW DATA TABLE -> Interne Tabelle, die für die Speicherung einer Spalte außerhalb von Zeilen verwendet wird.INTERNAL OFF-ROW DATA TABLE -> Internal table used for storage of an off-row column. In diesem Fall gibt minor_id die column_id an.In this case, minor_id reflects the column_id.
INTERNAL_TEMPORAL_HISTORY_TABLE -> Heißes Endsegment der datenträgerbasierten Verlaufstabelle.INTERNAL_TEMPORAL_HISTORY_TABLE -> Hot tail of the disk-based history table. Zeilen, die in den Verlauf eingefügt werden, werden zuerst in diese interne speicheroptimierte Tabelle eingefügt.Rows inserted into the history are inserted into this internal memory-optimized table first. Eine Hintergrundaufgabe verschiebt asynchron Zeilen aus dieser internen Tabelle in die datenträgerbasierte Verlaufstabelle.There is a background task that asynchronously moves rows from this internal table to the disk-based history table.
minor_idminor_id intint 0 gibt eine Benutzer- oder eine interne Tabelle an0 indicates a user or internal table

Ein anderer Wert als 0 gibt die ID einer außerhalb von Zeilen gespeicherten Spalte an.Non-0 indicates the ID of a column stored off-row. Joins mit column_id in sys.columns.Joins with column_id in sys.columns.

Jeder außerhalb von Zeilen gespeicherten Spalte entspricht eine Zeile in dieser Systemansicht.Each column stored off-row has a corresponding row in this system view.

BerechtigungenPermissions

Die Sichtbarkeit der Metadaten in Katalogsichten ist auf sicherungsfähige Elemente eingeschränkt, bei denen der Benutzer entweder der Besitzer ist oder für die dem Benutzer eine Berechtigung erteilt wurde.The visibility of the metadata in catalog views is limited to securables that a user either owns or on which the user has been granted some permission. Weitere Informationen finden Sie unter Metadata Visibility Configuration.For more information, see Metadata Visibility Configuration.

BeispieleExamples

A.A. Zurückgeben aller Spalten, die außerhalb von Zeilen gespeichert sindReturning all columns that are stored off-row

Das folgende T-SQL-Skript veranschaulicht eine Tabelle mit mehreren großen Spalten, die nicht vom LOB-Typ sind, und einer einzelnen LOB-Spalte:The following T-SQL script illustrates a table with multiple large non-LOB columns and a single LOB column:

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

Die folgende Abfrage zeigt alle Spalten, die außerhalb der Zeile gespeichert sind, zusammen mit ihrer Größe.The following query shows all columns that are stored off-row, along with their sizes. Eine Größe von-1 gibt eine LOB-Spalte an.A size of -1 indicates a LOB column. Alle LOB-Spalten werden außerhalb von Zeilen gespeichert.All LOB columns are stored off-row.

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.B. Zurückgeben des Speicherverbrauchs aller Spalten, die außerhalb von Zeilen gespeichert sindReturning memory consumption of all columns that are stored off-row

Um mehr Details zum Speicherverbrauch von außerhalb von Zeilen gespeicherten Spalten abzurufen, können Sie die folgende Abfrage verwenden, die den Speicherverbrauch aller internen Tabellen und ihre Indizes angibt, die zum Speichern der Spalten außerhalb von Zeilen verwendet werden:To get more details about the memory consumption of off-row columns you can use the following query, which shows the memory consumption of all internal tables and their indexes that are used to store the off-row columns:

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.C. Zurückgeben des Speicherverbrauches von Columnstore-Indizes für speicheroptimierte TabellenReturning memory consumption of columnstore indexes on memory-optimized tables

Verwenden Sie die folgende Abfrage, um den Arbeitsspeicher Verbrauch von columnstore--Indizes für Speicher optimierte Tabellen anzuzeigen:Use the following query to show the memory consumption of columnstore indexes on memory-optimized tables:

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;

Verwenden Sie die folgende Abfrage, um den Arbeitsspeicher Verbrauch über interne Strukturen hinweg zu unterbrechen, die für columnstore--Indizes in Speicher optimierten Tabellen verwendet werden:Use the following query break down the memory consumption across internal structures used for columnstore indexes on memory-optimized tables:

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)