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)
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für