sys.internal_tables (Transact-SQL)
適用対象: SQL Server
内部テーブルであるオブジェクトごとに 1 行を返します。 内部テーブルは、さまざまな機能をサポートするために 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 | スキーマ スコープかどうかに関係なく、親の ID。 それ以外の場合は、親がない場合は 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 | 親のマイナー ID。 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 | 0 以外の値は、このテーブルのラージ オブジェクト (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