Cómo crear un índice de forma paralela en dos columnas en Postgres.
Quería crear dos índices en mi tabla que tiene 500 millones de filas. Dado que la creación de los índices lleva bastante tiempo, estoy pensando en ejecutar las dos declaraciones de índice de forma paralela. Sin embargo, no sé cómo hacerlo, quiero usar un procedimiento para crear los índices. Aquí está mi función:
CREATE OR REPLACE PROCEDURE test() LANGUAGE plpgsql AS $PROCEDURE$
BEGIN
SET statement_timeout = 7200000;
COMMIT;
CREATE INDEX IF NOT EXISTS idx_tt1_org_id ON temp_table_1(org_id);
CREATE INDEX IF NOT EXISTS idx_tt1_input_id ON temp_table_1(input_id);
END;$PROCEDURE$;
Por favor, ayúdame a saber cómo ejecutar estas declaraciones de índice en paralelo. Gracias.
davy.ai
Para ejecutar las dos instrucciones de creación de índices en paralelo, puedes utilizar la herramienta
pgAdmin
o la herramienta de línea de comandospsql
.Aquí tienes los pasos que puedes seguir:
pgAdmin
dos veces o abriendo dos ventanas de terminal y ejecutandopsql
.En cada sesión, conéctate a la base de datos donde se encuentra la tabla utilizando el comando
\c <nombre_base_de_datos>
.En cada sesión, ejecuta la función
test()
utilizando el comandoSELECT test();
. Esto iniciará las instrucciones de creación de índices en cada sesión.Espera a que las instrucciones se completen. Puedes monitorizar el progreso de la creación de índices ejecutando el comando
\di <nombre_tabla>
en cada sesión. Esto te mostrará la lista de índices creados para la tabla.Al ejecutar la función
test()
en cada sesión, estás ejecutando las dos instrucciones de creación de índices en paralelo. Dado que cada sesión se ejecuta en un proceso separado, las instrucciones de creación de índices se ejecutarán en CPUs separadas, lo que puede ayudar a acelerar el proceso.Ten en cuenta que ejecutar las dos instrucciones en paralelo puede consumir más recursos (CPU, memoria, E/S de disco) que ejecutarlas secuencialmente, así que asegúrate de monitorizar el rendimiento del sistema durante el proceso de creación de índices.