Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2016 (13.x) e versões
posteriores Azure SQL Database
AzureSQL Managed Instance
SQL database in Microsoft Fabric
Contém uma linha para cada tabela interna com otimização de memória usada para armazenar tabelas com otimização de memória do usuário. Cada tabela de usuário corresponde a uma ou mais tabelas internas. Uma única tabela é usada para o armazenamento de dados principais. Tabelas internas adicionais são usadas para oferecer suporte a recursos como armazenamento temporal, columnstore index e off-row (LOB) para tabelas com otimização de memória.
| Nome da coluna | Tipo de dados | Description |
|---|---|---|
| object_id | int | ID da tabela do usuário. As tabelas internas com otimização de memória que existem para dar suporte a uma tabela de usuário (como armazenamento fora de linha ou linhas excluídas no caso de combinações Hk/Columnstore) têm o mesmo object_id que seu pai. |
| xtp_object_id | bigint | In-Memory ID de objeto OLTP correspondente à tabela interna com otimização de memória usada para dar suporte à tabela do usuário. Ele é exclusivo dentro do banco de dados e pode mudar ao longo da vida útil do objeto. |
| tipo | int | Tipo de tabela interna. 0 => DELETED_ROWS_TABLE 1 => USER_TABLE 2 => DICTIONARIES_TABLE 3 => SEGMENTS_TABLE 4 => ROW_GROUPS_INFO_TABLE 5 => TABELA DE DADOS DE OFF-ROW INTERNA 252 => INTERNAL_TEMPORAL_HISTORY_TABLE |
| descrição_tipo | Nvarchar(60) | Descrição do tipo DELETED_ROWS_TABLE -> Tabela interna que controla linhas excluídas para um índice columnstore USER_TABLE -> Tabela que contém os dados do usuário em linha DICTIONARIES_TABLE -> Dicionários para um índice columnstore SEGMENTS_TABLE -> Segmentos compactados para um índice columnstore ROW_GROUPS_INFO_TABLE -> Metadados sobre grupos de linhas compactadas de um índice columnstore INTERNAL OFF-ROW DATA TABLE -> Tabela interna usada para armazenamento de uma coluna fora da linha. Neste caso, minor_id reflete a column_id. INTERNAL_TEMPORAL_HISTORY_TABLE -> Hot tail da tabela de histórico baseada em disco. As linhas inseridas no histórico são inseridas primeiro nesta tabela interna otimizada para memória. Há uma tarefa em segundo plano que move linhas de forma assíncrona dessa tabela interna para a tabela de histórico baseada em disco. |
| minor_id | int | 0 indica um usuário ou tabela interna Não-0 indica a ID de uma coluna armazenada fora da linha. Junta-se com column_id em sys.columns. Cada coluna armazenada fora da linha tem uma linha correspondente nesta visualização do sistema. |
Permissions
A visibilidade dos metadados nas visualizações de catálogo é limitada aos itens de segurança que um utilizador possui ou nos quais o utilizador recebeu alguma permissão. Para obter mais informações, consulte Configuração de visibilidade de metadados.
Examples
A. Retornando todas as colunas armazenadas fora da linha
O seguinte script T-SQL ilustra uma tabela com várias colunas grandes não LOB e uma única coluna 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
A consulta a seguir mostra todas as colunas armazenadas fora da linha, juntamente com seus tamanhos. Um tamanho de -1 indica uma coluna LOB. Todas as colunas LOB são armazenadas fora da linha de dados principal.
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. Retornando o consumo de memória de todas as colunas armazenadas fora da linha
Para obter mais detalhes sobre o consumo de memória de colunas fora de linha, você pode usar a seguinte consulta, que mostra o consumo de memória de todas as tabelas internas e seus índices usados para armazenar as colunas fora de linha:
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. Retornando o consumo de memória de índices columnstore em tabelas com otimização de memória
Use a seguinte consulta para mostrar o consumo de memória de índices columnstore em tabelas com otimização de memória:
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 a seguinte consulta para detalhar o consumo de memória entre estruturas internas usadas para índices columnstore em tabelas com otimização de memória:
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)