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)