적용 대상:SQL Server
내부 테이블인 각 개체에 대해 하나의 행을 반환합니다. 내부 테이블은 다양한 기능을 지원하기 위해 SQL Server에서 자동으로 생성됩니다. 예를 들어 기본 XML 인덱스 만들 때 SQL Server는 자동으로 내부 테이블을 만들어 파쇄된 XML 문서 데이터를 유지합니다. 내부 테이블은 sys
모든 데이터베이스의 스키마에 표시되며, 예를 들어 xml_index_nodes_2021582240_32001
queue_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 인덱스, 공간 인덱스 및 전체 텍스트 인덱스의 페이지가 열reserved
에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
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