Freigeben über


sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Gilt für: SQL Server 2016 (13.x) und spätere Versionen Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Stellt aktuelle Zeilengruppenebeneninformationen zu allen Spaltenspeicherindizes in der aktuellen Datenbank bereit.

Dieser DMV erweitert die Katalogansicht sys.column_store_row_groups.

Spaltenname Datentyp Description
object_id int ID der zugrunde liegenden Tabelle.
index_id int ID dieses Columnstore-Indexes in object_id der Tabelle.
partition_number int ID der Tabellenpartition, die enthalten ist row_group_id. Sie können partition_number verwenden, um diesem DMV beizutreten. sys.partitions
row_group_id int ID dieser Zeilengruppe. Bei partitionierten Tabellen ist der Wert innerhalb der Partition eindeutig.

-1 für einen In-Memory-Tail.
delta_store_hobt_id bigint Die hobt_id für eine Zeilengruppe im Delta-Speicher.

NULL wenn sich die Zeilengruppe nicht im Deltaspeicher befindet.

NULL für den Schwanz einer In-Memory-Tabelle.
state tinyint ID-Nummer zugeordnet state_description.

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

COMPRESSED ist der einzige Zustand, der für Speichertabellen gilt.
state_desc nvarchar(60) Beschreibung des Zeilengruppenstatus:

0 - INVISIBLE - Eine Zeilengruppe, die erstellt wird. Beispiel:

Eine Zeilengruppe im Columnstore befindet INVISIBLE sich, während die Daten komprimiert werden. Wenn die Komprimierung abgeschlossen ist, ändert ein Metadatenwechsel den Status der Spaltenspeicherzeilengruppe von INVISIBLE zu COMPRESSED, und der Zustand der Deltastore-Zeilengruppe von CLOSED zu TOMBSTONE.

1 - OPEN – Eine Deltastore-Zeilengruppe, die neue Zeilen akzeptiert. Eine geöffnete Zeilengruppe befindet sich weiterhin im Rowstore-Format und wurde nicht in das Spaltenspeicherformat komprimiert.

2 - CLOSED - Eine Zeilengruppe im Deltaspeicher, die die maximale Anzahl von Zeilen enthält, und wartet auf den Tupel-Moverprozess, um sie in den Columnstore zu komprimieren.

3 - COMPRESSED - Eine Zeilengruppe, die mit der Spaltenspeicherkomprimierung komprimiert und im Columnstore gespeichert ist.

4 - TOMBSTONE - Eine Zeilengruppe, die sich zuvor im Deltastore befand und nicht mehr verwendet wird.
total_rows bigint Die Anzahl von Zeilen, die in der Zeilengruppe physisch gespeichert sind. Für komprimierte Zeilengruppen. Enthält die Zeilen, die als gelöscht markiert sind.
deleted_rows bigint Die Anzahl von Zeilen, die in einer komprimierten Zeilengruppe physisch gespeichert und zum Löschen markiert sind.

0 für Zeilengruppen, die sich im Delta-Speicher befinden.

Bei nicht gruppierten Spaltenspeicherindizes enthält dieser Wert keine gelöschten Zeilen, die im Löschpuffer gespeichert sind. Weitere Informationen und die Anzahl der gelöschten Zeilen im Löschpuffer finden Sie unter sys.internal_partitions.
size_in_bytes bigint Kombinierte Größe in Byte aller Seiten in dieser Zeilengruppe. Diese Größe enthält nicht die größe, die zum Speichern von Metadaten oder freigegebenen Wörterbüchern erforderlich ist.
trim_reason tinyint Grund, der die COMPRESSED Zeilengruppe ausgelöst hat, um weniger als die maximale Anzahl von Zeilen zu haben.

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) Beschreibung von trim_reason.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: Ist beim Upgrade von der vorherigen Version von SQL Server aufgetreten.

1 - NO_TRIM: Die Zeilengruppe wurde nicht gekürzt. Die Zeilengruppe wurde mit der maximalen Anzahl von 1.048.576 Zeilen komprimiert. Die Anzahl der Zeilen könnte kleiner sein, wenn eine Teilmenge von Zeilen gelöscht wurde, nachdem die Delta-Zeilengruppe geschlossen wurde.

2 - BULKLOAD: Die Massenladebatchgröße beschränkt die Anzahl der Zeilen.

3 - REORG: Erzwungene Komprimierung als Teil des REORG Befehls.

4 - DICTIONARY_SIZE: Die Wörterbuchgröße wurde zu groß, um alle Zeilen zusammen zu komprimieren.

5 - MEMORY_LIMITATION: Nicht genügend verfügbarer Arbeitsspeicher, um alle Zeilen zusammen zu komprimieren.

6 - RESIDUAL_ROW_GROUP: Geschlossen als Teil der letzten Zeilengruppe mit Zeilen < 1 Million während des Indexbuildvorgangs.

Hinweis: Ein Partitionsbuild mit mehreren Kernen kann zu mehr als einer Kürzung dieses Typs führen.

7 - STATS_MISMATCH: Nur für den Spaltenspeicher in der Speichertabelle. Wenn statistiken fälschlicherweise angegeben >= 1 Million qualifizierte Zeilen im Tail, aber wir weniger gefunden haben, hat < die komprimierte Zeilengruppe 1 Millionen Zeilen.

8 - SPILLOVER: Nur für den Spaltenspeicher in der Speichertabelle. Wenn der Tail > über 1 Million qualifizierte Zeilen verfügt, werden die letzten verbleibenden Batchzeilen komprimiert, wenn die Anzahl zwischen 100.000 und 1 Million liegt.

9 - AUTO_MERGE: Ein Im Hintergrund ausgeführter Tuple Mover-Zusammenführungsvorgang konsolidiert eine oder mehrere Zeilengruppen in dieser Zeilengruppe.
transition_to_compressed_state tinyint Zeigt, wie diese Rowgroup aus dem Deltastore in einen komprimierten Zustand im Columnstore verschoben wurde.

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 - der Vorgang gilt nicht für den Deltastore. Oder die Zeilengruppe wurde vor dem Upgrade auf SQL Server 2016 (13.x) komprimiert, in diesem Fall wird der Verlauf nicht beibehalten.

2 - INDEX_BUILD - Ein Index erstellt oder index neu erstellt komprimiert die Zeilengruppe.

3 - TUPLE_MOVER - Der Tupel-Mover, der im Hintergrund ausgeführt wird, komprimierte die Zeilengruppe. Tupel-Mover geschieht, nachdem die Zeilengruppe den Zustand von OPEN zu CLOSED" ändert.

4 - REORG_NORMAL - Der Reorganisationsvorgang, ALTER INDEX ... REORGhat die CLOSED Rowgroup aus dem Deltastore in den Columnstore verschoben. Dies ist aufgetreten, bevor der Tupel-Mover Zeit hatte, die Zeilengruppe zu verschieben.

5 - REORG_FORCED - Diese Zeilengruppe war im Deltastore geöffnet und wurde in den Columnstore gezwungen, bevor sie eine vollständige Anzahl von Zeilen hatte.

6 - BULKLOAD – Ein Massenladevorgang komprimierte die Rowgroup direkt, ohne den Deltastore zu verwenden.

7 - MERGE - Ein Zusammenführungsvorgang konsolidiert eine oder mehrere Zeilengruppen in dieser Zeilengruppe und führte dann die Spaltenspeicherkomprimierung aus.
has_vertipaq_optimization bit Die VertiPaq-Optimierung verbessert die Spaltenspeicherkomprimierung, indem die Reihenfolge der Zeilen in der Zeilengruppe neu angeordnet wird, um eine höhere Komprimierung zu erzielen. Diese Optimierung erfolgt in den meisten Fällen automatisch. Es gibt zwei Fälle, in denen die VertiPaq-Optimierung nicht verwendet wird:

a. wenn eine Delta-Zeilengruppe in den Columnstore wechselt und ein oder mehrere nicht gruppierte Indizes im Columnstore-Index vorhanden sind – in diesem Fall wird die VertiPaq-Optimierung übersprungen, um Änderungen am Zuordnungsindex zu minimieren;

b. für Spaltenspeicherindizes für speicheroptimierte Tabellen.

0 = Nein
1 = Ja
generation bigint Zeilengruppengenerierung, die dieser Zeilengruppe zugeordnet ist.
created_time datetime2 Uhrzeit für die Erstellung dieser Zeilengruppe.

NULL - für einen Columnstore-Index in einer Speichertabelle.
closed_time datetime2 Uhrzeit für den Zeitpunkt, zu dem diese Zeilengruppe geschlossen wurde.

NULL - für einen Columnstore-Index in einer Speichertabelle.

Results

Gibt eine Zeile für jede Zeilengruppe in der aktuellen Datenbank zurück.

Permissions

Erfordert CONTROL Berechtigungen für die Tabelle und VIEW DATABASE STATE die Berechtigung für die Datenbank.

Berechtigungen für SQL Server 2022 und höher

Erfordert die VIEW DATABASE PERFORMANCE STATE-Berechtigung für die Datenbank.

Examples

A. Berechnen der Fragmentierung, um zu entscheiden, wann ein Spaltenspeicherindex neu organisiert oder neu erstellt werden soll

Bei Spaltenspeicherindizes ist der Prozentsatz der gelöschten Zeilen ein gutes Maß für die Fragmentierung in einer Zeilengruppe. Wenn die Fragmentierung 20 % oder mehr beträgt, entfernen Sie die gelöschten Zeilen. Weitere Beispiele finden Sie unter Optimieren der Indexwartung, um die Abfrageleistung zu verbessern und den Ressourcenverbrauch zu verringern.

In diesem Beispiel wird sys.dm_db_column_store_row_group_physical_stats eine Verknüpfung mit anderen Systemtabellen hergestellt und anschließend die Fragmentation Spalte als Schätzung der Effizienz jeder Zeilengruppe in der aktuellen Datenbank berechnet. Um Informationen zu einer einzelnen Tabelle zu finden, entfernen Sie die Kommentarbindestriche vor der WHERE Klausel, und geben Sie einen Tabellennamen an.

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;