Si vous avez déjà créé une table partitionnée dans SQL Server et que vous souhaitez maintenant savoir combien de lignes sont stockées dans chaque partition, voici trois requêtes que vous pouvez utiliser.
Vous pouvez notamment :
- Interroger
sys.dm_db_partition_stats
voir - Interroger les
sys.partitions
voir - Utilisez la
$PARTITION
fonction dans une requête
Vous trouverez ci-dessous des exemples des trois.
sys.dm_db_partition_stats
Les sys.dm_db_partition_stats
La vue de gestion dynamique du système renvoie des informations sur le nombre de pages et de lignes pour chaque partition de la base de données actuelle.
Voici un exemple de renvoi du nombre de lignes d'une table partitionnée appelée Movies
.
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
Résultat :
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+-------------+
Dans ce cas, la première et la dernière partitions sont vides (comme recommandé par Microsoft).
sys.partitions
Les sys.partitions
La vue du catalogue système contient une ligne pour chaque partition de toutes les tables et la plupart des types d'index de la base de données.
Voici comment nous pouvons l'utiliser pour renvoyer les mêmes données que dans l'exemple précédent.
SELECT
partition_number,
rows
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Résultat :
+--------------------+--------+ | partition_number | rows | |--------------------+--------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+--------+
Vous remarquerez peut-être que c'est presque identique à la requête précédente. La seule différence est que celui-ci utilise la colonne appelée rows
, alors que le précédent utilisait une colonne appelée row_count
.
$PARTITIONS
Les $PARTITIONS
La fonction système renvoie le numéro de partition dans lequel un ensemble de valeurs de colonne de partitionnement serait mappé pour toute fonction de partition spécifiée.
Nous pouvons donc utiliser ces informations pour construire une requête qui renvoie des données de nombre de lignes.
SELECT
$PARTITION.MoviesPartitionFunction(MovieId) AS [Partition Number],
COUNT(*) AS [Number of Rows]
FROM Movies
GROUP BY $PARTITION.MoviesPartitionFunction(MovieId)
ORDER BY [Partition Number] ASC
Résultat :
+--------------------+------------------+ | Partition Number | Number of Rows | |--------------------+------------------| | 2 | 100 | | 3 | 3979 | +--------------------+------------------+
La seule différence avec le résultat de cet exemple est qu'il ne renvoie que le nombre de lignes non vides.