sys.internal_tables (Transact-SQL)
適用於:SQL Server
針對內部數據表的每個物件,各傳回一個數據列。 SQL Server 會自動產生內部數據表以支援各種功能。 例如,當您建立主要 XML 索引時,SQL Server 會自動建立內部資料表來保存已切割的 XML 文件數據。 內部數據表會出現在每個資料庫的 sys 架構中,並具有唯一且系統產生的名稱,指出其函式,例如xml_index_nodes_2021582240_32001或queue_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 | 父系的標識碼,不論其是否為架構範圍。 否則,如果沒有父代,則為 0。 佇列 = queue_messages object_id = xml 索引的xml_index_nodes object_id 全文檢索目錄的fulltext_catalog_freelist = fulltext_catalog_id 全文檢索索引的fulltext_index_map = object_id query_notification 或 service_broker_map = 0 = extended_indexes擴充索引object_id,例如空間索引 已啟用資料表追蹤的數據表object_id = change_tracking |
parent_minor_id | int | 父系的次要標識碼。 = XML 索引的xml_index_nodes index_id = 擴充索引的extended_indexes index_id,例如空間索引 0 = queue_messages、fulltext_catalog_freelist、fulltext_index_map、query_notification、service_broker_map或change_tracking |
lob_data_space_id | int | 非零值是保存此數據表之大型物件 (LOB) 資料空間的標識碼(檔案群組或數據分割配置)。 |
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