Skip to main content

Command Palette

Search for a command to run...

Oracle Parallel Query: Aprovechando todo el poder de tu servidor

Updated
4 min readView as Markdown
J
Un apasionado de la base de datos y la educación. Crecemos en comunidad y la educación transforma vidas.

Level200

Durante años, el crecimiento de las bases de datos ha superado la capacidad de una sola CPU para procesar información de manera eficiente, tablas con cientos de millones de registros, procesos ETL masivos y reportes corporativos cada vez más exigentes obligan a Oracle a buscar una estrategia diferente: dividir el trabajo y conquistar el problema en paralelo.

Oracle Parallel Execution permite que múltiples procesos trabajen simultáneamente sobre una misma tarea, transformando operaciones que podrían tardar horas en procesos que concluyen en minutos o incluso segundos; pero ¿cómo funciona realmente? ¿Cuándo vale la pena utilizarlo? ¿Y qué impacto tiene sobre los recursos del servidor?

En este artículo exploraremos el paralelismo desde una perspectiva práctica.

¿Y como decide Oracle el paralelismo?

  • Numero de cpu disponibles

  • Cores por cpu

  • threads por core

  • Parametros de BD

  • Carga del server

  • Objeto involucrado

  • Grado solicitado

  • I/O

Como vemos los cpus que oracle considera disponibles:

SHOW PARAMETER cpu_count;

Que parámetros son importantes para el paralelismo:

PARALLEL_DEGREE_POLICYMODE, por defecto tiene el modo manual, seteado a AUTO oracle habilita el grado de paralelismo automático (DOP).

**Para usar auto DOP requiere que el DBA tune y balancee las necesidades de paralelismo contra los recursos disponibles. I/O Calibration estadísticas debe existir cuando se usa auto DOP.

PARALLEL_MAX_SERVERS  = PARALLEL_THREADS_PER_CPU CPU_COUNT concurrent_parallel_users * 5

Oracle calcula este valor basado en esta formula, setear a un valor muy alto puede afectar durante periodos de picos de consumo.

PARALLEL_THREADS_PER_CPUOperating system-dependent, usually 2   .

Utilice siempre el valor predeterminado.

PARALLEL_MIN_SERVERS = 0

Oracle apagará los servidores paralelos después de que hayan estado inactivos durante un período de tiempo. Este parámetro controla ese comportamiento, cuando el valor de este parámetro no es cero la base de datos inicia los procesos al iniciar la instancia y estos permanecen disponibles hasta que se apaga la instancia.

PARALLEL_MIN_DEGREE = 1

Controla el mínimo grado de paralelismo por DOP.

PARALLEL_DEGREE_LIMITCPU

Se utiliza únicamente si PARALLEL_DEGREE_POLICY está configurado como AUTO o LIMITED. Este parámetro establece el grado máximo de paralelismo que pueden utilizar todas las instrucciones ejecutadas en paralelo.

Cuando se establece en CPU, el grado máximo de paralelismo de una instrucción se limita al número de CPU del sistema.

***Estos parámetros fueron obtenidos de la nota KB82443(Setup, Monitor, And Tune Parallelism In The Database) de Oracle Support**.**

Donde se define el paralelismo?

El paralelismo se puede definir a nivel de instancia, objeto o sentencia SQL.

Ahora veamos el paralelismo en acción:

**Vemos que por el hint se esta usando el paralelismo.

**Veamos el grado de paralelismo que tiene la tabla:

SELECT owner, table_name, degree

FROM dba_tables WHERE table_name='VENTAS';

**Como podemos validar cuales son los procesos paralelos:

SELECT sid, serial#, server_group, server_set, degree, req_degree

FROM v$px_session;

**Si queremos ver el detalle de los procesos:

SELECT sid, server_name, status

FROM gv$px_process;

***Y como se ve cuando me quedo sin capacidad:

A nivel de sistema operativo no tengo cpu disponible, id=0%.

Oracle no puede entregarme los procesos paralelos que pido, en el query pido 16 y en algunos casos solo me da 4.

Donde se recomienda usar el paralelismo?

  • Querys que realizan largos table scans, joins, or particionados index scans.

  • Creación de indices grandes.

  • Creación de tablas grandes incluido vistas materializadas.

  • Bulk inserts, updates , merges y borrados.

Cuando no debemos usar paralelismo?

  • Entornos donde los querrás típicos o transacciones son muy cortos, dado que eso puede empeorar el tiempo de respuesta.

  • Entornos en el cual cpu, memoria e i/o recursos son altamente usados.

Conclusión:

Oracle Parallel Execution puede reducir drásticamente los tiempos de procesamiento al distribuir el trabajo entre múltiples CPUs, pero no todas las cargas se benefician de esta estrategia. Un grado de paralelismo excesivo puede generar sobrecarga, competencia por recursos y una menor eficiencia general del sistema, la clave no es usar más paralelismo, sino encontrar el nivel adecuado para cada carga de trabajo.

1 views