Dela via


sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL DatabaseAzure SQL Managed Instance

Innehåller aktuell information på radgruppsnivå om alla kolumnlagringsindex i den aktuella databasen.

Denna DMV utökar katalogvyn sys.column_store_row_groups.

Kolumnnamn Datatyp Description
object_id int ID för den underliggande tabellen.
index_id int ID för det här kolumnlagringsindexet i object_id tabellen.
partition_number int ID för tabellpartitionen som innehåller row_group_id. Du kan använda partition_number för att ansluta denna DMV till sys.partitions
row_group_id int ID för den här radgruppen. För partitionerade tabeller är värdet unikt i partitionen.

-1 för en minnesintern svans.
delta_store_hobt_id bigint Hobt_id för en radgrupp i deltaarkivet.

NULL om radgruppen inte finns i deltaarkivet.

NULL för en minnesintern tabell.
state tinyint ID-nummer associerat state_description.

0 = INVISIBLE
1= OPEN
2 = CLOSED
3 = COMPRESSED
4 = TOMBSTONE

COMPRESSED är det enda tillstånd som gäller för minnesinterna tabeller.
state_desc nvarchar(60) Beskrivning av radgruppstillståndet:

0 - INVISIBLE – En radgrupp som skapas. Till exempel:

En radgrupp i kolumnarkivet är INVISIBLE när data komprimeras. När komprimeringen är klar ändrar en metadataväxel status för kolumnlagringsradgruppen från INVISIBLE till COMPRESSEDoch tillståndet för deltastore-radgruppen från CLOSED till TOMBSTONE.

1 - OPEN – En deltastore-radgrupp som accepterar nya rader. En öppen radgrupp är fortfarande i radarkivformat och har inte komprimerats till kolumnarkivformat.

2 - CLOSED – En radgrupp i deltaarkivet som innehåller det maximala antalet rader och väntar på att tuppelns flyttprocess ska komprimera den till kolumnarkivet.

3 - COMPRESSED – En radgrupp som komprimeras med kolumnlagringskomprimering och lagras i kolumnarkivet.

4 - TOMBSTONE - En radgrupp som tidigare fanns i deltaarkivet och som inte längre används.
total_rows bigint Antal rader som lagras fysiskt i radgruppen. För komprimerade radgrupper. Innehåller de rader som har markerats som borttagna.
deleted_rows bigint Antal rader som lagras fysiskt i en komprimerad radgrupp som har markerats för borttagning.

0 för radgrupper som finns i deltaarkivet.

För icke-illustrerade kolumnlagringsindex inkluderar det här värdet inte borttagna rader som lagras i borttagningsbufferten. Mer information och hur du hittar antalet borttagna rader i borttagningsbufferten finns i sys.internal_partitions.
size_in_bytes bigint Kombinerad storlek i byte för alla sidor i den här radgruppen. Den här storleken innehåller inte den storlek som krävs för att lagra metadata eller delade ordlistor.
trim_reason tinyint Orsak som utlöste COMPRESSED att radgruppen hade mindre än det maximala antalet rader.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION
1 - NO_TRIM
2 - BULKLOAD
3 - REORG
4 - DICTIONARY_SIZE
5 - MEMORY_LIMITATION
6 - RESIDUAL_ROW_GROUP
7 - STATS_MISMATCH
8 - SPILLOVER
9 - AUTO_MERGE
trim_reason_desc nvarchar(60) Beskrivning av trim_reason.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: Inträffade när du uppgraderade från den tidigare versionen av SQL Server.

1 - NO_TRIM: Radgruppen har inte trimmats. Radgruppen komprimerades med högst 1 048 576 rader. Antalet rader kan vara mindre om en delmängd rader har tagits bort efter att delta rowgroup stängdes

2 - BULKLOAD: Batchstorleken för massinläsning begränsade antalet rader.

3 - REORG: Tvingad komprimering som en del av REORG kommandot.

4 - DICTIONARY_SIZE: Ordlistestorleken blev för stor för att komprimera alla rader tillsammans.

5 - MEMORY_LIMITATION: Inte tillräckligt med ledigt minne för att komprimera alla rader tillsammans.

6 - RESIDUAL_ROW_GROUP: Stängdes som en del av den sista radgruppen med rader < 1 miljon under indexskapandet.

Obs! En partitionsversion med flera kärnor kan resultera i mer än en trimning av den här typen.

7 - STATS_MISMATCH: Endast för columnstore i minnesintern tabell. Om statistik felaktigt anges >= 1 miljon kvalificerade rader i svansen men vi hittade färre, kommer den komprimerade radgruppen att ha < 1 miljon rader

8 - SPILLOVER: Endast för columnstore i minnesintern tabell. Om tail har > 1 miljon kvalificerade rader komprimeras de sista återstående raderna i batchen om antalet är mellan 100 000 och 1 miljon

9 - AUTO_MERGE: En sammanslagningsåtgärd för Tuppeln Mover som körs i bakgrunden konsoliderade en eller flera radgrupper i den här radgruppen.
transition_to_compressed_state tinyint Visar hur den här radgruppen flyttades från deltaarkivet till ett komprimerat tillstånd i kolumnarkivet.

1 - NOT_APPLICABLE
2 - INDEX_BUILD
3 - TUPLE_MOVER
4 - REORG_NORMAL
5 - REORG_FORCED
6 - BULKLOAD
7 - MERGE
transition_to_compressed_state_desc nvarchar(60) 1 - NOT_APPLICABLE – åtgärden gäller inte för deltaarkivet. Eller så komprimerades radgruppen innan den uppgraderades till SQL Server 2016 (13.x) i vilket fall historiken inte bevaras.

2 - INDEX_BUILD – Om du skapar eller återskapar index komprimerade du radgruppen.

3 - TUPLE_MOVER – Tuppeln som körs i bakgrunden komprimerade radgruppen. Tuppelns mover inträffar när radgruppen ändrar tillstånd från OPEN till CLOSED.

4 - REORG_NORMAL– OmorganiseringsåtgärdenALTER INDEX ... REORG, CLOSED, flyttade radgruppen från deltaarkivet till kolumnarkivet. Detta inträffade innan tuppeln-mover hade tid att flytta radgruppen.

5 - REORG_FORCED – Den här radgruppen var öppen i deltaarkivet och tvingades in i kolumnarkivet innan den hade ett fullständigt antal rader.

6 - BULKLOAD – En massinläsningsåtgärd komprimerade radgruppen direkt utan att använda deltaarkivet.

7 - MERGE – En sammanslagningsåtgärd konsoliderade en eller flera radgrupper i den här radgruppen och utförde sedan kolumnlagringskomprimering.
has_vertipaq_optimization bit VertiPaq-optimering förbättrar kolumnlagringskomprimering genom att ordna om ordningen på raderna i radgruppen för att uppnå högre komprimering. Den här optimeringen sker automatiskt i de flesta fall. Det finns två fall där VertiPaq-optimering inte används:

a. när en deltaradgrupp flyttas till kolumnarkivet och det finns ett eller flera icke-grupperade index i kolumnlagringsindexet – i det här fallet hoppas VertiPaq-optimering över för att minimera ändringar i mappningsindexet.

b. för columnstore-index på minnesoptimerade tabeller.

0 = Nej
1 = Ja
generation bigint Radgruppgenerering som är associerad med den här radgruppen.
created_time datetime2 Klocktid för när den här radgruppen skapades.

NULL – för ett kolumnlagringsindex i en minnesintern tabell.
closed_time datetime2 Klocktid för när den här radgruppen stängdes.

NULL – för ett kolumnlagringsindex i en minnesintern tabell.

Results

Returnerar en rad för varje radgrupp i den aktuella databasen.

Permissions

Kräver CONTROL behörighet i tabellen och VIEW DATABASE STATE behörighet för databasen.

Behörigheter för SQL Server 2022 och senare

Kräver VIEW DATABASE PERFORMANCE STATE behörighet för databasen.

Examples

A. Beräkna fragmentering för att bestämma när ett kolumnlagringsindex ska organiseras om eller återskapas

För kolumnlagringsindex är procentandelen borttagna rader ett bra mått för fragmenteringen i en radgrupp. När fragmenteringen är 20% eller mer tar du bort de borttagna raderna. Fler exempel finns i Optimera indexunderhåll för att förbättra frågeprestanda och minska resursförbrukningen.

Det här exemplet ansluter sys.dm_db_column_store_row_group_physical_stats till andra systemtabeller och beräknar Fragmentation sedan kolumnen som en uppskattning av effektiviteten för varje radgrupp i den aktuella databasen. Om du vill hitta information om en enskild tabell tar du bort kommentars bindestrecken WHERE framför -satsen och anger ett tabellnamn.

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;