sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-DatenbankAzure SQL Managed Instance

Stellt aktuelle Informationen auf Zeilengruppenebene zu allen Columnstore-Indizes 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 In-Memory-Tail.
delta_store_hobt_id bigint Die hobt_id für eine Zeilengruppe im Deltaspeicher.

NULL, wenn sich die Zeilengruppe nicht im Deltaspeicher befindet.

NULL für das Ende einer In-Memory-Tabelle.
state tinyint ID-Nummer, die state_description zugeordnet ist.

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. Zum Beispiel:
Eine Zeilengruppe im Columnstore ist UNSICHTBAR, während die Daten komprimiert werden. Wenn die Komprimierung abgeschlossen ist, ändert ein Metadatenschalter den Zustand der Columnstore-Zeilengruppe von INVISIBLE in COMPRESSED und den Zustand der Deltastore-Zeilengruppe von CLOSED in TOMBSTONE.

1 – OPEN – 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 darauf wartet, dass der Tupel-Mover-Prozess sie in den Columnstore komprimiert.

3 - COMPRESSED : Eine Zeilengruppe, die mit Columnstore-Komprimierung komprimiert und im Columnstore gespeichert wird.

4 – TOMBSTONE : Eine Zeilengruppe, die sich früher 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.

Für Zeilengruppen im Deltastore lautet der Wert 0.
size_in_bytes bigint Kombinierte Größe aller Seiten in dieser Zeilengruppe in Bytes. 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 ausgelöst hat, dass die COMPRESSED-Zeilengruppe weniger als die maximale Anzahl von Zeilen aufweist.

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 der trim_reason.

0 – UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: Beim Upgrade von der vorherigen Version von SQL Server.

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 geringer sein, wenn eine Teilmenge von Zeilen gelöscht wurde, nachdem die Deltazeilengruppe geschlossen wurde.

2 - BULKLOAD: Die Batchgröße des Massenladens beschränkte 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 zusammenzukomprimieren.

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

6 – RESIDUAL_ROW_GROUP: Wird während des Indexbuildvorgangs als Teil der letzten Zeilengruppe mit Zeilen < 1 Million geschlossen. Hinweis: Ein Partitionsbuild mit mehreren Kernen kann zu mehreren Kürzungen dieses Typs führen.

7 – STATS_MISMATCH: Nur für Columnstore in der In-Memory-Tabelle. Wenn Statistiken fälschlicherweise angegeben >sind = 1 Million qualifizierte Zeilen im Tail, aber weniger gefunden wurden, hat < die komprimierte Zeilengruppe 1 Million Zeilen.

8 – SPILLOVER: Nur für Columnstore in der In-Memory-Tabelle. Wenn 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 Tupel mover-Mergevorgang konsolidiert eine oder mehrere Zeilengruppen in dieser Zeilengruppe.
transition_to_compressed_state TINYINT Zeigt, wie diese Zeilengruppe 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 – Eine Indexerstellung oder Indexneuerstellung komprimiert die Zeilengruppe.

3 – TUPLE_MOVER – Der im Hintergrund ausgeführte Tupel mover komprimierte die Zeilengruppe. Tupelverschiebung erfolgt, nachdem der Zustand der Zeilengruppe von OPEN in CLOSED geändert wird.

4 - REORG_NORMAL - Der Reorganisationsvorgang, ALTER INDEX ... REORG, hat die CLOSED-Zeilengruppe aus dem Deltastore in den Columnstore verschoben. Dies geschah, 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: Bei einem Massenladevorgang wurde die Zeilengruppe direkt komprimiert, ohne den Deltastore zu verwenden.

7 – MERGE: Bei einem Mergevorgang wurden eine oder mehrere Zeilengruppen in dieser Zeilengruppe konsolidiert und anschließend die Columnstore-Komprimierung durchgeführt.
has_vertipaq_optimization bit Die VertiPaq-Optimierung verbessert die Columnstore-Komprimierung, 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 Deltazeilengruppe in den Columnstore verschoben wird und mindestens ein nicht gruppierter Index im Columnstore-Index vorhanden ist, wird in diesem Fall die VertiPaq-Optimierung übersprungen, um Änderungen am Zuordnungsindex zu minimieren;
b. für Columnstore-Indizes für speicheroptimierte Tabellen.

0 = Nein

1 = Ja
Generation BIGINT Zeilengruppengenerierung, die dieser Zeilengruppe zugeordnet ist.
created_time datetime2 Uhrzeit der Erstellung dieser Zeilengruppe.

NULL: Für einen Columnstore-Index in einer In-Memory-Tabelle.
closed_time datetime2 Uhrzeit des Schließens dieser Zeilengruppe.

NULL: Für einen Columnstore-Index in einer In-Memory-Tabelle.

Ergebnisse

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

Berechtigungen

Erfordert CONTROL die Berechtigung 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.

Beispiele

A. Berechnen Sie die Fragmentierung, um zu entscheiden, wann ein Columnstore-Index neu organisiert oder neu erstellt werden soll.

Bei Columnstore-Indizes 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 Neuorganisieren und Neuerstellen von Indizes.

In diesem Beispiel wird sys.dm_db_column_store_row_group_physical_stats mit anderen Systemtabellen verknüpft und dann die Fragmentation Spalte als Schätzung der Effizienz der einzelnen Zeilengruppen 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)