Wenn Sie zuvor eine partitionierte Tabelle in SQL Server erstellt haben und nun wissen möchten, wie viele Zeilen in jeder Partition gespeichert werden, können Sie die folgenden drei Abfragen verwenden.
Insbesondere können Sie:
- Fragen Sie
sys.dm_db_partition_stats
ab ansehen - Fragen Sie die
sys.partitions
ab ansehen - Verwenden Sie die
$PARTITION
Funktion in einer Abfrage
Nachfolgend finden Sie Beispiele für alle drei.
sys.dm_db_partition_stats
Die sys.dm_db_partition_stats
System Dynamic Management View gibt Informationen zur Seiten- und Zeilenanzahl für jede Partition in der aktuellen Datenbank zurück.
Hier ist ein Beispiel für die Rückgabe der Zeilenanzahl einer partitionierten Tabelle namens Movies
.
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
Ergebnis:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+-------------+
In diesem Fall sind die erste und letzte Partition leer (wie von Microsoft empfohlen).
sys.partitions
Die sys.partitions
Die Systemkatalogansicht enthält eine Zeile für jede Partition aller Tabellen und der meisten Arten von Indizes in der Datenbank.
So können wir damit die gleichen Daten wie im vorherigen Beispiel zurückgeben.
SELECT
partition_number,
rows
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Ergebnis:
+--------------------+--------+ | partition_number | rows | |--------------------+--------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+--------+
Sie werden vielleicht bemerken, dass dies fast identisch mit der vorherigen Abfrage ist. Der einzige Unterschied besteht darin, dass hier die Spalte namens rows
verwendet wird , während die vorherige eine Spalte namens row_count
verwendete .
$PARTITIONS
Die $PARTITIONS
Die Systemfunktion gibt die Partitionsnummer zurück, in die ein Satz von Partitionierungsspaltenwerten für eine beliebige angegebene Partitionsfunktion abgebildet würde.
Wir können diese Informationen daher verwenden, um eine Abfrage zu erstellen, die Daten zur Zeilenanzahl zurückgibt.
SELECT
$PARTITION.MoviesPartitionFunction(MovieId) AS [Partition Number],
COUNT(*) AS [Number of Rows]
FROM Movies
GROUP BY $PARTITION.MoviesPartitionFunction(MovieId)
ORDER BY [Partition Number] ASC
Ergebnis:
+--------------------+------------------+ | Partition Number | Number of Rows | |--------------------+------------------| | 2 | 100 | | 3 | 3979 | +--------------------+------------------+
Der einzige Unterschied zum Ergebnis dieses Beispiels besteht darin, dass es nur die Anzahl nicht leerer Zeilen zurückgibt.