Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na: SQL Server 2016 (13.x) a novější verze
Azure SQL Database
Azure SQL Managed Instance
SQL database in Microsoft Fabric
Poskytuje aktuální informace na úrovni skupiny řádků o všech indexech columnstore v aktuální databázi.
Toto zobrazení dynamické správy rozšiřuje zobrazení katalogu sys.column_store_row_groups.
| Název sloupce | Datový typ | Description |
|---|---|---|
object_id |
int | ID podkladové tabulky. |
index_id |
int | ID tohoto indexu columnstore v object_id tabulce. |
partition_number |
int | ID oddílu tabulky, který obsahuje row_group_id. K připojení k tomuto zobrazení dynamické správy můžete použít partition_number sys.partitions |
row_group_id |
int | ID této skupiny řádků. U dělených tabulek je hodnota v rámci oddílu jedinečná.-1 pro chvost v paměti. |
delta_store_hobt_id |
bigint | Hobt_id pro skupinu řádků v rozdílovém úložišti.NULL pokud skupina řádků není v rozdílovém úložišti.NULL pro chvost tabulky v paměti. |
state |
tinyint | Číslo ID přidružené state_description.0 = INVISIBLE1= OPEN2 = CLOSED3 = COMPRESSED4 = TOMBSTONECOMPRESSED je jediný stav, který platí pro tabulky v paměti. |
state_desc |
nvarchar(60) | Popis stavu skupiny řádků:0
-
INVISIBLE - Skupina řádků, která se sestavuje. Například:Skupina řádků ve columnstore je INVISIBLE v době, kdy se data komprimují. Po dokončení komprese změní přepínač metadat stav skupiny řádků columnstore z INVISIBLE do COMPRESSEDa stav skupiny řádků deltastore z CLOSED do TOMBSTONE.1
-
OPEN – Skupina řádků deltastore, která přijímá nové řádky. Otevřená skupina řádků je stále ve formátu rowstore a nebyla komprimována do formátu columnstore.2
-
CLOSED – Skupina řádků v rozdílovém úložišti, která obsahuje maximální počet řádků a čeká na proces přesunu řazené kolekce členů, aby ho zkomprimuje do columnstore.3
-
COMPRESSED – Skupina řádků komprimovaná pomocí komprese columnstore a uložená v úložišti columnstore.4
-
TOMBSTONE – Skupina řádků, která byla dříve v deltastore a už se nepoužívá. |
total_rows |
bigint | Počet řádků fyzicky uložených ve skupině řádků Pro komprimované skupiny řádků. Obsahuje řádky označené jako odstraněné. |
deleted_rows |
bigint | Počet řádků fyzicky uložených ve komprimované skupině řádků, které jsou označené k odstranění.0 pro skupiny řádků, které jsou v rozdílovém úložišti.U neclusterovaných indexů columnstore tato hodnota nezahrnuje odstraněné řádky uložené ve vyrovnávací paměti pro odstranění. Další informace a zjištění počtu odstraněných řádků v vyrovnávací paměti pro odstranění najdete v tématu sys.internal_partitions. |
size_in_bytes |
bigint | Kombinovaná velikost všech stránek v této skupině řádků v bajtech Tato velikost nezahrnuje velikost potřebnou k ukládání metadat nebo sdílených slovníků. |
trim_reason |
tinyint | Důvod, proč se skupina řádků aktivovala COMPRESSED tak, aby měla menší než maximální počet řádků.0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION1 - NO_TRIM2 - BULKLOAD3 - REORG4 - DICTIONARY_SIZE5 - MEMORY_LIMITATION6 - RESIDUAL_ROW_GROUP7 - STATS_MISMATCH8 - SPILLOVER9 - AUTO_MERGE |
trim_reason_desc |
nvarchar(60) | Popis .trim_reason0
-
UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: Při upgradu z předchozí verze SQL Serveru došlo.1
-
NO_TRIM: Skupina řádků nebyla oříznuta. Skupina řádků byla komprimována s maximálním počtem 1 048 576 řádků. Počet řádků může být menší, pokud se po zavření rozdílové skupiny řádků odstranila podmnožina řádků.2
-
BULKLOAD: Velikost dávky hromadného načtení omezila počet řádků.3
-
REORG: Vynucená komprese jako součást REORG příkazu.4
-
DICTIONARY_SIZE: Velikost slovníku se zvětšila příliš velká, aby se komprimovala všechny řádky dohromady.5
-
MEMORY_LIMITATION: Nedostatek dostupné paměti pro komprimaci všech řádků dohromady.6
-
RESIDUAL_ROW_GROUP: Uzavřeno jako součást poslední skupiny řádků s řádky < 1 milion během operace sestavení indexu.Poznámka: Sestavení oddílu s více jádry může vést k více než jednomu oříznutí tohoto typu. 7
-
STATS_MISMATCH: Pouze pro columnstore v tabulce v paměti. Pokud statistiky nesprávně označí >= 1 milion kvalifikovaných řádků v chvostu, ale zjistili jsme méně, bude mít komprimovaná skupina řádků < 1 milion řádků.8
-
SPILLOVER: Pouze pro columnstore v tabulce v paměti. Pokud má > chvost 1 milion kvalifikovaných řádků, zkomprimují se poslední zbývající řádky dávky, pokud je počet mezi 100 000 a 1 miliony.9
-
AUTO_MERGE: Operace sloučení s řazenou kolekcí členů spuštěná na pozadí sloučila jednu nebo více skupin řádků do této skupiny řádků. |
transition_to_compressed_state |
tinyint | Ukazuje, jak se tato skupina řádků přesunula z deltastore do komprimovaného stavu ve columnstore.1 - NOT_APPLICABLE2 - INDEX_BUILD3 - TUPLE_MOVER4 - REORG_NORMAL5 - REORG_FORCED6 - BULKLOAD7 - MERGE |
transition_to_compressed_state_desc |
nvarchar(60) |
1
-
NOT_APPLICABLE – operace se nevztahuje na deltastore. Nebo se před upgradem na SQL Server 2016 (13.x) zkomprimovala skupina řádků. V takovém případě se historie nezachová.2
-
INDEX_BUILD – Opětovné vytvoření indexu nebo opětovné sestavení indexu zkomprimuje skupinu řádků.3
-
TUPLE_MOVER – Přesun řazené kolekce členů spuštěné na pozadí komprimoval skupinu řádků. Přesunutí řazené kolekce členů probíhá po změně stavu skupiny řádků z OPEN do CLOSED.4
-
REORG_NORMAL - Operace změny uspořádání, ALTER INDEX ... REORGpřesune CLOSED skupinu řádků z deltastore do columnstore. K tomu došlo před přesunutím řazené kolekce členů čas přesunout skupinu řádků.5
-
REORG_FORCED – Tato skupina řádků byla otevřena v deltastore a byla vynucena do columnstore předtím, než měla celý počet řádků.6
-
BULKLOAD – Operace hromadného načtení komprimovala skupinu řádků přímo bez použití deltastore.7
-
MERGE – Slučovací operace konsolidovala jednu nebo více skupin řádků do této skupiny řádků a poté provedla kompresi columnstore. |
has_vertipaq_optimization |
bit | Optimalizace VertiPaq zlepšuje kompresi columnstore tím, že přeuspořádá pořadí řádků ve skupině řádků, aby se dosáhlo vyšší komprese. K této optimalizaci dochází ve většině případů automaticky. Existují dva případy, kdy se nepoužívá optimalizace VertiPaq: a. když se rozdílová skupina řádků přesune do columnstore a v indexu columnstore existuje jeden nebo více neclusterovaných indexů – v tomto případě se optimalizace VertiPaq přeskočí, aby se minimalizovaly změny indexu mapování; b. pro indexy columnstore v tabulkách optimalizovaných pro paměť. 0 = Ne1 = Ano |
generation |
bigint | Generování skupiny řádků přidružené k této skupině řádků |
created_time |
datetime2 | Hodinový čas pro vytvoření této skupiny řádkůNULL – pro index columnstore v tabulce v paměti. |
closed_time |
datetime2 | Doba, kdy byla tato skupina řádků uzavřena.NULL – pro index columnstore v tabulce v paměti. |
Results
Vrátí jeden řádek pro každou skupinu řádků v aktuální databázi.
Permissions
Vyžaduje oprávnění CONTROL pro tabulku a VIEW DATABASE STATE oprávnění k databázi.
Oprávnění pro SQL Server 2022 a novější
Vyžaduje VIEW DATABASE PERFORMANCE STATE oprávnění k databázi.
Examples
A. Výpočet fragmentace a rozhodnutí o opětovném uspořádání nebo opětovném sestavení indexu columnstore
U indexů columnstore je procento odstraněných řádků dobrou mírou fragmentace v rámci skupiny řádků. Pokud je fragmentace 20% nebo více, odeberte odstraněné řádky. Další příklady najdete v tématu Optimalizace údržby indexů za účelem zlepšení výkonu dotazů a snížení spotřeby prostředků.
Tento příklad spojí sys.dm_db_column_store_row_group_physical_stats s jinými systémovými tabulkami a potom vypočítá Fragmentation sloupec jako odhad efektivity každé skupiny řádků v aktuální databázi. Pokud chcete najít informace o jedné tabulce, odeberte před klauzulí pomlčky WHERE komentářů a zadejte název tabulky.
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
INNER 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;