Condividi tramite


sys.internal_tables (Transact-SQL)

Restituisce una riga per ogni oggetto che rappresenta una tabella interna. Le tabelle interne vengono generate automaticamente da SQL Server per supportare varie caratteristiche. Quando ad esempio si crea un indice XML primario, SQL Server crea automaticamente una tabella interna per rendere persistenti i dati del documento XML suddiviso. Le tabelle interne vengono visualizzate nello schema sys di ogni database e dispongono di nomi univoci, generati dal sistema che ne indicano la funzione, ad esempio, xml_index_nodes_2021582240_32001 o queue_messages_1977058079.

Le tabelle interne non includono dati accessibili all'utente e i loro schemi sono fissi e non modificabili. Non è possibile fare riferimento ai nomi delle tabelle interne nelle istruzioni Transact-SQL. Non è ad esempio possibile eseguire un'istruzione quale SELECT * FROM <sys.internal_table_name>. È tuttavia possibile eseguire query sulle viste del catalogo per vedere i metadati delle tabelle interne.

Nome della colonna

Tipo di dati

Descrizione

<Colonne ereditate da sys.objects>

 

Per un elenco delle colonne ereditate da questa vista, vedere sys.objects (Transact-SQL).

internal_type

tinyint

Tipo di tabella 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 (ad esempio un indice spaziale)

208 = filestream_tombstone

209 = change_tracking

210 = tracked_committed_transactions

internal_type_desc

nvarchar(60)

Descrizione del tipo di tabella 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 del padre, indipendentemente dal fatto che sia definito o meno a livello di ambito dello schema. 0 in assenza del 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_notification o service_broker_map = 0

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

object_id della tabella per cui è attivo il rilevamento della tabella = 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_notification, service_broker_map o change_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 per utilizzi futuri.

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 ulteriori informazioni, vedere Configurazione della visibilità dei metadati.

Osservazioni

Le tabelle interne sono collocate nello stesso filegroup dell'entità padre. È possibile utilizzare la query del catalogo illustrata nell'esempio F seguente per restituire il numero di pagine utilizzate dalle tabelle interne per i dati all'interno di righe, all'esterno di righe e LOB (Large Object).

È possibile utilizzare la procedura di sistema sp_spaceused per restituire i dati relativi all'utilizzo dello spazio per le tabelle interne. sp_spaceused indica lo spazio nelle tabelle interne 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, spaziali e full-text vengono incluse nella colonna index_size. Quando viene specificato il nome di una tabella o vista indicizzata, le pagine per gli indici XML, spaziali e full-text per l'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.

A.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
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.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
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
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
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.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
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.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
JOIN sys.service_queues  AS  q ON it.parent_id = q.object_id
WHERE it.internal_type_desc = 'QUEUE_MESSAGES';
GO

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

Vedere anche

Riferimento

Viste del catalogo (Transact-SQL)

Viste del catalogo per gli oggetti (Transact-SQL)