다음을 통해 공유


sys.internal_tables(Transact-SQL)

내부 테이블인 각 개체당 한 개의 행을 반환합니다. 내부 테이블은 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

내부 테이블의 유형입니다.

201 = queue_messages

202 = xml_index_nodes

203 = fulltext_catalog_freelist

204 = fulltext_catalog_map

205 = query_notification

206 = service_broker_map

207 = extended_indexes(예: 공간 인덱스)

208 = filestream_tombstone

209 = change_tracking

210 = tracked_committed_transactions

internal_type_desc

nvarchar(60)

내부 테이블의 유형에 대한 설명입니다.

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

parent_id

int

부모의 ID입니다(스키마 범위 여부에 관계없이). 부모가 없는 경우 0입니다.

queue_messages = 큐의 object_id

xml_index_nodes = XML 인덱스의 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_index_nodes = XML 인덱스의 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(Large Object) 데이터를 보관하는 데이터 공간(파일 그룹 또는 파티션 구성표)의 ID입니다.

filestream_data_space_id

int

나중에 사용하도록 예약되어 있습니다.

사용 권한

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

주의

내부 테이블은 부모 엔터티와 동일한 파일 그룹에 저장됩니다. 아래의 예 6에 표시된 카탈로그 쿼리를 사용하여 내부 테이블에서 행 내부, 행 외부 및 LOB(Large Object) 데이터에 사용되는 페이지 수를 반환할 수 있습니다.

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

  • 큐 이름을 지정하면 큐와 연결된 기본 내부 테이블을 참조하여 해당 저장소 사용을 보고합니다.

  • XML 인덱스, 공간 인덱스 및 전체 텍스트 인덱스의 내부 테이블에서 사용하는 페이지는 index_size 열에 포함됩니다. 테이블 또는 인덱싱된 뷰 이름을 지정하면 해당 개체의 XML 인덱스, 공간 인덱스 및 전체 텍스트 인덱스에 대한 페이지가 reservedindex_size 열에 포함됩니다.

다음 예에서는 카탈로그 뷰를 사용하여 내부 테이블 메타데이터를 쿼리하는 방법을 보여 줍니다.

1.sys.objects 카탈로그 뷰에서 열을 상속하는 내부 테이블 표시

SELECT * FROM sys.objects WHERE type = 'IT';

2.모든 내부 테이블 메타데이터 반환(sys.objects에서 상속된 메타데이터 포함)

SELECT * FROM sys.internal_tables;

3.내부 테이블 열과 열 데이터 형식 반환

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;

4.내부 테이블 인덱스 반환

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;

5.내부 테이블 통계 반환

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;

6.내부 테이블 파티션 및 할당 단위 정보 반환

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;

7.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

8.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

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

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

참고 항목

참조

카탈로그 뷰(Transact-SQL)

개체 카탈로그 뷰(Transact-SQL)