sys.internal_tables (Transact-SQL)
Область применения: SQL Server
Возвращает одну строку для каждого объекта какой-либо внутренней таблицы. Внутренние таблицы автоматически создаются SQL Server для поддержки различных функций. Например, при создании первичного XML-индекса SQL Server автоматически создает внутреннюю таблицу для сохранения измельченных данных XML-документа. Внутренние таблицы отображаются в схеме sys каждой базы данных и имеют уникальные, системные имена, указывающие их функцию, например xml_index_nodes_2021582240_32001 или queue_messages_1977058079
Данные внутренних таблиц недоступны для пользователей, а их схема является жесткой и неизменной. Нельзя ссылаться на имена внутренних таблиц в инструкциях Transact-SQL. Например, нельзя выполнить инструкцию, например SELECT * FROM <sys.internal_table_name>. Однако можно обращаться с запросами к представлениям каталогов для просмотра метаданных внутренних таблиц.
Имя столбца | Тип данных | Description |
---|---|---|
<Столбцы, унаследованные от sys.objects> | Список столбцов, наследуемых этим представлением, см. в разделе sys.objects (Transact-SQL). | |
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 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_CATALOG_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_map, query_notification, service_broker_map или change_tracking |
lob_data_space_id | int | Ненулевое значение — идентификатор пространства данных (файловая группа или схема секционирования), хранящего данные больших объектов (LOB) для этой таблицы. |
filestream_data_space_id | int | Зарезервировано для последующего использования. |
Разрешения
Видимость метаданных в представлениях каталога ограничена защищаемыми объектами, которыми владеет пользователь или которым пользователь получил некоторое разрешение. Дополнительные сведения см. в разделе Metadata Visibility Configuration.
Замечания
Внутренние таблицы размещаются в той же файловой группе, что и родительская сущность. С помощью запроса к каталогу, проиллюстрированного далее в примере Е, можно узнать количество страниц, занимаемых внутренними таблицами под хранение данных «в строке», «вне строки» и данных больших объектов (LOB).
Для возврата данных об использовании пространства для внутренних таблиц можно использовать системную процедуру sp_spaceused . sp_spaceused сообщает внутреннее пространство таблицы следующим образом:
При указании имени запроса базовая внутренняя таблица, связанная с запросом, находится по ссылке и сообщается объем пространства, занятого ей.
Страницы, используемые внутренними таблицами XML-индексов, пространственных индексов и полнотекстовых индексов, включаются в столбец index_size . При указании имени таблицы или индексированного представления страницы xml-индексов, пространственных индексов и полнотекстовых индексов для этого объекта включаются в столбцы , зарезервированные и index_size.
Примеры
Следующие примеры демонстрируют, как обратиться с запросом к метаданным внутренней таблицы с помощью представлений каталога.
А. Показывает внутренние таблицы, наследующие столбцы от представления каталога 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
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;
D. Возвращает индексы внутренней таблицы
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;
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
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;
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
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
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
JOIN sys.service_queues AS q ON it.parent_id = q.object_id
WHERE it.internal_type_desc = 'QUEUE_MESSAGES';
GO
I. Возвращает метаданные внутренней таблицы для всех служб компонента Service Broker
SELECT *
FROM tempdb.sys.internal_tables
WHERE internal_type_desc = 'SERVICE_BROKER_MAP';
GO
См. также
Представления каталога (Transact-SQL)
Представления каталога объектов (Transact-SQL)