Om du tidigare har skapat en partitionerad tabell i SQL Server och du nu vill veta hur många rader som lagras i varje partition, här är tre frågor du kan använda.
I synnerhet kan du:
- Fråga
sys.dm_db_partition_stats
visa - Fråga
sys.partitions
visa - Använd
$PARTITION
funktion i en fråga
Nedan finns exempel på alla tre.
sys.dm_db_partition_stats
sys.dm_db_partition_stats
Systemets dynamiska hanteringsvy returnerar sid- och radräkningsinformation för varje partition i den aktuella databasen.
Här är ett exempel på att returnera radantalet för en partitionerad tabell som heter Movies
.
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
Resultat:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+-------------+
I det här fallet är den första och sista partitionen tomma (som rekommenderas av Microsoft).
sys.partitions
sys.partitions
systemkatalogvyn innehåller en rad för varje partition av alla tabeller och de flesta typer av index i databasen.
Så här kan vi använda det för att returnera samma data som i föregående exempel.
SELECT
partition_number,
rows
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Resultat:
+--------------------+--------+ | partition_number | rows | |--------------------+--------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+--------+
Du kanske märker att detta är nästan identiskt med den föregående frågan. Den enda skillnaden är att den här använder kolumnen som heter rows
, medan den föregående använde en kolumn som heter row_count
.
$PARTITIONS
$PARTITIONS
systemfunktionen returnerar partitionsnumret till vilket en uppsättning partitioneringskolumnvärden skulle mappas för en specificerad partitionsfunktion.
Vi kan därför använda denna information för att konstruera en fråga som returnerar radräkningsdata.
SELECT
$PARTITION.MoviesPartitionFunction(MovieId) AS [Partition Number],
COUNT(*) AS [Number of Rows]
FROM Movies
GROUP BY $PARTITION.MoviesPartitionFunction(MovieId)
ORDER BY [Partition Number] ASC
Resultat:
+--------------------+------------------+ | Partition Number | Number of Rows | |--------------------+------------------| | 2 | 100 | | 3 | 3979 | +--------------------+------------------+
Den enda skillnaden med resultatet av detta exempel är att det bara returnerar antalet rader som inte är tomma.