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


sys.internal_tables (Transact-SQL)

Область применения: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 Идентификатор родительского объекта независимо от того, является ли он областью действия схемы. В противном случае, 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_mapquery_notificationservice_broker_mapилиchange_tracking
lob_data_space_id int Ненулевое значение — идентификатор пространства данных (файловая группа или схема секционирования), хранящего данные больших объектов (LOB) для этой таблицы.
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.

Примеры

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

А. Показывает внутренние таблицы, наследующие столбцы от представления каталога 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
     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;

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

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;

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

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

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

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