Se in precedenza hai creato una tabella partizionata in SQL Server e ora vuoi sapere quante righe sono archiviate in ciascuna partizione, ecco tre query che puoi utilizzare.
In particolare, puoi:
- Interroga il
sys.dm_db_partition_stats
visualizza - Esegui una query su
sys.partitions
visualizza - Usa il
$PARTITION
funzione in una query
Di seguito sono riportati esempi di tutti e tre.
sys.dm_db_partition_stats
Il sys.dm_db_partition_stats
la visualizzazione a gestione dinamica del sistema restituisce le informazioni sul conteggio delle pagine e delle righe per ogni partizione nel database corrente.
Ecco un esempio di restituzione del conteggio delle righe di una tabella partizionata denominata Movies
.
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
Risultato:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+-------------+
In questo caso, la prima e l'ultima partizione sono vuote (come consigliato da Microsoft).
sys.partitions
Il sys.partitions
la vista del catalogo di sistema contiene una riga per ogni partizione di tutte le tabelle e la maggior parte dei tipi di indici nel database.
Ecco come possiamo usarlo per restituire gli stessi dati dell'esempio precedente.
SELECT
partition_number,
rows
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Risultato:
+--------------------+--------+ | partition_number | rows | |--------------------+--------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+--------+
Potresti notare che questo è quasi identico alla query precedente. L'unica differenza è che questo usa la colonna chiamata rows
, mentre il precedente utilizzava una colonna chiamata row_count
.
$PARTITIONS
Il $PARTITIONS
funzione di sistema restituisce il numero di partizione in cui verrebbe mappato un insieme di valori di colonna di partizionamento per qualsiasi funzione di partizione specificata.
Possiamo quindi utilizzare queste informazioni per costruire una query che restituisca i dati del conteggio delle righe.
SELECT
$PARTITION.MoviesPartitionFunction(MovieId) AS [Partition Number],
COUNT(*) AS [Number of Rows]
FROM Movies
GROUP BY $PARTITION.MoviesPartitionFunction(MovieId)
ORDER BY [Partition Number] ASC
Risultato:
+--------------------+------------------+ | Partition Number | Number of Rows | |--------------------+------------------| | 2 | 100 | | 3 | 3979 | +--------------------+------------------+
L'unica differenza con il risultato di questo esempio è che restituisce solo il conteggio delle righe non vuote.