Buenas Tardes Amigos, esta semana estuvimos realizando tareas de peformance en algunos customers puntuales.
Me sentí alegre, al poder recordar varias buenas practicas de Oracle con las cuales ya venimos operando con los consultores que están en mi equipo.
Problemática
- Nos encontramos con aplicaciones que esta semana introdujeron un ciclo de cambios en producción mediante diferentes deploys.
- Algunos querys pasaron de tiempos medidos en , mili segundos, segundos a minutos.
- algunas aplicaciones dejaron de responder a tareas puntuales por medio time out.
Plan de acción
Como plan de acción (que ampliare en varios artículos de esta semana) decidimos hacer unas serie de tareas de monitoreo y con ello, proponer mejoras.
En el articulo de hoy, utilizaremos la herramienta Cloud Control, pero también comenzaremos a realizar las tareas por linea de comandos con el uso de los scripts sqltrpt.sql que nos servirá en caso de estar en un Customer , en donde no tengamos acceso a dicha herramienta o no esta instalado.
Cloud Control
En Cloud control , con el nombre de nuestra instancia de base de datos que fue seleccionada para ser analizada, usamos el siguiente proceso:
Performance >> Top Activity
En el browser podemos observar un escenario parecido a este:
Comienza el análisis
Como parte de nuestro proceso de tuning, realizamos el monitoreo proactivo del grupo de transacciones que esta ocasionando problemas en el aplicativo web en producción.
Notamos particularmente que había un uso casi nulo de los recursos (por las características de los querys), y se traslado hacia un incremento en el consumo de CPU, I/O y Clustering.En la misma pantalla, abajo a la derecha podemos observar cuales son los principales programas que están en ejecución y cual es el consumo aproximado de cada conector , user o grupo de aplicaciones.
Continuamos en la misma pantalla, abajo a la izquierda podemos observar los querys que estan en ejeuccion y los recursos utilizados.
Al detectarlos podemos:
- Crear un tuning advisor para UN query.
- Crear un tuning advisor para un GRUPO de querys.
Notamos que en la ejecución del INSERT, se estaba ocupando el mayor porcentaje de recursos. Es así que decidimos comenzar con nuestra tarea de verificar si era posible ejecutar mejoras en el query, en principio sin la re escritura del código.
Crear SQL Tuning advisor
Actions >> Schedule SQL Tuning Set Box >> Select Button >> Go
Schedule Tuning Advisor Task
*Name: en este lugar podemos customizar el TASK NAME. *Total Time Limit: Colocamos el tiempo maximo que querramos que dure nuestro query test. *Schedule: Si preferimos que comience en el momento o en otro horario de menor carga.
Observamos el avance de nuestra TASK.
Mientras la TASK esta en ejecución , la consola de Cloud Control muestra el avance, y nosotros podemos ir a otro tag, para confirmar en nuestro monitoreo que la tarea se desempeña sin problemas:
Performance >> Top Activity
Allí confirmamos que el scheduler esta ejecutando nuestra tarea programada.
Recomendaciones del Tuning Advisor
Cuando concluye nuestra TASK, los resultados fueron las siguientes recomendaciones:
Ejecución de Estadísticas en objetos.
Creacion de un PROFILE.
Ejecución de recomendación: estadísticas.
check button >> IMPLEMENT
Ejecución de recomendación: PROFILE
Click on COMPARE EXPLAIN PLANS
Nos advierte que si aplicamos el PROFILE, contaremos con las siguientes mejoras:
En breves palabras les comento que es un PROFILE, pero les recomiendo nutrirse de la bibliográfica de Oracle acerca de estos conceptos con mayor profundidad.
Un SQL profile is un objeto de base de datos, que contiene estadísticas auxiliares especificas a una declaración SQL u SQL id.
Continuamos hacia abajo y podemos observar las mejoras y las penalidades que tenemos previo al cambio.
Si creemos con nuestro criterio que es razonable la mejora, lo implementamos :
check button >> IMPLEMENT
Al finalizar nos muestra la herramienta, que el PROFILE fue implementado.
Este nombre nos sirve para poder identificarlo en la vista DBA_SQL_PROFILES
COLUMN category FORMAT a10 COLUMN sql_text FORMAT a20 SELECT NAME, SQL_TEXT, CATEGORY, STATUS FROM DBA_SQL_PROFILES;
Comprobación
Podemos solicitar que se ejecute la tarea nuevamente desde la aplicación, ( o revisar si se repite continuamente) y chequeamos tiempos.
En nuestro caso en la próxima ejecución, pudimos observar el cambio de comportamiento, con una gran mejoría, en un 90 % del proceso.
En el próximo capitulo abordaremos la misma temática desde la linea de comandos.