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_repackno funcionará con las tablas temporales. -
pg_repackno funcionará en las tablas que tengan índices globales. -
Mientras
pg_repackesté 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.
|
|
Comando integrado |
Una extensión que ejecuta desde Amazon EC2 o desde el ordenador local |
Requiere un bloqueo |
Requiere un bloqueo |
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;