Udostępnij za pośrednictwem


Internal Tables

SQL Server automatycznie tworzy tabele wewnętrznej do obsługi następujących funkcji:

  • Podstawowy indeksów XML

  • Usuwa określony serwer miejsce docelowe.

  • Service Broker

  • Kwerendy powiadomień

  • IsAnsiNullsEnabled

Wewnętrzny tabele są efektem ubocznym z inna czynność użytkownika.Na przykład podczas tworzenia indeksu głównego XML SQL Server powoduje automatyczne utworzenie tabela programu wewnętrzny, aby utrwalić shredded dane XML w dokumencie. Wewnętrzny tabele zostaną wyświetlone w sys schemat każdej bazy danych i mieć unikatowy, wygenerowane przez system nazw, które wskazują swojej funkcja, na przykład, xml_index_nodes_2021582240_32001 or queue_messages_1977058079.

Wewnętrzny tabel nie zawierają danych dla użytkownika, a ich schematu są stałe i unalterable.Nie można odwoływać się do nazwy tabela wewnętrznej w Transact-SQL instrukcje. Na przykład, nie można wykonać instrukcja, takich jak SELECT * FROM <sys.internal_table_name>. Jednak mogą wysyłać kwerendy katalogu widokami, aby zobaczyć metadane wewnętrznego tabel.

Przeglądanie wewnętrznych metadane tabela

Można przeglądać metadane skojarzone z tabelami wewnętrznymi przy użyciu sys.internal_tables Służy do wyświetlania katalogu. W tym widoku można wyświetlać schemat wewnętrznych tabel.Ponieważ wewnętrzny tabele mają wiele z tych samych właściwościach jako tabele użytkownika sys.internal_tables widoku dziedziczy kolumnsys.Objects katalogu widoku i typu "IT".Zgodnie z tabelami użytkownika jest widoczna kolumna metadanych dla wewnętrznego tabel sys.Columns wykazu widoku i metadane dla generowanych przez system indeksy i dane statystyczne dotyczące tabel wewnętrznego jest widoczna w sys.Indexes and sys.stats widoki wykazu.

Przystępując do innych widoki wykazu, również można uzyskać informacji o alokacji i wykorzystanie miejsca na.Zobacz temat "Pamięć wewnętrzna tabela" w dalszej części tego tematu.

Na poniższej ilustracji przedstawiono modelu danych katalogu najwyższego poziom.

Diagram of internal table catalog views

Uprawnienia, aby wyświetlić wewnętrzny metadane tabela

Aby wyświetlić tabela wewnętrzną metadane w bazie danych, niezbędny jest jeden z następujących uprawnień i członkostwa grup:

  • Uprawnienie Kontrola SERVER.

  • Uprawnienie Kontrola w bazie danych.

  • Członkostwo w grupie db_owner or sysadmin grupy.

  • Użytkownik, który można wyświetlić obiektu nadrzędnego (XML lub przestrzennej indeksu lub kolejki) można wyświetlić tabela wewnętrzną dla tego obiektu.

Wyświetlanie XML metadane indeksu

Na następującej ilustracji pokazano strukturę metadane dla tabela wewnętrznej na indeks XML.

Diagram of XML index catalog views

Aby zrozumieć relacje widoku wykazu pokazany na rysunku, założono indeksu głównego XML XP Utworzono tabela T.Metadane tabela są w sys.Tables jest wykazu widoku i metadanych dla indeksu XMLsys.xml_indexes Służy do wyświetlania katalogu. Metadane dla tabela wewnętrznej Ti utworzone przez SQL Server Aby utrwalić dane znajdują się w indeksie XML sys.internal_tables widoku.

Aby znaleźć relacji między wewnętrznymi tabela Ti a tabela użytkownikówT, you can łączyć the parent_id kolumnasys.internal_tables widokuobject_id kolumnasys.Tables view.Aby znaleźć relacji między wewnętrznymi tabela Ti i XML indeksu XP, można dołączyć parent_id and parent_minor_id kolumnsys.internal_tables to the object_id and index_id kolumny sys.xml_indexes.Zobacz przykład poniżej K.

Wyświetlanie metadane indeksu przestrzenny

Metadane przestrzennej indeksów przeważnie jest równoznaczne z metadanych XML indeksów.Różnice są których używane są indeksy przestrzenny sys.spatial_indexes zamiast sys.xml_indexes i trzeba użyć sys.spatial_index_tessellations, aby wyświetlić parametry przestrzennej przestrzennej indeksu.

Na następującej ilustracji pokazano strukturę metadane dla tabela wewnętrznej na przestrzennej indeksu.

Diagram of spatial index catalog views

Aby zrozumieć relacje widoku wykazu pokazany na rysunku, założono przestrzennej indeksu SI, jest tworzony w tabela T.Metadane tabela są w sys.Tables wykazu widoku i metadanych dla indeksu przestrzennej znajduje się w sys.spatial_indexes wyświetlanie katalogu a sys.spatial_index_tessellations Służy do wyświetlania katalogu. Metadane dla tabela wewnętrznej Ti, utworzony przez SQL Server Aby utrwalić danych przestrzennej indeksu w sys.internal_tables widoku.

Aby znaleźć relacji między wewnętrznymi tabela Ti a tabela użytkownikówT, you can łączyć the parent_id kolumnasys.internal_tables widokuobject_id kolumnasys.Tables view.Aby znaleźć relacji między wewnętrznymi tabela Ti i indeks przestrzennej SI, można dołączyć parent_id and parent_minor_id kolumnsys.internal_tables to the object_id and index_id kolumny sys.spatial_indexes.Aby uzyskać więcej informacji zobacz przykład L, w dalszej części tego tematu.

Wyświetlanie usługa Broker metadane

Na następującej ilustracji pokazano strukturę metadane dla tabela wewnętrznej w kolejce usługa Broker.usługa Broker wiadomości, powiadomień kwerendy i powiadomień o zdarzeniach za pomocą kolejki usługa Broker.Ponadto funkcja usługa Broker także wykorzystuje do wewnętrznej tabela do przechowywania informacji o wszystkich usług usługa Broker we wszystkich bazach danych.W tej tabela wewnętrzny znajduje się w tempdb systemowej bazy danych.

Diagram of service broker catalog views

Wyświetlanie kwerendy powiadomienie metadane

Na następującej ilustracji pokazano strukturę metadane dla tabela wewnętrznej w subskrypcja powiadomienie kwerendy.Wewnętrzny tabele są używane do przechowywania parametrów subskrypcja powiadomienie kwerendy.

Diagram of query notification catalog views

Wewnętrzna tabela pamięci masowej

Wewnętrzny tabel są umieszczane w tej samej grupa plików jako jednostkę nadrzędną.Można użyć kwerendy wykazu wyświetlane w F przykład poniżej, aby zwrócić liczbę stron zajmują wewnętrznego tabel w wierszu się od wiersza, a dane dużych obiektów (LOB).

You can use the sp_spaceused system procedure to return space usage data for internal tables.sp_spaceused reports internal table space in the following ways:

  • Po określeniu nazwy kolejki odwołuje się do tabela podstawowej wewnętrznego skojarzony z kolejką i zgłaszane jest zużycie pamięci masowej.

  • Strony, które są używane przez wewnętrznych tabel indeksów, przestrzennej indeksy i indeksy pełnotekstowe XML są uwzględniane w index_size kolumna.Po określeniu tabela lub nazwa widok indeksowany stron dla indeksów, przestrzennej indeksy i indeksy pełnotekstowe dla tego obiektu XML znajdują się w kolumnach zarezerwowane and index_size.

Przykłady

W poniższych przykładach pokazano, jak do kwerendy tabela wewnętrzną metadane za pomocą widoki wykazu.

A.Pokaż wewnętrzne tabel, które dziedziczą kolumny z widoku sys.objects wykazu

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

B.Zwraca wszystkie metadane tabela wewnętrzną (w tym tych, które jest dziedziczona z sys.objects)

SELECT * FROM sys.internal_tables;

C.Zwrot wewnętrznej tabeli kolumna s i kolumna typów danych

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.Zwraca wewnętrzny tabela indeksów

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;

E.Zwraca statystykę tabela wewnętrzną

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.Zwraca jednostki informacji o wewnętrznym tabela partycji i alokacji

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.Zwraca tabela wewnętrzną metadane dla indeksu 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.Zwraca tabela wewnętrzną metadane dla kolejek usługa 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.Zwraca tabela wewnętrzną metadane dla wszystkich usług usługa Broker

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

J.Zwraca tabela wewnętrzną metadane dla subskrypcji powiadomienie kwerendy

SELECT qn.id AS query_subscription_id
    ,it.name AS internal_table_name
    ,it.object_id AS internal_table_id
FROM sys.internal_tables AS it
JOIN sys.dm_qn_subscriptions AS qn ON it.object_id = qn.object_id
WHERE it.internal_type_desc = 'QUERY_NOTIFICATION';

Wiersze mogą być tak szerokie, czasami dany operator nie może przetworzyć w wierszu.Zwraca tabela wewnętrzną metadane dla indeksów przestrzenny

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
    ,si.name AS spatial_index_name
    ,si.index_id as spatial_index_id
FROM sys.internal_tables AS it
JOIN sys.tables AS t 
    ON it.parent_id = t.object_id
JOIN sys.spatial_indexes AS si 
    ON it.parent_id = si.object_id
    AND it.parent_minor_id  = si.index_id
WHERE it.internal_type_desc = 'EXTENDED_INDEXES';
GO