Condividi tramite


sys.internal_tables (Transact-SQL)

Si applica a:SQL Server

Restituisce una riga per ogni oggetto che rappresenta una tabella interna. Le tabelle interne vengono generate automaticamente da SQL Server per supportare varie funzionalità. Ad esempio, quando si crea un indice XML primario, SQL Server crea automaticamente una tabella interna per rendere persistenti i dati dei documenti XML eliminati. Le tabelle interne vengono visualizzate nello sys schema di ogni database e hanno nomi univoci generati dal sistema che indicano la funzione, xml_index_nodes_2021582240_32001 ad esempio o queue_messages_1977058079.

Nome colonna Tipo di dati Descrizione
Colonne ereditate da sys.objects Per un elenco di colonne ereditate da questa vista, vedere sys.objects.
internal_type tinyint Tipo di tabella 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 (ad esempio un indice spaziale)
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) Descrizione del tipo di tabella 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 dell'elemento padre, indipendentemente dal fatto che sia con ambito schema o meno. In caso contrario, 0 se non è presente alcun elemento padre.

queue_messages = object_id della coda

xml_index_nodes = object_id dell'indice XML

fulltext_catalog_freelist = fulltext_catalog_id del catalogo full-text

fulltext_index_map = object_id dell'indice full-text

query_notificationo service_broker_map = 0

extended_indexes = object_id di un indice esteso, ad esempio un indice spaziale

object_id della tabella per cui è abilitato il rilevamento delle tabelle = change_tracking
parent_minor_id Int ID secondario del padre.

xml_index_nodes = index_id dell'indice XML
extended_indexes = index_id di un indice esteso, ad esempio un indice spaziale

0 = queue_messages, fulltext_catalog_freelist, fulltext_index_map, query_notificationservice_broker_map, , ochange_tracking
lob_data_space_id Int Un valore diverso da zero rappresenta l'ID dello spazio dei dati (filegroup o schema di partizione) contenente i dati LOB (Large Object) per questa tabella.
filestream_data_space_id Int Riservato a un uso futuro.

Le tabelle interne non contengono dati accessibili dall'utente e il relativo schema è fisso e non modificabile. Non è possibile fare riferimento ai nomi di tabella interni nelle istruzioni Transact-SQL. Ad esempio, non è possibile eseguire un'istruzione come SELECT * FROM <sys.internal_table_name>. È tuttavia possibile eseguire query sulle viste del catalogo per vedere i metadati delle tabelle interne.

Autorizzazioni

La visibilità dei metadati nelle viste del catalogo è limitata alle entità a protezione diretta di cui l'utente è proprietario o per le quali dispone di autorizzazioni. Per altre informazioni, vedere Metadata Visibility Configuration.

Osservazioni:

Le tabelle interne sono collocate nello stesso filegroup dell'entità padre. È possibile usare la query di catalogo illustrata nell'esempio F per restituire il numero di pagine utilizzate per i dati loB (Large Object) in riga, out-of-row e large object.

È possibile utilizzare la procedura di sistema sp_spaceused per restituire i dati di utilizzo dello spazio per le tabelle interne. sp_spaceused segnala lo spazio interno della tabella nei modi seguenti:

  • Quando il nome di una coda è specificato, viene fatto riferimento alla tabella interna sottostante associata alla coda e viene indicato l'utilizzo dello spazio da parte della tabella.

  • Le pagine utilizzate dalle tabelle interne di indici XML, indici spaziali e indici full-text vengono incluse nella index_size colonna. Quando viene specificato un nome di tabella o vista indicizzata, le pagine per gli indici XML, gli indici spaziali e gli indici full-text per tale oggetto vengono incluse nelle colonne reserved e index_size.

Esempi

Negli esempi seguenti viene illustrato come eseguire query sui metadati delle tabelle interne utilizzando le viste del catalogo.

R. Visualizzazione delle tabelle interne che ereditano le colonne dalla vista del catalogo sys.objects

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

B. Restituzione di tutti i metadati delle tabelle interne, inclusi quelli ereditati da sys.objects

SELECT * FROM sys.internal_tables;

C. Restituzione delle colonne delle tabelle interne e dei tipi di dati colonna

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. Restituzione degli indici delle tabelle interne

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. Restituzione delle statistiche delle tabelle interne

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. Restituzione delle informazioni sulle partizioni e sulle unità di allocazione delle tabelle interne

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. Restituzione dei metadati delle tabelle interne per gli indici 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. Restituzione dei metadati delle tabelle interne per le code di 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

Io. Restituzione dei metadati delle tabelle interne per tutti i servizi di Service Broker

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