Partilhar via


sys.internal_tables (Transact-SQL)

Retorna uma linha para cada objeto que é uma tabela interna. As tabelas internas são geradas automaticamente por meio de SQL Server para oferecer vários recursos. Por exemplo, quando você cria um índice XML primário, o SQL Server cria automaticamente uma tabela interna para manter os dados fragmentados do documento XML. As tabelas internas aparecem no esquema sys de cada um dos bancos de dados e têm nomes únicos gerados pelo sistema que indicam sua função, por exemplo, xml_index_nodes_2021582240_32001 ou queue_messages_1977058079

As tabelas internas não contêm dados acessíveis ao usuário, e seus esquemas são fixos e inalteráveis. Você não pode fazer referências a nomes de tabelas internas em instruções Transact-SQL. Por exemplo, você não pode executar uma instrução como SELECT * FROM <sys.internal_table_name>. Entretanto, você pode consultar as exibições do catálogo para ver os metadados das tabelas internas.

Nome da coluna

Tipo de dados

Descrição

<Colunas herdadas de sys.objects>

 

Para obter uma lista de colunas herdadas por essa exibição, consulte sys.objects (Transact-SQL).

internal_type

tinyint

Tipo da tabela interna:

201 = queue_messages

202 = xml_index_nodes

203 = fulltext_catalog_freelist

204 = fulltext_catalog_map

205 = query_notification

206 = service_broker_map

207 = extended_indexes (como um índice espacial)

208 = filestream_tombstone

209 = change_tracking

210 = tracked_committed_transactions

internal_type_desc

nvarchar(60)

Descrição do tipo de tabela interna:

QUEUE_MESSAGES

XML_INDEX_NODES

FULLTEXT_CATALOG_FREELIST

FULLTEXT_CATALOG_MAP

QUERY_NOTIFICATION

SERVICE_BROKER_MAP

EXTENDED_INDEXES

FILESTREAM_TOMBSTONE

CHANGE_TRACKING

TRACKED_COMMITTED_TRANSACTIONS

parent_id

int

ID do pai, independentemente de ser um escopo de esquema ou não. Caso contrário, 0 se não houver nenhum pai.

queue_messages = object_id de fila

xml_index_nodes = object_id do índice xml

fulltext_catalog_freelist = fulltext_catalog_id do catálogo de texto completo

fulltext_index_map = object_id do índice de texto completo

query_notification ou service_broker_map = 0

extended_indexes = object_id de um índice estendido, como um índice de espaço

object_id da tabela para a qual o rastreamento de tabela está habilitado = change_tracking

parent_minor_id

int

ID secundária do pai.

xml_index_nodes = index_id do índice XML

extended_indexes = index_id de um índice estendido, como um índice de espaço

0 = queue_messages, fulltext_catalog_freelist, fulltext_index_map, query_notification, service_broker_map ou change_tracking

lob_data_space_id

int

O valor diferente de zero é a ID do espaço de dados (esquema de partição ou grupo de arquivos) que armazena os dados de objeto grandes (LOB) dessa tabela.

filestream_data_space_id

int

Reservado para uso futuro.

Permissões

A visibilidade dos metadados em exibições do catálogo está limitada aos protegíveis que pertencem a um usuário ou para os quais o usuário recebeu permissão. Para obter mais informações, consulte Configuração de visibilidade de metadados.

Comentários

Tabelas internas são colocadas no mesmo grupo de arquivos da entidade de pai. Você pode usar a consulta de catálogo mostrada no Exemplo F abaixo para retornar o número de páginas que as tabelas internas consomem para dados de dentro da linha, fora da linha, e de objetos grandes (LOB).

Você pode usar o procedimento de sistema sp_spaceused para retornar dados de uso de espaço para tabelas internas. O sp_spaceused relata espaço de tabela interno das seguintes maneiras:

  • Quando um nome de fila é especificado, a tabela interna subjacente associada à fila é referenciada, e seu consumo de armazenamento é reportado.

  • Páginas usadas pelas tabelas internas de índices XML, espaciais e de texto completo são incluídas na coluna index_size. Quando um nome para exibição indexada ou tabela for especificado, as páginas dos índices XML, espaciais e de texto completo daquele objeto serão incluídas nas colunas reserved e index_size.

Exemplos

Os exemplos seguintes demonstram como consultar metadados de tabela interna usando as exibições do catálogo.

A.Mostrar tabelas internas que herdam colunas da exibição do catálogo sys.objects

SELECT * FROM sys.objects WHERE type = 'IT';

B.Retorna todos os metadados de tabela interna (inclusive os herdados de sys.objects)

SELECT * FROM sys.internal_tables;

C.Retorna as colunas de tabela interna e os tipos de dados da coluna

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    ,itab.name AS internal_table_name
    ,typ.name AS column_data_type 
    ,col.*
FROM sys.internal_tables AS itab
JOIN sys.columns AS col ON itab.object_id = col.object_id
JOIN sys.types AS typ ON typ.user_type_id = col.user_type_id
ORDER BY itab.name, col.column_id;

D.Retorna os índices de tabela interna

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    , itab.name AS internal_table_name
    , idx.*
FROM sys.internal_tables AS itab
JOIN sys.indexes AS idx ON itab.object_id = idx.object_id
ORDER BY itab.name, idx.index_id;

E.Retorna as estatísticas da tabela interna

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    ,itab.name AS internal_table_name
    , s.*
FROM sys.internal_tables AS itab
JOIN sys.stats AS s ON itab.object_id = s.object_id
ORDER BY itab.name, s.stats_id;

F.Retorna a partição da tabela interna e informações da unidade de alocação

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    ,itab.name AS internal_table_name
    ,idx.name AS heap_or_index_name
    ,p.*
    ,au.*
FROM sys.internal_tables AS itab
JOIN sys.indexes AS idx
--     JOIN to the heap or the clustered index
    ON itab.object_id = idx.object_id AND idx.index_id IN (0,1)
JOIN   sys.partitions AS p 
    ON p.object_id = idx.object_id AND p.index_id = idx.index_id
JOIN   sys.allocation_units AS au
--     IN_ROW_DATA (type 1) and ROW_OVERFLOW_DATA (type 3) => JOIN to partition's Hobt
--     else LOB_DATA (type 2) => JOIN to the partition ID itself.
ON au.container_id =  
    CASE au.type 
        WHEN 2 THEN p.partition_id 
        ELSE p.hobt_id 
    END
ORDER BY itab.name, idx.index_id;

G.Retorna os metadados da tabela interna para os índices XML

SELECT t.name AS parent_table
    ,t.object_id AS parent_table_id
    ,it.name AS internal_table_name
    ,it.object_id AS internal_table_id
    ,xi.name AS primary_XML_index_name
    ,xi.index_id as primary_XML_index_id
FROM sys.internal_tables AS it
JOIN sys.tables AS t 
    ON it.parent_id = t.object_id
JOIN sys.xml_indexes AS xi 
    ON it.parent_id = xi.object_id
    AND it.parent_minor_id  = xi.index_id
WHERE it.internal_type_desc = 'XML_INDEX_NODES';
GO

H.Retorna os metadados da tabela interna para as filas do Service Broker

SELECT q.name AS queue_name
    ,q.object_id AS queue_id
    ,it.name AS internal_table_name
    ,it.object_id AS internal_table_id
FROM sys.internal_tables AS it
JOIN sys.service_queues  AS  q ON it.parent_id = q.object_id
WHERE it.internal_type_desc = 'QUEUE_MESSAGES';
GO

I.Retorna os metadados de tabela interna para todos os serviços do Service Broker

SELECT * 
FROM tempdb.sys.internal_tables 
WHERE internal_type_desc = 'SERVICE_BROKER_MAP';
GO

Consulte também

Referência

Exibições de catálogo (Transact-SQL)

Exibições do catálogo de objeto (Transact-SQL)