Si anteriormente creó una tabla particionada en SQL Server y ahora quiere saber cuántas filas se almacenan en cada partición, aquí hay tres consultas que puede usar.
En particular, puede:
- Consulta
sys.dm_db_partition_stats
ver - Consulta las
sys.partitions
ver - Utilice la
$PARTITION
función en una consulta
A continuación se muestran ejemplos de los tres.
sys.dm_db_partition_stats
El sys.dm_db_partition_stats
La vista de administración dinámica del sistema devuelve información de recuento de filas y páginas para cada partición en la base de datos actual.
Aquí hay un ejemplo de devolver el recuento de filas de una tabla particionada llamada Movies
.
SELECT
partition_number,
row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
Resultado:
+--------------------+-------------+ | partition_number | row_count | |--------------------+-------------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+-------------+
En este caso, la primera y la última partición están vacías (como recomienda Microsoft).
sys.partitions
Las sys.partitions
La vista de catálogo del sistema contiene una fila para cada partición de todas las tablas y la mayoría de los tipos de índices de la base de datos.
Así es como podemos usarlo para devolver los mismos datos que en el ejemplo anterior.
SELECT
partition_number,
rows
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Resultado:
+--------------------+--------+ | partition_number | rows | |--------------------+--------| | 1 | 0 | | 2 | 100 | | 3 | 3979 | | 4 | 0 | +--------------------+--------+
Puede notar que esto es casi idéntico a la consulta anterior. La única diferencia es que este usa la columna llamada rows
, mientras que el anterior usaba una columna llamada row_count
.
$PARTITIONS
Las $PARTITIONS
La función del sistema devuelve el número de partición en el que se asignaría un conjunto de valores de columna de partición para cualquier función de partición especificada.
Por lo tanto, podemos usar esta información para construir una consulta que devuelva datos de conteo de filas.
SELECT
$PARTITION.MoviesPartitionFunction(MovieId) AS [Partition Number],
COUNT(*) AS [Number of Rows]
FROM Movies
GROUP BY $PARTITION.MoviesPartitionFunction(MovieId)
ORDER BY [Partition Number] ASC
Resultado:
+--------------------+------------------+ | Partition Number | Number of Rows | |--------------------+------------------| | 2 | 100 | | 3 | 3979 | +--------------------+------------------+
La única diferencia con el resultado de este ejemplo es que solo devuelve el recuento de filas no vacías.