Cuando comprime una tabla particionada en SQL Server, puede comprimir todas las particiones, algunas o solo una partición.
Para hacer esto, use el REBUILD PARTITION
sintaxis dentro de ALTER TABLE
declaración.
Al hacer esto, puede reconstruir solo la partición especificada o todas las particiones. Alternativamente, puede reconstruir todas las particiones, mientras comprime solo una partición específica o una lista de particiones.
Ejemplo 1:reconstrucción de una partición
En este primer ejemplo, reconstruimos y comprimimos solo una partición en la tabla.
Estimación del ahorro de compresión
Imagina que queremos comprimir una sola partición en una tabla llamada Movies
.
Primero, podemos usar el sp_estimate_data_compression_savings
procedimiento almacenado del sistema para estimar el ahorro que obtendríamos al comprimir la tabla.
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'ROW';
Resultado (usando salida vertical):
object_name | Movies schema_name | dbo index_id | 1 partition_number | 3 size_with_current_compression_setting(KB) | 120 size_with_requested_compression_setting(KB) | 88 sample_size_with_current_compression_setting(KB) | 128 sample_size_with_requested_compression_setting(KB) | 96
Según sp_estimate_data_compression_savings
, el tamaño de la partición debería reducirse de 120 KB a 88 KB una vez que la hayamos comprimido.
Comprimir la partición
Avancemos y comprimámoslo.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);
En este caso usé compresión de filas.
Verificar los ahorros de compresión
Ahora, si consultamos sp_estimate_data_compression_savings
de nuevo, veremos que el tamaño actual ahora es exactamente como se estimó anteriormente (88 KB).
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'NONE';
Resultado (usando salida vertical):
object_name | Movies schema_name | dbo index_id | 1 partition_number | 3 size_with_current_compression_setting(KB) | 88 size_with_requested_compression_setting(KB) | 112 sample_size_with_current_compression_setting(KB) | 96 sample_size_with_requested_compression_setting(KB) | 128
En este ejemplo, obtengo una estimación de los requisitos de espacio si tuviera que eliminar la compresión (es decir, establecerla en NONE
) ).
Verificar qué particiones usan compresión
También podemos usar las sys.partitions
ver para verificar que la partición tiene compresión.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Resultado:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 0 | NONE | | 4 | 0 | NONE | | 3 | 1 | ROW | +--------------------+--------------------+-------------------------+
Eliminar compresión
Antes de pasar al ejemplo 2, eliminemos la compresión de la partición.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);
Ejemplo 2:comprimir varias particiones
En este ejemplo, reconstruimos todas las particiones, pero especificamos solo las particiones que queremos comprimir.
Este es un método alternativo a nuestro primer ejemplo. Usando esta sintaxis, podemos especificar una lista de particiones para comprimir.
ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));
En este caso, reconstruí todas las particiones, pero solo comprimí las particiones 2 y 3.
Nuevamente, podemos usar sys.partitions
para verificar que fueron comprimidos.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Resultado:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 1 | ROW | | 3 | 1 | ROW | | 4 | 0 | NONE | +--------------------+--------------------+-------------------------+