Compartir a través de


sys.internal_tables (Transact-SQL)

Devuelve una fila por cada objeto que es una tabla interna. Las tablas internas son generadas de forma automática por SQL Server a fin de permitir varias características. Por ejemplo, cuando se crea un índice XML principal, SQL Server crea automáticamente una tabla interna para hacer que persistan los datos del documento XML dividido. Las tablas internas aparecen en el esquema sys de cada base de datos y tienen nombres únicos y generados por el sistema que indican su función, por ejemplo, xml_index_nodes_2021582240_32001 o queue_messages_1977058079.

Las tablas internas no contienen datos accesibles para el usuario y su esquema es fijo e inalterable. No se puede hacer referencia a los nombres de las tablas internas en las instrucciones de Transact-SQL. Por ejemplo, no puede ejecutar una instrucción como SELECT * FROM <sys.internal_table_name>. Sin embargo, se pueden consultar vistas de catálogo para ver los metadatos de las tablas internas.

Nombre de columna

Tipo de datos

Descripción

<Columnas heredadas de sys.objects>

 

Para obtener una lista de las columnas que hereda esta vista, vea sys.objects (Transact-SQL).

internal_type

tinyint

Tipo de la tabla 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 un índice espacial)

208 = filestream_tombstone

209 = change_tracking

210 = tracked_committed_transactions

internal_type_desc

nvarchar(60)

Descripción del tipo de tabla 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 primario, independientemente de si es de ámbito de esquema o no. Es 0 si no hay primario.

queue_messages = object_id de la cola

xml_index_nodes = object_id del índice xml

fulltext_catalog_freelist = fulltext_catalog_id del catálogo de texto completo

fulltext_index_map = object_id del índice de texto completo

query_notification o service_broker_map = 0

extended_indexes = object_id de un índice extendido, como un índice espacial

object_id de la tabla para la que el seguimiento de tabla está habilitado = change_tracking

parent_minor_id

int

Id. secundario del primario.

xml_index_nodes = index_id del índice XML

extended_indexes = index_id de un índice extendido, como un índice espacial

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

lob_data_space_id

int

Un valor distinto de cero es el Id. del espacio de datos (grupo de archivos o esquema de partición) que almacena los datos de objetos grandes (LOB) para esta tabla.

filestream_data_space_id

int

Reservado para uso futuro.

Permisos

La visibilidad de los metadatos en las vistas de catálogo se limita a los elementos protegibles y que son propiedad de un usuario o sobre los que el usuario tiene algún permiso. Para obtener más información, vea Configuración de visibilidad de los metadatos.

Observaciones

Las tablas internas se colocan en el mismo grupo de archivos que la entidad primaria. Puede usar la consulta del catálogo que se muestra en el ejemplo F a continuación para devolver el número de páginas que usan las tablas internas para los datos almacenados consecutivamente, no consecutivamente y de objetos grandes (LOB).

Puede utilizar el procedimiento del sistema de sp_spaceused para devolver datos de uso de espacio de las tablas internas. sp_spaceused informa del espacio de las tablas internas de informes de las maneras siguientes:

  • Cuando se especifica un nombre de cola, se hace referencia a la tabla interna subyacente asociada a la cola y se informa del consumo del almacenamiento.

  • Las páginas que se utilizan en las tablas internas de índices XML, índices espaciales e índices de texto completo se incluyen en la columna index_size. Cuando se especifica el nombre de una vista indizada o de una tabla, las páginas de los índices XML, espaciales y de texto completo para dicho objeto se incluyen en las columnas reserved e index_size.

Ejemplos

En los ejemplos siguientes se demuestra cómo consultar los metadatos de las tablas internas de consulta mediante vistas de catálogo.

A.Mostrar las tablas internas que heredan las columnas de la vista de catálogo sys.objects

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

B.Devolver todos los metadatos de las tablas internas (incluido los que se heredan de sys.objects)

SELECT * FROM sys.internal_tables;

C.Devolver las columnas de las tablas internas y los tipos de datos de las columnas

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.Devolver los índices de las tablas internas

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.Devolver estadísticas de las tablas internas

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.Devolver información de la unidad de asignación y de la partición de las tablas internas

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.Devolver los metadatos de las tablas internas para los í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.Devolver los metadatos de las tablas internas para las colas de 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.Devolver los metadatos de las tablas internas para todos los servicios de Service Broker

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

Vea también

Referencia

Vistas de catálogo (Transact-SQL)

Vistas de catálogo de objetos (Transact-SQL)