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

2 maneiras de obter informações de partição para uma tabela no SQL Server (T-SQL)


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.