Udostępnij za pośrednictwem


Wewnętrzny tabel

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

  • Podstawowy indeksy XML

  • Indeksy przestrzenne

  • Service Broker

  • Kwerendy powiadomień

  • Śledzenie zmian

Wewnętrzny tabele są efekt uboczny innego użytkownika akcja.Na przykład po utworzeniu indeks podstawowy XML SQL Server automatycznie tworzy tabela wewnętrzną, aby utrwalić shredded XML dokumentu danych.Tablice wewnętrzne pojawiają się w sys schemat każdej bazy danych i mieć unikatowy, nazwy generowane przez system, wskazujące ich funkcja, na przykład xml_index_nodes_2021582240_32001 lub queue_messages_1977058079.

Wewnętrzny tabel nie zawierają danych dostępne dla użytkownika, a ich schematu są stałe i unalterable.Nie można odwołać wewnętrznej tabela nazw w Transact-SQL instrukcji.Na przykład, nie można wykonać instrukcja, takich jak SELECT * FROM <sys.internal_table_name>.Jednakże, mogą wysyłać kwerendy widoki wykazu w celu wyświetlenia metadane wewnętrznego tabel.

Wyświetlanie metadanych wewnętrznego tabeli

Można wyświetlić metadane skojarzone z wewnętrznych tabel za pomocą sys.internal_tables wykazu widoku.W tym widoku można wyświetlać schemat wewnętrznych tabel.Ponieważ wewnętrzna tabele mają wiele takie same charakterystyki jak tabele użytkowników sys.internal_tables widok dziedziczy kolumny z sys.objects wykazu widoku i typu "IT".Zgodnie z tabelami użytkownika jest widoczna kolumna metadane wewnętrznego tabel sys.columns jest widoczny w widoku wykazu i metadane dla indeksów wygenerowane przez system i statystyki dotyczące tabel wewnętrznego sys.indexes i sys.stats widoki wykazu.

Przystępując do innych widoki wykazu można także uzyskać informacje dotyczące przydzielania i wykorzystania przestrzeni.Zobacz "Wewnętrznej pamięci masowej tabeli" w dalszej części tego tematu.

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

Diagram wewnętrznych widoków wykazu tabel

Uprawnienia do wyświetlania metadanych wewnętrznego tabeli

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

  • Uprawnienie Kontrola serwera.

  • Uprawnienie Kontrola w bazie danych.

  • Członkostwo w db_owner lub sysadmin grupy.

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

Wyświetlanie metadanych indeksu XML

Ilustracja przedstawia strukturę metadane dla wewnętrznej tabela na indeks XML.

Diagram widoków wykazu indeksów XML

Aby zrozumieć relacje widoku wykazu na ilustracji, zakładać, że indeks podstawowy XML Xp jest tworzony w tabela t.Metadane tabela jest w sys.tables wykazu widoku i metadanych dla indeksu XML jest w sys.xml_indexes wykazu widoku.metadane dla wewnętrznej tabela Ti utworzone przez SQL Server do danych znajduje się w indeksie XML utrwalania sys.internal_tables widok.

Znaleźć relacji między wewnętrznej tabela Ti i tabela użytkownika t, możesz łączyć parent_id kolumna sys.internal_tables widok do object_id kolumna sys.tables widok.Aby znaleźć relacji między wewnętrznej tabela Ti i indeks XML Xp, można łączyć parent_id i parent_minor_id kolumny sys.internal_tables do object_id i index_id kolumny sys.xml_indexes.Zobacz przykład poniżej G.

Wyświetlanie metadanych indeks przestrzenny

Metadane indeksy przestrzenne odpowiada głównie metadanych XML indeksy.Różnice są używające indeksy przestrzenne sys.spatial_indexes zamiast sys.xml_indexes i że trzeba użyć sys.spatial_index_tessellationsdo wyświetlania parametrów przestrzennej przestrzennej indeksu.

Ilustracja przedstawia strukturę metadane dla wewnętrznej tabela na przestrzennej indeksu.

Diagram widoków wykazu indeksów przestrzennych

Aby zrozumieć relacje widoku wykazu na ilustracji, zakładać, że indeks przestrzenny, Si, jest tworzony w tabela t.Metadane tabela jest w sys.tables wykazu widoku i metadanych dla indeksu przestrzennej jest w sys.spatial_indexes wykazu widoku i sys.spatial_index_tessellations wykazu widoku.Metadane dla wewnętrznej tabela Ti, utworzony przez SQL Server pozostać dane przestrzenne indeksu jest sys.internal_tables widok.

Znaleźć relacji między wewnętrznej tabela Ti i tabela użytkownika t, możesz łączyć parent_id kolumna sys.internal_tables widok do object_id kolumna sys.tables widok.Aby znaleźć relacji między wewnętrznej tabela Ti i indeks przestrzenny Si, można łączyć parent_id i parent_minor_id kolumny sys.internal_tables do object_id i index_id kolumny sys.spatial_indexes.Aby uzyskać więcej informacji zobacz przykład L, w dalszej części tego tematu.

Wyświetlanie Service Broker metadanych

Ilustracja przedstawia strukturę metadane dla wewnętrznej tabela w kolejce Service Broker.Service Broker wiadomości, powiadomień kwerendy i zdarzenie kolejki Service Broker za pomocą powiadomienia.Ponadto funkcja Service Broker także używa wewnętrznej tabela do przechowywania informacji o wszystkich usług Service Broker we wszystkich bazach danych.Tabela wewnętrznego należy tempdb systemowej bazy danych.

Diagram widoków wykazu brokera usług

Wyświetlanie kwerendy powiadomień metadanych

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

Diagram widoków wykazu powiadomień zapytania

Wewnętrznej pamięci masowej w tabeli

Wewnętrzny tabele są umieszczane na tym samym grupa plików jako obiekt nadrzędnego.Można użyć kwerendy wykazu przedstawione w f przykład poniżej numer strony wewnętrzne tabel zajmują w wierszu poza wiersz i dużego obiektu (LOB) danych.

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 zużycie pamięci.

  • Strony, które są używane przez wewnętrzne tabele indeksy, indeksy przestrzenne i indeksy pełnotekstowe XML znajdują się w index_size kolumna.Po określeniu tabela lub nazwie indeksowany widok stron dla indeksów XML, indeksy przestrzenne i indeksy pełnotekstowe dla tego obiektu są zawarte w kolumnach zarezerwowane i index_size.

Przykłady

Następujące przykłady przedstawiają sposób kwerendy metadane wewnętrznej tabela przy użyciu widoki wykazu.

A.Pokaż tabele wewnętrznego, dziedziczące kolumny widoku wykazu sys.objects

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

B.Zwraca wszystkie metadane wewnętrznej tabela (w tym, które są dziedziczone z sys.objects)

SELECT * FROM sys.internal_tables;

C.Zwraca kolumna wewnętrznej tabela 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.Indeksy tabela wewnętrznych powrót

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ę wewnętrznej tabela

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 wewnętrzną tabela partycji i jednostka alokacji informacji

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 metadane wewnętrznej tabela indeksów 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 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.Zwraca tabela wewnętrzną metadane usługi Service Broker

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

J.Zwraca tabela wewnętrzną metadane 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';

K.Zwraca metadane wewnętrznej tabela indeksów przestrzennych

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