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

適用対象: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

ユーザー メモリ最適化テーブルを格納するために使用される各内部メモリ最適化テーブルの行が含まれます。Contains a row for each internal memory-optimized table used for storing user memory-optimized tables. 各ユーザー テーブルは、1 つ以上の内部テーブルに対応します。Each user table corresponds to one or more internal tables. 1 つのテーブルは、コア データ ストレージで使用されます。A single table is used for the core data storage. その他の内部テーブルは、メモリ最適化テーブルの一時的な列ストア インデックスおよび行外 (LOB) ストレージなどの機能をサポートするために使用されます。Additional internal tables are used to support features such as temporal, columnstore index and off-row (LOB) storage for memory-optimized tables.

列名Column name データ型Data type 説明Description
object_idobject_id intint ユーザー テーブルの ID。ID of the user table. ユーザー テーブル (hk/列ストアの組み合わせの場合は行外ストレージまたは削除行など) をサポートするために存在する内部メモリ最適化テーブルは、その親と同じ object_id を持ちます。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 ユーザー テーブルをサポートするために使用される内部メモリ最適化テーブルに対応するインメモリ OLTP オブジェクト ID。In-Memory OLTP object ID corresponding to the internal memory-optimized table that is used to support the user table. データベース内では一意であり、オブジェクトの有効期間中に変わる可能性があります。It is unique within the database and it can change over the lifetime of the object.
typetype intint 内部テーブルの種類。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) 種類の説明Description of the type

DELETED_ROWS_TABLE -> 列ストア インデックスの削除行を追跡する内部テーブルDELETED_ROWS_TABLE -> Internal table tracking deleted rows for a columnstore index
USER_TABLE -> 行内ユーザー データを含むテーブルUSER_TABLE -> Table containing the in-row user data
DICTIONARIES_TABLE -> 列ストア インデックスの辞書DICTIONARIES_TABLE -> Dictionaries for a columnstore index
SEGMENTS_TABLE -> 列ストア インデックスの圧縮セグメントSEGMENTS_TABLE -> Compressed segments for a columnstore index
ROW_GROUPS_INFO_TABLE -> 列ストア インデックスの圧縮行グループに関するメタデータROW_GROUPS_INFO_TABLE -> Metadata about compressed row groups of a columnstore index
INTERNAL OFF-ROW DATA TABLE -> 行外列のストレージに使用される内部テーブル。INTERNAL OFF-ROW DATA TABLE -> Internal table used for storage of an off-row column. この場合、minor_id には column_id が反映されます。In this case, minor_id reflects the column_id.
INTERNAL_TEMPORAL_HISTORY_TABLE -> ディスク ベース履歴テーブルの末尾。INTERNAL_TEMPORAL_HISTORY_TABLE -> Hot tail of the disk-based history table. 履歴に挿入された行は、最初にこの内部メモリ最適化テーブルに挿入されます。Rows inserted into the history are inserted into this internal memory-optimized table first. この内部テーブルからディスク ベースの履歴テーブルに行を非同期的に移動するバックグラウンド タスクがあります。There is a background task that asynchronously moves rows from this internal table to the disk-based history table.
minor_idminor_id intint 0 は、ユーザー テーブルまたは内部テーブルを示します。0 indicates a user or internal table

0 以外は、行外に格納されている列の ID を示します。Non-0 indicates the ID of a column stored off-row. sys.columns で column_id と結合されます。Joins with column_id in sys.columns.

このシステム ビューには行外に格納されている各列に対応する行があります。Each column stored off-row has a corresponding row in this system view.

アクセス許可Permissions

カタログ ビューでのメタデータの表示が、ユーザーが所有しているかそのユーザーが権限を許可されている、セキュリティ保護可能なメタデータに制限されます。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. 詳細については、「 Metadata Visibility Configuration」を参照してください。For more information, see Metadata Visibility Configuration.

使用例Examples

A.A. 行外に格納されているすべての列を返すReturning all columns that are stored off-row

次の T-SQL スクリプトは、複数の大きな LOB 以外の列と 1 つの LOB 列を含むテーブルを示しています。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

次のクエリでは、行外に格納されるすべての列とそのサイズを示します。The following query shows all columns that are stored off-row, along with their sizes. サイズ - 1 は LOB 列を示します。A size of -1 indicates a LOB column. すべての LOB 列は行外に格納されます。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. 行外に格納されているすべての列のメモリ使用量を返すReturning memory consumption of all columns that are stored off-row

行外列のメモリ使用量の詳細を取得する場合は、以下のクエリを使用できます。このクエリでは、行外列を格納するために使用されるすべての内部テーブルとそのインデックスのメモリ使用量が示されます。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. メモリ最適化テーブルでの列ストア インデックスのメモリ使用量を返すReturning memory consumption of columnstore indexes on memory-optimized tables

メモリ最適化テーブルに列ストア インデックスのメモリ使用量を表示するのにには、次のクエリを使用します。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;

列ストア インデックスのメモリ最適化テーブルで使用される内部構造全体でメモリ消費量を次のクエリ break を使用します。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)