sys.internal_tables (Transact-SQL)

适用范围:SQL Server

为每个作为内部表的对象返回一行。 内部表由 SQL Server 自动生成,以支持各种功能。 例如,创建主 XML 索引时,SQL Server 会自动创建一个内部表来保存已碎的 XML 文档数据。 内部表显示在每个数据库的 sys 架构中,并具有唯一的系统生成名称,这些名称指示其函数,例如xml_index_nodes_2021582240_32001queue_messages_1977058079

内部表不包括用户可访问的数据,并且其架构是固定的,不可改变。 不能在 Transact-SQL 语句中引用内部表名称。 例如,不能执行 SELECT * FROM <sys.internal_table_name>等语句。 但是,可以查询目录视图以查看内部表的元数据。

列名称 数据类型 说明
<从 sys.objects 继承的列> 有关此视图所继承的列的列表,请参阅 sys.objects (Transact-SQL)
internal_type tinyint 内部表的类型:

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

205 = query_notification

206 = service_broker_map

207 = extended_indexes (例如空间索引)

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) 内部表的类型说明:

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_CATALOG_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,无论该父项的是否在架构范围内。 否则,其值为 0(如果没有父项)。

队列 = queue_messages object_id

= xml 索引的xml_index_nodes object_id

= 全文目录的fulltext_catalog_freelist fulltext_catalog_id

= 全文索引的fulltext_index_map object_id

query_notificationservice_broker_map = 0

= extended_indexes扩展索引(例如空间索引)的object_id

为其启用表跟踪的表的object_id = change_tracking
parent_minor_id int 父项的次要 ID。

= XML 索引的xml_index_nodes index_id

= extended_indexes扩展索引(例如空间索引)的index_id

0 = queue_messages、fulltext_catalog_freelist、fulltext_index_mapquery_notificationservice_broker_mapchange_tracking
lob_data_space_id int 对于该表,非零值是存放大型对象 (LOB) 数据的数据空间(文件组或分区方案)的 ID。
filestream_data_space_id int 保留供将来使用。

权限

目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 Metadata Visibility Configuration

注解

内部表与父实体位于同一文件组。 可以使用下面示例 F 中所示的目录查询返回内部表中用于行内数据、行外数据和大型对象 (LOB) 数据的页数。

可以使用 sp_spaceused 系统过程返回内部表的空间使用情况数据。 sp_spaceused通过以下方式报告内部表空间:

  • 当指定队列名称时,将引用与队列关联的基础内部表并报告其存储空间使用情况。

  • XML 索引、空间索引和全文索引的内部表使用的页包含在 index_size 列中。 指定表或索引视图名称时,该对象的 XML 索引、空间索引和全文索引的页面将包含在保留的列index_size中。

示例

下列示例说明如何使用目录视图查询内部表元数据。

A. 显示继承 sys.objects 目录视图中的列的内部表

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

B. 返回所有内部表元数据(包括从 sys.objects 继承的元数据)

SELECT * FROM sys.internal_tables;  

°C 返回内部表列和列数据类型

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. 返回内部表索引

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. 返回内部表统计信息

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. 返回内部表分区和分配单元信息

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. 返回 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. 返回 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. 返回所有 Service Broker 服务的内部表元数据

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

另请参阅

目录视图 (Transact-SQL)
对象目录视图 (Transact-SQL)