Поделиться через


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

Идентификатор родителя, независимо от того, находится он в пределах области видимости схемы или нет. Принимает значение 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

Вспомогательный идентификатор родителя.

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

Ненулевое значение — идентификатор пространства данных (файловая группа или схема секционирования), хранящего данные больших объектов (LOB) для этой таблицы.

filestream_data_space_id

int

Зарезервировано для последующего использования.

Разрешения

Видимость метаданных в представлениях каталогов ограничивается защищаемыми объектами, которыми пользователь владеет или на которые ему были предоставлены разрешения. Дополнительные сведения см. в разделе Настройка видимости метаданных.

Замечания

Внутренние таблицы размещаются в той же файловой группе, что и родительская сущность. С помощью запроса к каталогу, проиллюстрированного далее в примере Е, можно узнать количество страниц, занимаемых внутренними таблицами под хранение данных «в строке», «вне строки» и данных больших объектов (LOB).

Вы можете использовать системную процедуру sp_spaceused для возвращения данных об использовании места для внутренних таблиц. sp_spaceused сообщает, какое место занимают внутренние таблицы, следующим образом.

  • При указании имени запроса базовая внутренняя таблица, связанная с запросом, находится по ссылке и сообщается объем пространства, занятого ей.

  • Страницы, используемые внутренними таблицами XML-индексов, пространственных индексов и полнотекстовых индексов, включаются в столбец index_size. При указании имени таблицы или индексированного представления страницы, используемые XML-индексами, пространственными индексами и полнотекстовыми индексами этого объекта, включаются в столбцы reserved и index_size.

Примеры

Следующие примеры демонстрируют, как обратиться с запросом к метаданным внутренней таблицы с помощью представлений каталога.

А.Показывает внутренние таблицы, наследующие столбцы от представления каталога sys.objects

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

Б.Возвращает все метаданные внутренней таблицы (в том числе те, которые наследуются от представления каталога sys.objects)

SELECT * FROM sys.internal_tables;

В.Возвращает столбцы и типы данных столбцов внутренней таблицы

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;

Г.Возвращает индексы внутренней таблицы

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;

Д.Возвращает статистику внутренней таблицы

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;

Е.Возвращает информацию о секциях и единицах распределения внутренней таблицы

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;

Ж.Возвращает метаданные внутренней таблицы для 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

З.Возвращает метаданные внутренней таблицы для очередей компонента 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

И.Возвращает метаданные внутренней таблицы для всех служб компонента Service Broker

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

См. также

Справочник

Представления каталога (Transact-SQL)

Представления каталога объектов (Transact-SQL)