Uso de Hints de Paralelismo en grandes volúmenes de datos

lunes, 27 de abril de 2026

Uso de Hints de Paralelismo en grandes volúmenes de datos


Bajo el ecosistema de Oracle Database, es habitual lidiar con procesos que manejan millones de registros (Batch, ETL o reportes pesados). Cuando el tiempo de respuesta es fundamental, el procesamiento en paralelo se convierte en nuestra mejor herramienta.

Sin embargo, el Optimizador de Oracle (CBO) no siempre elige el paralelismo de forma automática. En este post, veremos cómo forzarlo correctamente y qué consideraciones debemos tener.

Cuando usamos un hint de paralelismo, Oracle divide una tarea grande en piezas más pequeñas. Un Query Coordinator (QC) coordina a varios procesos esclavos (Parallel Execution Servers) que trabajan simultáneamente.

La forma más común de implementarlo es a través del hint /*+ PARALLEL(alias, degree) */. El degree o grado define cuántos procesos esclavos vamos a solicitar.

SELECT /*+ PARALLEL(ventas, 4) */ 
       producto_id, SUM(monto)
FROM fact_ventas ventas
GROUP BY producto_id;

En este caso, estamos solicitando 4 procesos esclavos para escanear la tabla y realizar la agregación.

Este es un punto donde muchos fallan. Para que un INSERT funcione realmente rápido, debemos combinar el paralelismo con el Direct Path Load mediante el hint APPEND. Esto hace que Oracle escriba directamente al final de la tabla, saltándose el Buffer Cache y generando mucho menos Redo Log.

ALTER SESSION ENABLE PARALLEL DML;
INSERT /*+ APPEND PARALLEL(destino, 8) */ INTO table_final destino
SELECT /*+ PARALLEL(origen, 8) */ * FROM table_staging origen;
COMMIT;

Para confirmar que el hint está funcionando, debemos generar el plan de ejecución (EXPLAIN PLAN). Debemos identificar las siguientes operaciones:

  • PX COORDINATOR: El proceso principal que une los resultados.
  • PX SEND / PX RECEIVE: Indica que los datos se están moviendo entre procesos esclavos.
  • PX BLOCK ITERATOR: Oracle ha dividido la tabla en bloques para los esclavos.
  • LOAD AS SELECT (HIGH WATER MARK): Indica que el APPEND y el paralelismo de escritura están activos.

Si el plan de ejecución muestra estas líneas (comenzando con "PX"), el paralelismo se está aplicando correctamente.


Este plan de ejecución representa una carga de datos de alto rendimiento (Full Parallel Stack) que utiliza el paralelismo tanto para leer como para escribir. En lugar de procesar los datos fila por fila, el (PX Coordinator) divide la tarea entre 4 procesos esclavos que filtran los duplicados simultáneamente y realizan una inserción directa al disco (Direct Path Load), saltándose la memoria intermedia y escribiendo los datos al final de la tabla de forma masiva. Además, el plan incluye el mantenimiento de índices en paralelo, lo que evita que la base de datos se ralentice al actualizar los índices después de la carga, garantizando la máxima velocidad posible y un uso mínimo de los logs de transacciones.

IMPORTANTE:

No se debe abusar del paralelismo. Aquí mis recomendaciones:

  1. Costo de CPU: Cada proceso paralelo consume CPU. Si el servidor tiene 8 núcleos y lanzas un PARALLEL 32, causarás una degradación general del sistema.
  2. Uso de Memoria: El paralelismo utiliza la PGA de forma intensiva para los ordenamientos y joins. Asegúrate de tener suficiente PGA_AGGREGATE_TARGET.
  3. Tablas pequeñas: No utilices este hint en tablas de pocos registros. El tiempo que le toma a Oracle gestionar los procesos esclavos será mayor que la ganancia de velocidad.

El uso de hints de paralelo es fundamental para grandes volúmenes, pero un grado de paralelismo mal calculado puede afectar a todos los usuarios. ¡Úsalo con cautela y siempre verifica tu plan de ejecución!

0 comentarios :

Publicar un comentario