Compartilhar via


sys.internal_tables (Transact-SQL)

Aplica-se:SQL Server

Retorna uma linha para cada objeto que é uma tabela interna. As tabelas internas são geradas automaticamente pelo SQL Server para dar suporte a 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 do documento XML fragmentado. Tabelas internas aparecem no sys esquema de cada banco de dados e têm nomes exclusivos gerados pelo sistema que indicam sua função, por exemplo, xml_index_nodes_2021582240_32001 ou queue_messages_1977058079.

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.
internal_type tinyint Tipo da tabela interna:

3 = QUERY_DISK_STORE_QUERY_HINTS
4 = QUERY_DISK_STORE_QUERY_TEMPLATE_PARAMETERIZATION
6 = QUERY_DISK_STORE_WAIT_STATS
201 = QUEUE_MESSAGES
202 = XML_INDEX_NODES
203 = FULLTEXT_CATALOG_FREELIST
204 = FULLTEXT_INDEX_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
220 = CONTAINED_FEATURES
225 = FILETABLE_UPDATES
236 = SELECTIVE_XML_INDEX_NODE_TABLE
240 = QUERY_DISK_STORE_QUERY_TEXT
241 = QUERY_DISK_STORE_QUERY
242 = QUERY_DISK_STORE_PLAN
243 = QUERY_DISK_STORE_RUNTIME_STATS
244 = QUERY_DISK_STORE_RUNTIME_STATS_INTERVAL
245 = QUERY_CONTEXT_SETTINGS
internal_type_desc nvarchar(60) Descrição do tipo de tabela interna:

QUERY_DISK_STORE_QUERY_HINTS
QUERY_DISK_STORE_QUERY_TEMPLATE_PARAMETERIZATION
QUERY_DISK_STORE_WAIT_STATS
QUEUE_MESSAGES
XML_INDEX_NODES
FULLTEXT_CATALOG_FREELIST
FULLTEXT_INDEX_MAP
QUERY_NOTIFICATION
SERVICE_BROKER_MAP
EXTENDED_INDEXES
FILESTREAM_TOMBSTONE
CHANGE_TRACKING
TRACKED_COMMITTED_TRANSACTIONS
CONTAINED_FEATURES
FILETABLE_UPDATES
SELECTIVE_XML_INDEX_NODE_TABLE
QUERY_DISK_STORE_QUERY_TEXT
QUERY_DISK_STORE_QUERY
QUERY_DISK_STORE_PLAN
QUERY_DISK_STORE_RUNTIME_STATS
QUERY_DISK_STORE_RUNTIME_STATS_INTERVAL
QUERY_CONTEXT_SETTINGS
parent_id int ID do pai, independentemente de ter escopo de esquema ou não. Caso contrário, 0 se não houver pai.

queue_messages = object_id da 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_notificationou service_broker_map = 0

extended_indexes = object_id de um índice estendido, como um índice espacial

object_id da tabela para a qual o controle 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 espacial

0 = queue_messages, fulltext_catalog_freelist, fulltext_index_map, query_notification, service_broker_mapou 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.

As tabelas internas não contêm dados acessíveis ao usuário e seu esquema é fixo e inalterável. Não é possível referenciar 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.

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 Metadata Visibility Configuration.

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 para retornar o número de páginas que as tabelas internas consomem para dados LOB (objetos grandes, fora de linha e em linha).

É possível usar o procedimento do sistema sp_spaceused para retornar dados de uso de espaço para tabelas internas. sp_spaceused relata o espaço interno da tabela 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, índices espaciais e índices de texto completo são incluídas na index_size coluna. Quando um nome de tabela ou exibição indexada é especificado, as páginas dos índices XML, índices espaciais e índices de texto completo para esse objeto sã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.

R. 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
     INNER JOIN sys.columns AS col
         ON itab.object_id = col.object_id
     INNER 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
     INNER 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
     INNER 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
     INNER 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)
     INNER JOIN sys.partitions AS p
         ON p.object_id = idx.object_id
        AND p.index_id = idx.index_id
     INNER 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
     INNER JOIN sys.tables AS t
         ON it.parent_id = t.object_id
     INNER 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
     INNER JOIN sys.service_queues AS q
         ON it.parent_id = q.object_id
WHERE it.internal_type_desc = 'QUEUE_MESSAGES';
GO

Eu. 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