sql >> Base de Datos >  >> RDS >> Sqlserver

2 formas de obtener información de partición para una tabla en SQL Server (T-SQL)

Aquí hay un par de formas de devolver información de partición para una tabla en SQL Server.

  • Puede usar las sys.partitions vista de catálogo del sistema para devolver información de partición para una tabla y la mayoría de los tipos de vistas.
  • Puede usar sys.dm_db_partition_stats view vista de administración dinámica del sistema para devolver información de recuento de páginas y filas para cada partición en la base de datos actual.

Si una tabla o índice no se particionó, estas vistas seguirán mostrando información de la partición (con un número_de_partición de 1 ). Esto se debe a que todas las tablas e índices de SQL Server contienen al menos una partición, estén o no explícitamente particionados.

sys.partitions

Las sys.partitions view contiene una fila para cada partición de todas las tablas y la mayoría de los tipos de índices en la base de datos. No se incluyen tipos de índices especiales como Texto completo, Espacial y XML.

Aquí hay un ejemplo para demostrarlo.

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 hay cuatro particiones para esta tabla.

Aquí está de nuevo, esta vez con salida vertical (para evitar tener que desplazarse hacia los lados):

-[ 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 view

La vista sys.dm_db_partition_stats view devuelve información de recuento de páginas y filas para cada partición en la base de datos actual. Pero si solo está interesado en una tabla, también puede limitarla a esa tabla.

He aquí un ejemplo.

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           |
+-------------------+-------------+------------+--------------------+--------------------------+--------------------------+------------------------------+-----------------------+---------------------------+--------------------------------+------------------------------------+-------------------+-----------------------+-------------+

Aquí está nuevamente usando salida 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 tabla de muestra se particionó utilizando el método recomendado por Microsoft de mantener particiones vacías en ambos extremos del rango de partición. Esto garantiza que cualquier división/fusión de partición futura no provoque ningún movimiento de datos inesperado.