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 ステートメントで内部テーブル名を参照することはできません。 たとえば、Standard Edition LECT * 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

Standard Edition LECTIVE_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_Standard Edition TTINGS
parent_id int スキーマ スコープかどうかに関係なく、親の ID。 それ以外の場合は、親がない場合は 0。

= キューのobject_idをqueue_messagesする

= xml インデックスのobject_idをxml_index_nodesする

= フルテキスト カタログのfulltext_catalog_idをfulltext_catalog_freelistする

= フルテキスト インデックスのobject_idをfulltext_index_mapする

query_notification、または service_broker_map = 0

= 空間インデックスなどの拡張インデックスのobject_idをextended_indexesする

テーブル追跡が有効になっているテーブルのobject_id = change_tracking
parent_minor_id int 親のマイナー ID。

= XML インデックスのindex_idをxml_index_nodesする

= 空間インデックスなどの拡張インデックスのindex_idをextended_indexesする

0 = queue_messagesfulltext_catalog_freelistfulltext_index_mapquery_notificationservice_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  

参照

カタログ ビュー (Transact-SQL)
オブジェクト カタログ ビュー (Transact-SQL)