sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-Datenbank Azure SQL verwaltete Instanz

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

Dadurch wird die Katalogansicht sys.column_store_row_groups (Transact-SQL) erweitert.

Spaltenname Datentyp BESCHREIBUNG
object_id int ID der zugrunde liegenden Tabelle.
index_id int ID dieses Columnstore-Indexes für object_id Tabelle.
partition_number int ID der Tabellenpartition, die row_group_id enthält. Sie können partition_number verwenden, um diese DMV mit sys.partitions zu verknüpfen.
row_group_id int ID dieser Zeilengruppe. Bei partitionierten Tabellen ist der Wert innerhalb der Partition eindeutig.

-1 für einen Speicherschwanz.
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 Tail einer In-Memory-Tabelle.
state tinyint Id number associated state_description.

0 = INVISIBLE

1 = OPEN

2 = CLOSED

3 = COMPRESSED

4 = TOMBSTONE

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

0 - INVISIBLE -Eine Zeilengruppe, die erstellt wird. Beispiel:
Eine Zeilengruppe im Columnstore ist UNSICHTBAR, während die Daten komprimiert werden. Wenn die Komprimierung abgeschlossen ist, ändert ein Metadatenwechsel den Status der Spaltenspeicherzeilengruppe von INVISIBLE in COMPRESSED und den Zustand der Deltastore-Zeilengruppe von CLOSED in TOMBSTONE.

1 – ÖFFNEN – Eine Deltastore-Zeilengruppe, die neue Zeilen akzeptiert. Eine offene Zeilengruppe befindet sich weiterhin im rowstore-Format und wurde nicht in das columnstore-Format komprimiert.

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

3 – KOMPRIMIERT – Eine Zeilengruppe, die mit der Spaltenspeicherkomprimierung komprimiert und im Columnstore gespeichert ist.

4 - TOMBSTONE - Eine Zeilengruppe, die früher im Deltastore war 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.

Für Zeilengruppen im Deltastore lautet der Wert 0.
size_in_bytes bigint Kombinierte Größe in Byte aller Seiten in dieser Zeilengruppe. Diese Größe enthält nicht die zum Speichern von Metadaten oder freigegebenen Wörterbüchern erforderliche Größe.
trim_reason tinyint Grund, der die GRUPPE KOMPRIMIERTER Zeilen ausgelöst hat, um weniger als die maximale Anzahl von Zeilen zu haben.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION

1 - NO_TRIM

2 – MASSENLADEN

3 - REORG

4 - DICTIONARY_SIZE

5 - MEMORY_LIMITATION

6 - RESIDUAL_ROW_GROUP

7 - STATS_MISMATCH

8 – ÜBERLAUF

9 - AUTO_MERGE
trim_reason_desc nvarchar(60) Beschreibung der trim_reason.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: Beim Upgrade von der vorherigen Version von SQL Server ist 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 im Rahmen des REORG-Befehls.

4 - DICTIONARY_SIZE: Die Wörterbuchgröße ist zu groß geworden, 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: Als Teil der letzten Zeilengruppe mit Zeilen < 1 Million während des Indexbuildvorgangs geschlossen. 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 "Tail" 1 Million qualifizierte Zeilen enthält > , werden die letzten verbleibenden Zeilen des Stapels komprimiert, wenn die Anzahl zwischen 100 und 1 Millionen liegt.

9 - AUTO_MERGE: Ein Im Hintergrund ausgeführter Zusammenführungsvorgang "Tupel mover" 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 – MASSENLADEN

7 – ZUSAMMENFÜHREN
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. Tupelverschiebung erfolgt, nachdem die Zeilengruppe den Zustand von OPEN in CLOSED ändert.

4 - REORG_NORMAL - Der Reorganisationsvorgang, ALTER INDEX ... REORG hat die CLOSED-Zeilengruppe 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 Spaltenspeicherindex in einer Speichertabelle.
closed_time datetime2 Uhrzeit für den Zeitpunkt, zu dem diese Zeilengruppe geschlossen wurde.

NULL – für einen Spaltenspeicherindex in einer Speichertabelle.

Ergebnisse

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

Berechtigungen

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 BERECHTIGUNG "DATENBANKLEISTUNGSSTATUS ANZEIGEN" für die Datenbank.

Beispiele

A. Berechnen Sie die Fragmentierung, um zu entscheiden, wann ein Columnstore-Index 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 Reorganize and Rebuild Indexes.

In diesem Beispiel werden sys.dm_db_column_store_row_group_physical_stats mit anderen Systemtabellen verknüpft 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  
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;  

Weitere Informationen

Katalogsichten für Objekte (Transact-SQL)
Katalogsichten (Transact-SQL)
Columnstore Index Architecture (Columnstore-Indizes: Architektur)
FAQ: Abfragen des SQL Server-Systemkatalogs
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)