Aqui estão algumas maneiras de retornar informações de partição para uma tabela no SQL Server.
- Você pode usar as
sys.partitions
visualização do catálogo do sistema para retornar informações de partição para uma tabela e a maioria dos tipos de visualizações. - Você pode usar o
sys.dm_db_partition_stats
visualização de gerenciamento dinâmico do sistema para retornar informações de página e contagem de linhas para cada partição no banco de dados atual.
Se uma tabela ou índice não foi particionado, essas visualizações ainda retornarão informações de partição (com um partition_number de
1
). Isso ocorre porque todas as tabelas e índices no SQL Server contêm pelo menos uma partição, sejam ou não particionadas explicitamente. sys.partitions
As
sys.partitions
view contém uma linha para cada partição de todas as tabelas e a maioria dos tipos de índices no banco de dados. Tipos de índice especiais como Full-Text, Spatial e XML não estão incluídos. Aqui está um exemplo para demonstrar.
SELECT *
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Resultado:
+-------------------+-------------+------------+--------------------+-------------------+--------+---------------------------+--------------------+-------------------------+ | partition_id | object_id | index_id | partition_number | hobt_id | rows | filestream_filegroup_id | data_compression | data_compression_desc | |-------------------+-------------+------------+--------------------+-------------------+--------+---------------------------+--------------------+-------------------------| | 72057594049986560 | 91147370 | 1 | 1 | 72057594049986560 | 0 | 0 | 0 | NONE | | 72057594050052096 | 91147370 | 1 | 2 | 72057594050052096 | 100 | 0 | 0 | NONE | | 72057594050117632 | 91147370 | 1 | 3 | 72057594050117632 | 3979 | 0 | 0 | NONE | | 72057594050183168 | 91147370 | 1 | 4 | 72057594050183168 | 0 | 0 | 0 | NONE | +-------------------+-------------+------------+--------------------+-------------------+--------+---------------------------+--------------------+-------------------------+
Podemos ver que existem quatro partições para esta tabela.
Aqui está novamente, desta vez usando saída vertical (para evitar que você tenha que rolar para o lado):
-[ RECORD 1 ]------------------------- partition_id | 72057594049986560 object_id | 91147370 index_id | 1 partition_number | 1 hobt_id | 72057594049986560 rows | 0 filestream_filegroup_id | 0 data_compression | 0 data_compression_desc | NONE -[ RECORD 2 ]------------------------- partition_id | 72057594050052096 object_id | 91147370 index_id | 1 partition_number | 2 hobt_id | 72057594050052096 rows | 100 filestream_filegroup_id | 0 data_compression | 0 data_compression_desc | NONE -[ RECORD 3 ]------------------------- partition_id | 72057594050117632 object_id | 91147370 index_id | 1 partition_number | 3 hobt_id | 72057594050117632 rows | 3979 filestream_filegroup_id | 0 data_compression | 0 data_compression_desc | NONE -[ RECORD 4 ]------------------------- partition_id | 72057594050183168 object_id | 91147370 index_id | 1 partition_number | 4 hobt_id | 72057594050183168 rows | 0 filestream_filegroup_id | 0 data_compression | 0 data_compression_desc | NONE
sys.dm_db_partition_stats
A
sys.dm_db_partition_stats view
retorna informações de contagem de páginas e linhas para cada partição no banco de dados atual. Mas se você estiver interessado apenas em uma tabela, também poderá reduzi-la a apenas essa tabela. Aqui está um exemplo.
SELECT *
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');
Resultado:
+-------------------+-------------+------------+--------------------+--------------------------+--------------------------+------------------------------+-----------------------+---------------------------+--------------------------------+------------------------------------+-------------------+-----------------------+-------------+ | partition_id | object_id | index_id | partition_number | in_row_data_page_count | in_row_used_page_count | in_row_reserved_page_count | lob_used_page_count | lob_reserved_page_count | row_overflow_used_page_count | row_overflow_reserved_page_count | used_page_count | reserved_page_count | row_count | |-------------------+-------------+------------+--------------------+--------------------------+--------------------------+------------------------------+-----------------------+---------------------------+--------------------------------+------------------------------------+-------------------+-----------------------+-------------| | 72057594049986560 | 91147370 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 72057594050052096 | 91147370 | 1 | 2 | 1 | 2 | 9 | 0 | 0 | 0 | 0 | 2 | 9 | 100 | | 72057594050117632 | 91147370 | 1 | 3 | 13 | 15 | 33 | 0 | 0 | 0 | 0 | 15 | 33 | 3979 | | 72057594050183168 | 91147370 | 1 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +-------------------+-------------+------------+--------------------+--------------------------+--------------------------+------------------------------+-----------------------+---------------------------+--------------------------------+------------------------------------+-------------------+-----------------------+-------------+
Aqui está novamente usando a saída vertical:
-[ RECORD 1 ]------------------------- partition_id | 72057594049986560 object_id | 91147370 index_id | 1 partition_number | 1 in_row_data_page_count | 0 in_row_used_page_count | 0 in_row_reserved_page_count | 0 lob_used_page_count | 0 lob_reserved_page_count | 0 row_overflow_used_page_count | 0 row_overflow_reserved_page_count | 0 used_page_count | 0 reserved_page_count | 0 row_count | 0 -[ RECORD 2 ]------------------------- partition_id | 72057594050052096 object_id | 91147370 index_id | 1 partition_number | 2 in_row_data_page_count | 1 in_row_used_page_count | 2 in_row_reserved_page_count | 9 lob_used_page_count | 0 lob_reserved_page_count | 0 row_overflow_used_page_count | 0 row_overflow_reserved_page_count | 0 used_page_count | 2 reserved_page_count | 9 row_count | 100 -[ RECORD 3 ]------------------------- partition_id | 72057594050117632 object_id | 91147370 index_id | 1 partition_number | 3 in_row_data_page_count | 13 in_row_used_page_count | 15 in_row_reserved_page_count | 33 lob_used_page_count | 0 lob_reserved_page_count | 0 row_overflow_used_page_count | 0 row_overflow_reserved_page_count | 0 used_page_count | 15 reserved_page_count | 33 row_count | 3979 -[ RECORD 4 ]------------------------- partition_id | 72057594050183168 object_id | 91147370 index_id | 1 partition_number | 4 in_row_data_page_count | 0 in_row_used_page_count | 0 in_row_reserved_page_count | 0 lob_used_page_count | 0 lob_reserved_page_count | 0 row_overflow_used_page_count | 0 row_overflow_reserved_page_count | 0 used_page_count | 0 reserved_page_count | 0 row_count | 0
Esta tabela de exemplo foi particionada usando o método recomendado pela Microsoft de manter partições vazias em ambas as extremidades do intervalo de partição. Isso garante que qualquer divisão/fusão de partição futura não cause nenhuma movimentação inesperada de dados.