Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

3 maneiras de retornar o número de linhas em cada partição no SQL Server (T-SQL)


Se você criou anteriormente uma tabela particionada no SQL Server e agora deseja saber quantas linhas estão sendo armazenadas em cada partição, aqui estão três consultas que você pode usar.

Em particular, você pode:
  • Consulte o sys.dm_db_partition_stats ver
  • Consulte as sys.partitions ver
  • Use o $PARTITION função em uma consulta

Abaixo estão exemplos de todos os três.

sys.dm_db_partition_stats


O sys.dm_db_partition_stats a visualização de gerenciamento dinâmico do sistema retorna informações de contagem de páginas e linhas para cada partição no banco de dados atual.

Aqui está um exemplo de como retornar a contagem de linhas de uma tabela particionada chamada 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           |
+--------------------+-------------+

Nesse caso, a primeira e a última partições estão vazias (conforme recomendado pela Microsoft).

sys.partitions


As sys.partitions A exibição do catálogo do sistema contém uma linha para cada partição de todas as tabelas e a maioria dos tipos de índices no banco de dados.

Veja como podemos usá-lo para retornar os mesmos dados do exemplo 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      |
+--------------------+--------+

Você pode notar que isso é quase idêntico à consulta anterior. A única diferença é que este usa a coluna chamada rows , enquanto o anterior usava uma coluna chamada row_count .

$PARTITIONS


As $PARTITIONS A função do sistema retorna o número da partição na qual um conjunto de valores de coluna de particionamento seria mapeado para qualquer função de partição especificada.

Portanto, podemos usar essas informações para construir uma consulta que retorna dados de contagem de linhas.
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             |
+--------------------+------------------+

A única diferença com o resultado deste exemplo é que ele retorna apenas a contagem de linhas não vazias.