Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do: SQL Server 2016 (13.x) i nowsze wersje
Azure SQL Database
Azure SQL Managed Instance
SQL database in Microsoft Fabric
Zawiera wiersz dla każdej tabeli zoptymalizowanej pod kątem pamięci wewnętrznej używanej do przechowywania tabel zoptymalizowanych pod kątem pamięci użytkownika. Każda tabela użytkownika odpowiada co najmniej jednej tabeli wewnętrznej. Pojedyncza tabela jest używana na potrzeby podstawowego magazynu danych. Dodatkowe tabele wewnętrzne są używane do obsługi funkcji, takich jak czasowe, indeks magazynu kolumn i magazyn poza wierszem (LOB) dla tabel zoptymalizowanych pod kątem pamięci.
| Nazwa kolumny | Typ danych | Description |
|---|---|---|
| object_id | int | Identyfikator tabeli użytkownika. Wewnętrzne tabele zoptymalizowane pod kątem pamięci, które istnieją w celu obsługi tabeli użytkownika (np. magazynu poza wierszami lub usuniętych wierszy w przypadku kombinacji Hk/Columnstore) mają te same object_id co ich nadrzędne. |
| xtp_object_id | bigint | In-Memory identyfikator obiektu OLTP odpowiadający wewnętrznej tabeli zoptymalizowanej pod kątem pamięci używanej do obsługi tabeli użytkowników. Jest ona unikatowa w bazie danych i może ulec zmianie w okresie istnienia obiektu. |
| typ | int | Typ tabeli wewnętrznej. 0 => DELETED_ROWS_TABLE 1 => USER_TABLE 2 => DICTIONARIES_TABLE 3 => SEGMENTS_TABLE 4 => ROW_GROUPS_INFO_TABLE 5 => WEWNĘTRZNA TABELA DANYCH OFF-ROW 252 => INTERNAL_TEMPORAL_HISTORY_TABLE |
| type_desc | nvarchar(60) | Opis typu DELETED_ROWS_TABLE —> wewnętrzne śledzenie usuniętych wierszy tabeli dla indeksu magazynu kolumn USER_TABLE —> tabela zawierająca dane użytkownika w wierszu DICTIONARIES_TABLE —> słowniki dla indeksu magazynu kolumn SEGMENTS_TABLE —> skompresowane segmenty dla indeksu magazynu kolumn ROW_GROUPS_INFO_TABLE —> metadane dotyczące skompresowanych grup wierszy indeksu magazynu kolumn INTERNAL OFF-ROW DATA TABLE —> wewnętrzna tabela używana do przechowywania kolumny poza wierszem. W tym przypadku minor_id odzwierciedla column_id. INTERNAL_TEMPORAL_HISTORY_TABLE —> gorąca część tabeli historii opartej na dysku. Wiersze wstawione do historii są najpierw wstawiane do tej wewnętrznej tabeli zoptymalizowanej pod kątem pamięci. Istnieje zadanie w tle, które asynchronicznie przenosi wiersze z tej tabeli wewnętrznej do tabeli historii opartej na dysku. |
| minor_id | int | 0 wskazuje użytkownika lub tabelę wewnętrzną Wartość innej niż 0 wskazuje identyfikator kolumny przechowywanej poza wierszem. Sprzężenia z column_id w pliku sys.columns. Każda kolumna przechowywana poza wierszem ma odpowiedni wiersz w tym widoku systemowym. |
Permissions
Widoczność metadanych w widokach katalogu jest ograniczona do obiektów, których właścicielem jest użytkownik lub w stosunku do których użytkownik ma jakieś uprawnienia. Aby uzyskać więcej informacji, zobacz Konfiguracja widoczności metadanych.
Przykłady
A. Zwracanie wszystkich kolumn przechowywanych poza wierszem
Poniższy skrypt języka T-SQL ilustruje tabelę z wieloma dużymi kolumnami innych niż LOB i jedną kolumną LOB:
CREATE TABLE dbo.LargeTableSample
(
Id int IDENTITY PRIMARY KEY NONCLUSTERED,
C1 nvarchar(4000),
C2 nvarchar(4000),
C3 nvarchar(4000),
C4 nvarchar(4000),
Misc nvarchar(max)
) WITH (MEMORY_OPTIMIZED = ON);
GO
Poniższe zapytanie przedstawia wszystkie kolumny przechowywane poza wierszem wraz z ich rozmiarami. Rozmiar -1 wskazuje kolumnę LOB. Wszystkie kolumny LOB są przechowywane w osobnej lokalizacji.
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
c.name AS 'column',
c.max_length
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.columns c ON moa.object_id = c.object_id AND moa.minor_id=c.column_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type=5;
B. Zwracanie zużycia pamięci wszystkich kolumn przechowywanych poza wierszem
Aby uzyskać więcej szczegółów na temat zużycia pamięci w kolumnach poza wierszem, można użyć następującego zapytania, które pokazuje zużycie pamięci wszystkich tabel wewnętrznych i ich indeksów używanych do przechowywania kolumn poza wierszem:
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
c.name AS 'column',
c.max_length,
mc.memory_consumer_desc,
mc.index_id,
mc.allocated_bytes,
mc.used_bytes
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.columns c ON moa.object_id = c.object_id AND moa.minor_id=c.column_id
JOIN sys.dm_db_xtp_memory_consumers mc ON moa.xtp_object_id=mc.xtp_object_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type=5;
C. Zwracanie użycia pamięci indeksów magazynu kolumn w tabelach zoptymalizowanych pod kątem pamięci
Użyj następującego zapytania, aby wyświetlić użycie pamięci indeksów magazynu kolumn w tabelach zoptymalizowanych pod kątem pamięci:
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
i.name AS 'columnstore index',
SUM(mc.allocated_bytes) / 1024 as [allocated_kb],
SUM(mc.used_bytes) / 1024 as [used_kb]
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.indexes i ON moa.object_id = i.object_id AND i.type in (5,6)
JOIN sys.dm_db_xtp_memory_consumers mc ON moa.xtp_object_id=mc.xtp_object_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type IN (0, 2, 3, 4)
GROUP BY o.schema_id, moa.object_id, i.name;
Użyj następującego zapytania, aby podzielić użycie pamięci między strukturami wewnętrznymi używanymi dla indeksów magazynu kolumn w tabelach zoptymalizowanych pod kątem pamięci:
SELECT
QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(moa.object_id)) AS 'table',
i.name AS 'columnstore index',
moa.type_desc AS 'internal table',
mc.index_id AS 'index',
mc.memory_consumer_desc,
mc.allocated_bytes / 1024 as [allocated_kb],
mc.used_bytes / 1024 as [used_kb]
FROM sys.memory_optimized_tables_internal_attributes moa
JOIN sys.indexes i ON moa.object_id = i.object_id AND i.type in (5,6)
JOIN sys.dm_db_xtp_memory_consumers mc ON moa.xtp_object_id=mc.xtp_object_id
JOIN sys.objects o on moa.object_id=o.object_id
WHERE moa.type IN (0, 2, 3, 4)