sys.memory_optimized_tables_internal_attributes (Transact-SQL)
Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL Database Azure SQL Managed Instance
Contiene una fila para cada tabla interna optimizada para memoria que se usa para almacenar tablas de usuario optimizadas para memoria. Cada tabla de usuario corresponde a una o varias tablas internas. Se usa solo una tabla para el almacén de datos central. Las tablas internas adicionales se usan para admitir características como almacenamiento temporal, almacenamiento de índice de almacén de columnas y almacenamiento no consecutivo (LOB) para tablas optimizadas para memoria.
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
object_id | int | Identificador de la tabla de usuario. Las tablas internas optimizadas para memoria que existen para admitir una tabla de usuario (como almacenamiento no consecutivo o filas eliminadas, en el caso de las combinaciones de Hk/almacén de columnas) tienen el mismo valor object_id como principal. |
xtp_object_id | bigint | Identificador de objeto de OLTP en memoria que corresponde a la tabla interna optimizada para memoria que se usa para admitir la tabla de usuario. Es un identificador único dentro de la base de datos y puede cambiar a lo largo de la duración del objeto. |
type | int | Tipo de tabla interna. 0 => DELETED_ROWS_TABLE 1 => USER_TABLE 2 => DICTIONARIES_TABLE 3 => SEGMENTS_TABLE 4 => ROW_GROUPS_INFO_TABLE 5 => TABLA DE DATOS FUERA DE FILA INTERNA 252 => INTERNAL_TEMPORAL_HISTORY_TABLE |
type_desc | nvarchar(60) | Descripción del tipo DELETED_ROWS_TABLE:> seguimiento interno de las filas eliminadas de un índice de almacén de columnas USER_TABLE:> tabla que contiene los datos de usuario en fila DICTIONARIES_TABLE:> diccionarios para un índice de almacén de columnas SEGMENTS_TABLE:> segmentos comprimidos para un índice de almacén de columnas ROW_GROUPS_INFO_TABLE:> metadatos sobre grupos de filas comprimidos de un índice de almacén de columnas TABLA DE DATOS INTERNA FUERA DE FILA:> tabla interna que se usa para el almacenamiento de una columna fuera de fila. En este caso, minor_id refleja el valor de column_id. INTERNAL_TEMPORAL_HISTORY_TABLE:> cola activa de la tabla de historial basada en disco. Las filas insertadas en el historial se insertan primero en esta tabla interna optimizada para memoria. Existe una tarea en segundo plano que mueve de forma asincrónica las filas desde esta tabla interna a la tabla de historial basada en disco. |
minor_id | int | El valor 0 indica un usuario o una tabla interna. Un valor distinto de 0 indica el identificador de una columna almacenada no de manera consecutiva. Se combina con column_id en sys.columns. Cada columna que se almacena de manera no consecutiva tiene una fila correspondiente en esta vista del sistema. |
Permisos
La visibilidad de los metadatos en las vistas de catálogo se limita a los elementos protegibles y que son propiedad de un usuario o sobre los que el usuario ha recibido algún permiso. Para obtener más información, consulte Metadata Visibility Configuration.
Ejemplos
A Devolver todas las columnas que se almacenan de manera no consecutiva
El siguiente script T-SQL muestra una tabla con varias columnas que no son de tipo LOB y una sola columna de tipo 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
La consulta siguiente muestra todas las columnas almacenadas en filas no consecutivas, además de sus tamaños. Un tamaño de -1 indica una columna de LOB. Todas las columnas de LOB se almacenan en filas no consecutivas.
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. Devolver el consumo de memoria de todas las columnas que se almacenan de manera no consecutiva
Para más detalles sobre el consumo de memoria de las columnas que se almacenan de manera no consecutiva, puede usar la consulta siguiente que muestra el consumo de memoria de todas las tablas internas y los índices que se usan para almacenar las columnas no consecutivas:
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. Devolver el consumo de memoria de los índices de almacén de columnas en las tablas optimizadas para memoria
Use la consulta siguiente para mostrar el consumo de memoria de los índices de almacén de columnas en tablas optimizadas para memoria:
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;
Use la consulta siguiente para desglosar el consumo de memoria en las estructuras internas que se usan para los índices de almacén de columnas en tablas optimizadas para memoria:
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)