Eliminación de la sobrecarga con pg_repack - Recomendaciones de AWS

Eliminación de la sobrecarga con pg_repack

Puede usar la extensión pg_repack para eliminar la sobrecarga de las tablas y los índices con un bloqueo mínimo de la base de datos. Puede crear esta extensión en la instancia de base de datos y ejecutar el cliente pg_repack (si la versión del cliente y la versión de la extensión coinciden) desde Amazon Elastic Compute Cloud (Amazon EC2) o desde un ordenador que se pueda conectar a la base de datos.

A diferencia de VACUUM FULL, pg_repack no necesita tiempo de inactividad ni un periodo de mantenimiento y no bloqueará otras sesiones.

pg_repack es útil en las situaciones en que es posible que VACUUM FULL, CLUSTER o REINDEX no funcionen. Crea una tabla nueva que contiene los datos de la tabla sobrecargada, realiza un seguimiento de los cambios con respecto a la tabla original y, a continuación, reemplaza la tabla original por la nueva. No bloquea la tabla original para operaciones de lectura o escritura mientras crea la nueva tabla.

Puede utilizar pg_repack para una tabla completa o para un índice. Para ver una lista de tareas, consulte la documentación de pg_repack.

Limitaciones:

  • Para ejecutar pg_repack, la tabla debe tener una clave principal o un índice único.

  • pg_repack no funcionará con las tablas temporales.

  • pg_repack no funcionará en las tablas que tengan índices globales.

  • Mientras pg_repack esté en curso, no podrá realizar operaciones de DDL en las tablas.

En la siguiente tabla se describen las diferencias entre pg_repack y VACUUM FULL.

VACUUM FULL

pg_repack

Comando integrado

Una extensión que ejecuta desde Amazon EC2 o desde el ordenador local

Requiere un bloqueo ACCESS EXCLUSIVE mientras se utiliza en una tabla

Requiere un bloqueo ACCESS EXCLUSIVE solo durante un breve periodo de tiempo

Funciona con todas las tablas

Solo funciona en las tablas que tienen claves principales y únicas

Requiere el doble del espacio de almacenamiento que consumen la tabla y los índices

Requiere el doble del espacio de almacenamiento que consumen la tabla y los índices

Para ejecutar pg_repack en una tabla, use el siguiente comando:

pg_repack -h <host> -d <dbname> --table <tablename> -k

Para ejecutar pg_repack en un índice, use el siguiente comando:

pg_repack -h <host> -d <dbname> --index <index name>

Para obtener más información, consulte la entrada en el blog de AWS Remove bloat from Amazon Aurora and RDS for PostgreSQL with pg_repack.

Advertencia

El error error-on-invalid-index de pg_repack suele indicar que uno o varios índices de la tabla están dañados o no son válidos. pg_repack no puede funcionar de forma segura en las tablas que no tienen índices válidos porque depende de los índices para mantener la coherencia de datos durante el proceso de reempaquetado.

Este error se produce en las siguientes situaciones:

  • El índice está marcado como no válido (por ejemplo, debido a un error en una instrucción CREATE INDEX CONCURRENTLY).

  • El índice está dañado (posiblemente debido a problemas de hardware o a cierres bruscos).

Utilice la siguiente consulta para identificar los índices no válidos y suprimirlos primero si los encuentra.

SELECT indexrelid::regclass, indisvalid FROM pg_index WHERE indrelid = 'orders'::regclass AND NOT indisvalid; Drop the invalid index: DROP INDEX index_name;