¿Por qué una tabla de un clúster de Amazon Redshift consume más o menos espacio de almacenamiento en disco del esperado?

5 minutos de lectura
0

Una tabla ocupa más espacio en disco del esperado o un porcentaje del espacio libre en disco no ha aumentado después de mi cambio de tamaño clásico. ¿Cómo calcula Amazon Redshift el almacenamiento en disco y el tamaño de la tabla?

Resolución

Comprobar el tamaño mínimo de la tabla

El tamaño mínimo de la tabla es el espacio más pequeño que ocupa una tabla en un clúster de Amazon Redshift. Puede comprobar el tamaño mínimo de la tabla al analizar el uso del almacenamiento del clúster o al cambiar el tamaño de un clúster de Amazon Redshift.

Para las tablas creadas con los estilos de distribución KEY, EVEN o Auto (EVEN), utilice la siguiente fórmula:

Minimum table size = block_size (1 MB) *
(number_of_user_columns + 3 system columns) * number_of_populated_slices * number_of_table_segments

Para las tablas creadas con los estilos de distribución ALL o Auto (ALL), utilice la siguiente fórmula:

Minimum table size = block_size (1 MB) *
(number_of_user_columns + 3 system columns) * number_of_cluster_nodes * number_of_table_segments

Para las fórmulas de tabla, el número de segmentos se basa en si la tabla tiene una clave de ordenación definida. Si una tabla de Amazon Redshift tiene una clave de ordenación definida, la tabla tiene dos segmentos: un segmento ordenado y otro sin ordenar. Si una tabla de Amazon Redshift no tiene una clave de ordenación, la tabla solo produce un segmento sin ordenar.

Puede calcular el número de márgenes rellenados mediante la siguiente consulta:

select count(distinct a.slice) as
number_of_populated_slices, b."table" from stv_blocklist a,
svv_table_info b where a.tbl = b.table_id group by b."table" ;

Ejemplo: seis clústeres dc2.large

Por ejemplo, se puede crear un clúster de seis dc2.large con cuatro tablas pequeñas con la misma estructura y número de filas. Si el clúster usa tres estilos de distribución diferentes y un estilo de distribución con una clave de ordenación, se utilizan consultas diferentes.

La siguiente consulta crea una tabla con un estilo de distribución ALL (y un resultado de seis márgenes rellenados):

create table testsize_all (a varchar(100),b varchar(100), c
varchar(100)) diststyle all;
insert into testsize_all values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

La siguiente consulta crea una tabla con un estilo de distribución EVEN (y un resultado de seis márgenes rellenados):

create table testsize_even (a varchar(100),b varchar(100), c
varchar(100)) diststyle even;
insert into testsize_even values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

La siguiente consulta crea una tabla con una clave de distribución (y un resultado de un margen rellenado):

create table testsize_key (a varchar(100),b varchar(100), c
varchar(100)) distkey (a);
insert into testsize_key values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

La siguiente consulta crea una tabla con una clave de distribución y una clave de ordenación (y un resultado de seis márgenes rellenados):

create table testsize_sort_even (a varchar(100),b
varchar(100), c varchar(100) ) diststyle even sortkey (a);
insert into testsize_sort_even values
('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');

Calcular el tamaño mínimo de la tabla

Para calcular el tamaño mínimo de la tabla para un estilo de distribución EVEN, utilice la siguiente fórmula:

Minimum table size = block_size (1 MB) *
(number_of_user_columns + 3 system columns) * number_of_populated_slices *
number_of_table_segments
1MB * (3+3) * 6 *1 = 36MB

Para calcular el tamaño mínimo de la tabla para un estilo de distribución ALL, utilice la siguiente fórmula:

Minimum table size = block_size (1 MB) *
(number_of_user_columns + 3 system columns) * number_of_cluster_nodes *
number_of_table_segments
1MB * (3+3) * 6 *1 = 36 MB

Para calcular el tamaño mínimo de la tabla para un estilo de distribución KEY, utilice la siguiente fórmula:

Minimum table size = block_size (1 MB) * (number_of_user_columns
+ 3 system columns) * number_of_populated_slices * number_of_table_segments
1MB * (3+3) * 1 *1 = 6MB

Para calcular el tamaño mínimo de la tabla para una distribución par con una clave de ordenación, utilice la siguiente fórmula:

Minimum table size = block_size (1 MB) *
(number_of_user_columns + 3 system columns) * number_of_populated_slices *
number_of_table_segments
1MB * (3+3) * 6 *2 = 72MB

Como indican los cálculos, con un número pequeño de filas insertadas, el tamaño de la tabla es mayor de lo esperado. El tamaño de la tabla sigue aumentando a medida que se insertan el número de filas y aumenta el número de márgenes rellenados.

Cuando se realiza un cambio de tamaño clásico, el número de márgenes rellenados aumenta sin que aumente el volumen de datos de la tabla. Como resultado, la cantidad de espacio libre después del cambio de tamaño no crece linealmente.


Información relacionada

Prácticas recomendadas de Amazon Redshift para el diseño de tablas

Uso de la optimización automática de tablas

Almacenamiento en columnas

Elección de claves de ordenación recomendadas

Flujo de trabajo de planificación y ejecución de consultas

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años