sys.memory_optimized_tables_internal_attributes (Transact-SQL)
Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL Azure Управляемый экземпляр SQL Azure
Содержит строку для каждой внутренней оптимизированной для памяти таблицы, которая используются для хранения пользовательских таблиц, оптимизированных для памяти. Каждая пользовательская таблица соответствует одной или нескольким внутренним таблицам. Одна таблица используется для хранения основных данных. Дополнительные внутренние таблицы используются для поддержки таких функций, как темпоральные таблицы, индекс columnstore и хранилище (LOB) "вне строки" для таблиц, оптимизированных для памяти.
Имя столбца | Тип данных | Description |
---|---|---|
object_id | int | Идентификатор пользовательской таблицы. Внутренние оптимизированные для памяти таблицы, служащие для поддержки пользовательской таблицы (например, хранилища вне строки или удаленных строк в случае сочетания Hk/Columnstore), имеют то же значение object_id, что и их родительский объект. |
xtp_object_id | bigint | Идентификатор объекта выполняющейся в памяти OLTP, который соответствует внутренней оптимизированной для памяти таблице, используемой для поддержки пользовательской таблицы. Он уникален в пределах базы данных и может изменяться за время существования объекта. |
type | int | Тип внутренней таблицы. 0 => DELETED_ROWS_TABLE 1 => USER_TABLE 2 => DICTIONARIES_TABLE 3 => SEGMENTS_TABLE 4 => ROW_GROUPS_INFO_TABLE 5 => ВНУТРЕННЯЯ ТАБЛИЦА ДАННЫХ OFF-ROW 252 => INTERNAL_TEMPORAL_HISTORY_TABLE |
type_desc | nvarchar(60) | Описание типа DELETED_ROWS_TABLE .> Внутренняя отслеживание таблиц, отслеживаемая удаленные строки для индекса columnstore USER_TABLE .> Таблица, содержащая данные пользователя в строке DICTIONARIES_TABLE —> словари для индекса columnstore SEGMENTS_TABLE —> сжатые сегменты для индекса columnstore ROW_GROUPS_INFO_TABLE —> метаданные о сжатых группах строк индекса columnstore ВНУТРЕННЯЯ ТАБЛИЦА ДАННЫХ OFF-ROW —> внутренняя таблица, используемая для хранения столбца вне строки. В данном случае minor_id отражает столбец column_id. INTERNAL_TEMPORAL_HISTORY_TABLE —> горячий хвост таблицы журнала на основе диска. Вставляемые в журнал строки сначала вставляются во внутреннюю таблицу, оптимизированную для памяти. Существует фоновая задача, которая асинхронно перемещает строки из этой внутренней таблицы в таблицу журнала на диске. |
minor_id | int | Значение 0 указывает на пользователя или внутреннюю таблицу Ненулевое значение обозначает идентификатор столбца, хранящегося вне строки. Соединяется с column_id в sys.columns. Каждый столбец, хранящийся вне строки, имеет соответствующую строку в этом системном представлении. |
Разрешения
Видимость метаданных в представлениях каталога ограничена защищаемыми объектами, которыми владеет пользователь или которым пользователь получил некоторое разрешение. Дополнительные сведения см. в разделе Metadata Visibility Configuration.
Примеры
А. Возвращение всех столбцов, которые хранятся вне строки
В следующем скрипте T-SQL показана таблица с несколькими большими столбцами, не относящимися к типу LOB, и одним столбцом LOB:
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
В следующем запросе показаны все столбцы, которые хранятся вне строки, а также их размер. Размер-1 обозначает столбец LOB. Все столбцы LOB хранятся вне строки.
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. Возвращение сведений о потреблении памяти для всех столбцов, которые хранятся вне строки
Чтобы получить дополнительные сведения о потреблении памяти для столбцов, хранящихся вне строки, можно использовать следующий запрос, который показывает потребление памяти для всех внутренних таблиц и их индексов, используемых для хранения столбцов вне строки:
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;
В. Возвращение сведений о потреблении памяти для индексов columnstore в таблицах, оптимизированных для памяти
Используйте следующий запрос, чтобы показать потребление памяти индексов columnstore в таблицах, оптимизированных для памяти:
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;
Используйте следующий запрос разбиения потребления памяти во внутренних структурах, используемых для индексов columnstore в таблицах, оптимизированных для памяти:
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)