Hvis du tidligere har oprettet en partitioneret tabel i SQL Server, og du nu vil vide, hvor mange rækker der er gemt i hver partition, er her tre forespørgsler, du kan bruge.
Du kan især:
- Forespørg på
sys.dm_db_partition_stats
se - Forespørg på
sys.partitions
se - Brug
$PARTITION
funktion i en forespørgsel
Nedenfor er eksempler på alle tre.
sys.dm_db_partition_stats
sys.dm_db_partition_stats
system dynamisk styringsvisning returnerer side- og rækkeantaloplysninger for hver partition i den aktuelle database.
Her er et eksempel på returnering af rækkeantallet af en opdelt tabel kaldet 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 dette tilfælde er den første og sidste partition tomme (som anbefalet af Microsoft).
sys.partitions
sys.partitions
systemkatalogvisningen indeholder en række for hver partition af alle tabellerne og de fleste typer indekser i databasen.
Her er, hvordan vi kan bruge det til at returnere de samme data som i det foregående eksempel.
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 vil måske bemærke, at dette næsten er identisk med den tidligere forespørgsel. Den eneste forskel er, at denne bruger kolonnen kaldet rows
, hvorimod den forrige brugte en kolonne kaldet row_count
.
$PARTITIONS
$PARTITIONS
systemfunktionen returnerer det partitionsnummer, som et sæt af partitioneringskolonneværdier vil blive tilknyttet til en hvilken som helst specificeret partitionsfunktion.
Vi kan derfor bruge denne information til at konstruere en forespørgsel, der returnerer rækkeantaldata.
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 eneste forskel med resultatet af dette eksempel er, at det kun returnerer antallet af ikke-tomme rækker.