Udostępnij za pośrednictwem


sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Dotyczy: SQL Server 2016 (13.x) i nowszych Azure SQL DatabaseAzure SQL Managed Instance

Zawiera bieżące informacje na poziomie grupy wierszy dotyczące wszystkich indeksów magazynu kolumn w bieżącej bazie danych.

Spowoduje to rozszerzenie widoku wykazu sys.column_store_row_groups (Transact-SQL).

Nazwa kolumny Typ danych Opis
object_id int Identyfikator tabeli bazowej.
index_id int Identyfikator tego indeksu magazynu kolumn w tabeli object_id.
partition_number int Identyfikator partycji tabeli, która zawiera row_group_id. Możesz użyć partition_number, aby dołączyć ten dynamiczny widok zarządzania do folderu sys.partitions.
row_group_id int Identyfikator tej grupy wierszy. W przypadku tabel partycjonowanych wartość jest unikatowa w obrębie partycji.

-1 dla ogona w pamięci.
delta_store_hobt_id bigint Hobt_id dla grupy wierszy w magazynie różnicowym.

Wartość NULL, jeśli grupa wierszy nie znajduje się w magazynie różnicowym.

Wartość NULL dla końca tabeli w pamięci.
stanu tinyint Numer identyfikatora skojarzony state_description.

0 = NIEWIDOCZNE

1 = OTWÓRZ

2 = ZAMKNIĘTE

3 = SKOMPRESOWANE

4 = TOMBSTONE

SKOMPRESOWANY jest jedynym stanem, który ma zastosowanie do tabel w pamięci.
state_desc nvarchar(60) Opis stanu grupy wierszy:

0 — NIEWIDOCZNA grupa wierszy -A, która jest tworzona. Na przykład:
Grupa wierszy w magazynie kolumn jest NIEWIDOCZNA, gdy dane są kompresowane. Po zakończeniu kompresji przełączenie metadanych zmienia stan grupy wierszy magazynu kolumn z NIEWIDZIALNY na SKOMPRESOWANY, a stan grupy wierszy magazynu różnicowego z ZAMKNIĘTE na TOMBSTONE.

1 — OTWÓRZ — grupa wierszy magazynu delty akceptująca nowe wiersze. Otwarta grupa wierszy jest nadal w formacie magazynu wierszy i nie została skompresowana do formatu magazynu kolumn.

2 — ZAMKNIĘTE — grupa wierszy w magazynie różnicowym, która zawiera maksymalną liczbę wierszy i czeka na proces krotki mover, aby skompresować go do magazynu kolumn.

3 — SKOMPRESOWANA — grupa wierszy skompresowana z kompresją magazynu kolumn i przechowywana w magazynie kolumn.

4 — TOMBSTONE — grupa wierszy, która była wcześniej w magazynie delty i nie jest już używana.
total_rows bigint Liczba wierszy przechowywanych fizycznie w grupie wierszy. W przypadku skompresowanych grup wierszy. Zawiera wiersze oznaczone jako usunięte.
deleted_rows bigint Liczba wierszy przechowywanych fizycznie w skompresowanej grupie wierszy, które są oznaczone do usunięcia.

0 dla grup wierszy, które znajdują się w magazynie różnicowym.
size_in_bytes bigint Łączny rozmiar w bajtach wszystkich stron w tej grupie wierszy. Ten rozmiar nie zawiera rozmiaru wymaganego do przechowywania metadanych ani udostępnionych słowników.
trim_reason tinyint Przyczyna, która wyzwoliła grupę wierszy SKOMPRESOWANE, aby mieć mniejszą niż maksymalną liczbę wierszy.

0 — UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION

1 — NO_TRIM

2 — ŁADOWANIE ZBIORCZE

3 — REORG

4 — DICTIONARY_SIZE

5 — MEMORY_LIMITATION

6 — RESIDUAL_ROW_GROUP

7 — STATS_MISMATCH

8 — WYCIEK

9 — AUTO_MERGE
trim_reason_desc nvarchar(60) Opis trim_reason.

0 — UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: Wystąpił podczas uaktualniania z poprzedniej wersji programu SQL Server.

1 — NO_TRIM: Grupa wierszy nie została przycięta. Grupa wierszy została skompresowana z maksymalnie 1 048 576 wierszy. Liczba wierszy może być mniejsza, jeśli podzbiór wierszy został usunięty po zamknięciu grupy wierszy różnicowych

2 — BULKLOAD: Rozmiar partii ładowania zbiorczego ogranicza liczbę wierszy.

3 — REORG: Wymuszona kompresja w ramach polecenia REORG.

4 — DICTIONARY_SIZE: Rozmiar słownika wzrósł zbyt duży, aby skompresować wszystkie wiersze razem.

5 — MEMORY_LIMITATION: Za mało dostępnej pamięci, aby skompresować wszystkie wiersze razem.

6 — RESIDUAL_ROW_GROUP: Zamknięte w ramach ostatniej grupy wierszy z wierszami < 1 milion podczas operacji kompilacji indeksu. Uwaga: kompilacja partycji z wieloma rdzeniami może spowodować więcej niż jedno przycinanie tego typu.

7 — STATS_MISMATCH: tylko w przypadku magazynu kolumn w tabeli w pamięci. Jeśli statystyki niepoprawnie wskazują >= 1 milion kwalifikowanych wierszy w ogonie, ale znaleźliśmy mniej, skompresowana grupa wierszy będzie miała < 1 milion wierszy

8 — SPILLOVER: tylko w przypadku magazynu kolumn w tabeli w pamięci. Jeśli ogon ma > 1 milion kwalifikowanych wierszy, ostatnia partia pozostałych wierszy jest kompresowana, jeśli liczba wynosi od 100 do 1 miliona

9 — AUTO_MERGE: Operacja scalania krotki Mover uruchomiona w tle skonsolidowana co najmniej jedna grupa wierszy w tej grupie wierszy.
transition_to_compressed_state tinyint Pokazuje, jak ta grupa wierszy została przeniesiona z magazynu delty do stanu skompresowanego w magazynie kolumn.

1— NOT_APPLICABLE

2 — INDEX_BUILD

3 — TUPLE_MOVER

4 — REORG_NORMAL

5 — REORG_FORCED

6 — ŁADOWANIE ZBIORCZE

7 — SCALANIE
transition_to_compressed_state_desc nvarchar(60) 1 — NOT_APPLICABLE — operacja nie ma zastosowania do magazynu różnicowego. Lub grupa wierszy została skompresowana przed uaktualnieniem do programu SQL Server 2016 (13.x), w którym przypadku historia nie jest zachowywana.

2 — INDEX_BUILD — indeks utwórz lub skompiluj ponownie indeks skompresowany grupy wierszy.

3 — TUPLE_MOVER — krotka uruchomiona w tle skompresowała grupę wierszy. Przejście krotki odbywa się po zmianie stanu grupy wierszy z OPEN na CLOSED.

4 - REORG_NORMAL - Operacja reorganizacji, ALTER INDEX ... REORG przeniesiono zamkniętą grupę wierszy z magazynu różnicowego do magazynu kolumn. Miało to miejsce, zanim krotka-mover miała czas na przeniesienie grupy wierszy.

5 — REORG_FORCED — ta grupa wierszy była otwarta w magazynie delty i została wymusiona do magazynu kolumn, zanim zawierała pełną liczbę wierszy.

6 — BULKLOAD — operacja ładowania zbiorczego skompresowała grupę wierszy bezpośrednio bez użycia magazynu delty.

7 — MERGE — operacja scalania skonsolidował co najmniej jedną grupę wierszy w tej grupie wierszy, a następnie wykonano kompresję magazynu kolumn.
has_vertipaq_optimization bit Optymalizacja VertiPaq poprawia kompresję magazynu kolumn przez zmiana kolejności wierszy w grupie wierszy w celu osiągnięcia wyższej kompresji. Ta optymalizacja jest wykonywana automatycznie w większości przypadków. Istnieją dwa przypadki, w których optymalizacja VertiPaq nie jest używana:
a. gdy grupa wierszy różnicowych przechodzi do magazynu kolumn i istnieje co najmniej jeden indeks nieklastrowany w indeksie magazynu kolumn — w tym przypadku optymalizacja VertiPaq jest pomijana, aby zminimalizować zmiany indeksu mapowania;
b. dla indeksów magazynu kolumn w tabelach zoptymalizowanych pod kątem pamięci.

0 = nie

1 = Tak
generowania bigint Generowanie grup wierszy skojarzone z tą grupą wierszy.
created_time datetime2 Godzina zegara dla momentu utworzenia tej grupy wierszy.

NULL — dla indeksu magazynu kolumn w tabeli w pamięci.
closed_time datetime2 Godzina zegara dla momentu zamknięcia tej grupy wierszy.

NULL — dla indeksu magazynu kolumn w tabeli w pamięci.

Wyniki

Zwraca jeden wiersz dla każdej grupy wierszy w bieżącej bazie danych.

Uprawnienia

Wymaga CONTROL uprawnienia do tabeli i uprawnienia VIEW DATABASE STATE w bazie danych.

Uprawnienia dla programu SQL Server 2022 i nowszych

Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI BAZY DANYCH dla bazy danych.

Przykłady

Odp. Oblicz fragmentację, aby zdecydować, kiedy zreorganizować lub ponownie skompilować indeks magazynu kolumn.

W przypadku indeksów magazynu kolumn procent usuniętych wierszy jest dobrą miarą fragmentacji w grupie wierszy. Gdy fragmentacja wynosi 20% lub więcej, usuń usunięte wiersze. Aby uzyskać więcej przykładów, zobacz Reorganize and Rebuild Indexes.

Ten przykład łączy sys.dm_db_column_store_row_group_physical_stats z innymi tabelami systemowymi, a następnie oblicza kolumnę Fragmentation jako oszacowanie wydajności każdej grupy wierszy w bieżącej bazie danych. Aby znaleźć informacje na temat pojedynczej tabeli, usuń łączniki komentarzy przed klauzulą WHERE i podaj nazwę tabeli.

SELECT i.object_id,   
    object_name(i.object_id) AS TableName,   
    i.name AS IndexName,   
    i.index_id,   
    i.type_desc,   
    CSRowGroups.*,  
    100*(ISNULL(deleted_rows,0))/NULLIF(total_rows,0) AS 'Fragmentation'
FROM sys.indexes AS i  
JOIN sys.dm_db_column_store_row_group_physical_stats AS CSRowGroups  
    ON i.object_id = CSRowGroups.object_id AND i.index_id = CSRowGroups.index_id   
-- WHERE object_name(i.object_id) = 'table_name'   
ORDER BY object_name(i.object_id), i.name, row_group_id;  

Zobacz też

widoki wykazu obiektów (Transact-SQL)
Widoki Katalogu (Transact-SQL)
architektura indeksu magazynu kolumn
wykonywanie zapytań dotyczących katalogu systemu programu SQL Server — często zadawane pytania
sys.columns (Transact-SQL)
sys.all_columns (Transact-SQL)
sys.computed_columns (Transact-SQL)
sys.column_store_dictionaries (Transact-SQL)
sys.column_store_segments (Transact-SQL)