다음을 통해 공유


sys.internal_tables(Transact-SQL)

적용 대상:SQL Server

내부 테이블인 각 개체에 대해 하나의 행을 반환합니다. 내부 테이블은 다양한 기능을 지원하기 위해 SQL Server에서 자동으로 생성됩니다. 예를 들어 기본 XML 인덱스 만들 때 SQL Server는 자동으로 내부 테이블을 만들어 파쇄된 XML 문서 데이터를 유지합니다. 내부 테이블은 sys 모든 데이터베이스의 스키마에 표시되며, 예를 들어 xml_index_nodes_2021582240_32001queue_messages_1977058079해당 함수를 나타내는 고유한 시스템 생성 이름이 있습니다.

열 이름 데이터 형식 설명
상속된 열 sys.objects 이 보기에서 상속하는 열 목록은 sys.objects를 참조하세요.
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
204 = FULLTEXT_INDEX_MAP
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_INDEX_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_index_nodes = object_id XML 인덱스의

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_index_nodes = index_id XML 인덱스의
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 향후 사용을 위해 예약되어 있습니다.

내부 테이블에는 사용자가 액세스할 수 있는 데이터가 포함되지 않으며 해당 스키마는 고정되고 변환할 수 없습니다. Transact-SQL 문에서는 내부 테이블 이름을 참조할 수 없습니다. 예를 들어 다음과 같은 SELECT * FROM <sys.internal_table_name>문을 실행할 수 없습니다. 그러나 카탈로그 뷰를 쿼리하여 내부 테이블의 메타데이터를 볼 수 있습니다.

사용 권한

사용자가 소유하고 있거나 사용 권한을 부여 받은 보안 개체에 대해서만 카탈로그 뷰의 메타데이터를 볼 수 있습니다. 자세한 내용은 Metadata Visibility Configuration을 참조하세요.

설명

내부 테이블은 부모 엔터티와 동일한 파일 그룹에 배치됩니다. 예제 F에 표시된 카탈로그 쿼리를 사용하여 내부 테이블이 행 내, 행 외부 및 LOB(큰 개체) 데이터에 사용하는 페이지 수를 반환할 수 있습니다.

sp_spaceused 시스템 프로시저를 사용하여 내부 테이블에 대한 공간 사용량 현황 데이터를 반환할 수 있습니다. sp_spaceused 는 다음과 같은 방법으로 내부 테이블 공간을 보고합니다.

  • 큐 이름을 지정하면 큐와 연결된 기본 내부 테이블이 참조되고 해당 스토리지 사용량이 보고됩니다.

  • XML 인덱스, 공간 인덱스 및 전체 텍스트 인덱스의 내부 테이블에서 사용되는 페이지가 열에 index_size 포함됩니다. 테이블 또는 인덱싱된 뷰 이름을 지정하면 해당 개체의 XML 인덱스, 공간 인덱스 및 전체 텍스트 인덱스의 페이지가 열 reservedindex_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
     INNER JOIN sys.columns AS col
         ON itab.object_id = col.object_id
     INNER 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
     INNER 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
     INNER 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
     INNER 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)
     INNER JOIN sys.partitions AS p
         ON p.object_id = idx.object_id
        AND p.index_id = idx.index_id
     INNER 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
     INNER JOIN sys.tables AS t
         ON it.parent_id = t.object_id
     INNER 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
     INNER JOIN sys.service_queues AS q
         ON it.parent_id = q.object_id
WHERE it.internal_type_desc = 'QUEUE_MESSAGES';
GO

9\. 모든 Service Broker 서비스에 대한 내부 테이블 메타데이터 반환

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