Vamos a realizar un pequeño análisis para ver si hay algún punto mejorable en un proceso que se lanza a nivel mensual. Este proceso ejecuta n hilos donde cada hilo se ejecuta de manera diaria hasta cubrir el mes. Analizando la ejecución de este proceso, vemos una seria de hilos que tardan más de la cuenta.
Lo primero que vamos a hacer es generar el tkprof de cada uno de los hilos que exceden en el tiempo. Con esto vamos a poder determinar qué está sucediendo internamente en el tiempo de ejecución de cada uno de ellos.
Analizando el tkproff de uno de los hilos vemos una consulta con un índices un poco altos en accesos a los datos pero con una ejecución en tiempo no muy alto (no llega al segundo)
Analizando en detalle el tkproff, concretamente el árbol de ejecución vemos un par de operaciones con índices muy altos. Una operación MERGE JOIN CARTESIAN y acceso FULL a una tabla
En estos puntos, es donde deberíamos atacar para optimizar la consulta.
Analizando la SQL encontramos clausulas exists y claulas join no-join que están penalizando a la consulta. Corregimos la estructura de la SQL y volvemos a generar el tkproff
Ahora la ejecución es inmediata y aunque el número de bloques aún sigue siendo alto.