Sdílet prostřednictvím


sys.internal_tables (Transact-SQL)

platí pro:SQL Server

Vrátí jeden řádek pro každý objekt, který je interní tabulkou. Sql Server automaticky generuje interní tabulky, aby podporovaly různé funkce. Když například vytvoříte primární index XML, SQL Server automaticky vytvoří interní tabulku, která bude uchovávat data dokumentu XML shreded. Interní tabulky se zobrazují ve schématu sys každé databáze a mají jedinečné, systémem generované názvy, které označují jejich funkci, xml_index_nodes_2021582240_32001 například nebo queue_messages_1977058079.

Název sloupce Datový typ Popis
Sloupce zděděné z sys.objects Seznam sloupců, které toto zobrazení dědí, naleznete v části sys.objects.
internal_type tinyint Typ interní tabulky:

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 (například prostorový index)
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) Popis typu interní tabulky:

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 nadřazeného objektu bez ohledu na to, jestli se jedná o obor schématu, nebo ne. V opačném případě, 0 pokud neexistuje žádný nadřazený objekt.

queue_messages = object_id fronty

xml_index_nodes = object_id indexu XML

fulltext_catalog_freelist = fulltext_catalog_id fulltextového katalogu

fulltext_index_map = object_id fulltextového indexu

query_notificationnebo service_broker_map = 0

extended_indexes = object_id rozšířeného indexu, například prostorového indexu

object_id tabulky, pro kterou je povoleno sledování tabulky = change_tracking
parent_minor_id Int Vedlejší ID nadřazeného objektu.

xml_index_nodes = index_id indexu XML
extended_indexes = index_id rozšířeného indexu, například prostorového indexu

0 = queue_messages, fulltext_catalog_freelist, fulltext_index_map, query_notification, , service_broker_mapnebo change_tracking
lob_data_space_id Int Nenulová hodnota je ID datového prostoru (filegroup nebo partition-scheme), které obsahuje velká data objektu (LOB) pro tuto tabulku.
filestream_data_space_id Int Vyhrazeno pro budoucí použití.

Interní tabulky neobsahují uživatelsky přístupná data a jejich schéma je pevné a nepůjdou. V příkazech Transact-SQL nemůžete odkazovat na interní názvy tabulek. Například nemůžete spustit příkaz, například SELECT * FROM <sys.internal_table_name>. Můžete se ale dotazovat na zobrazení katalogu a zobrazit metadata interních tabulek.

Povolení

Viditelnost metadat v zobrazeních katalogu je omezena na položky, které uživatel vlastní, nebo na které má uživatel udělené určité oprávnění. Další informace naleznete v kapitole Konfigurace viditelnosti metadat.

Poznámky

Interní tabulky se umístí do stejné skupiny souborů jako nadřazená entita. Pomocí dotazu katalogu zobrazeného v příkladu F můžete vrátit počet stránek interních tabulek spotřebovaných pro data v řádku, mimo řádek a velké objekty (LOB).

Systémovou proceduru sp_spaceused můžete použít k vrácení dat o využití místa pro interní tabulky. sp_spaceused sestavy interního prostoru tabulky následujícími způsoby:

  • Pokud je zadán název fronty, odkazuje se na podkladovou interní tabulku přidruženou k frontě a její spotřeba úložiště se hlásí.

  • Do sloupce jsou zahrnuty index_size stránky používané interními tabulkami indexů XML, prostorových indexů a fulltextových indexů. Při zadání názvu tabulky nebo indexovaného zobrazení jsou stránky indexů XML, prostorové indexy a fulltextové indexy pro tento objekt zahrnuty do sloupců reserved a index_size.

Příklady

Následující příklady ukazují, jak dotazovat interní metadata tabulek pomocí zobrazení katalogu.

A. Zobrazení interních tabulek, které dědí sloupce ze zobrazení katalogu sys.objects

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

B. Vrátí všechna interní metadata tabulky (včetně toho, co je zděděno z sys.objects).

SELECT * FROM sys.internal_tables;

C. Vrácení interních sloupců tabulky a datových typů sloupců

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. Vrácení interních indexů tabulek

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. Vrácení interní statistiky tabulek

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. Vrácení informací o interním oddílu tabulky a alokační jednotce

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. Vrácení interních metadat tabulek pro indexy 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. Vrácení interních metadat tabulek pro fronty 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

Já. Vrácení interních metadat tabulek pro všechny služby Service Broker

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