
Retomando el tema de las instrucciones ODBC, hoy vamos a verlas desde el punto de vista del rendimiento. Esto no significa que no podamos usarlo con fines de auditoria o forensia, pero no ha sido pensado con ese fin, aunque pueda resultar efectivo.
Normalmente cuando tenemos problemas con el rendimiento de la base de datos y no encontramos que está ocurriendo, lo primero que nos dice el especialista suele ser arrancar el DBMon o un supervisor de SQL.
Estos mecanismos son muy útiles para poder determinar problemas de rendimiento, errores en los queries, comportamientos anómalos, etc. Sin embargo tienen la gran desventaja de un volumen de información exageradamente alto, lo cual impide correrlos por períodos prolongados. Por prologado hablamos de más de 1 o 2 horas. A esto debemos sumar que en algunos casos generan carga y puede entorpecer la ejecución de procesos en su tiempo óptimo.
A nuestro rescate llega el IBM i ACS (el reemplazo Java del Cliente Access), que desde BASE DE DATOS-> SQL Performance Center-> Plan Cache Snapshots nos permite crear un volcado del plan cache en un archivo, pudiendo aplicar filtros.
Es importante tener el IBM Navigator for i funcionando. Deben recordar instalar los PTFs de HTTP, DB2 y Java, aparte de los acumulativos correspondientes. Si no lo tenemos funcionando también podremos tomar el snapshot usando Client Access o línea de desde línea de mandatos con STRSQL:
CALL qsys2.dump_plan_cache('ESSELWARE','BMPRD171120');
El primer parámetro es la biblioteca, el 2do el nombre del snapshot.
Este volcado nos mostrará la mayoría de los comandos SQL que se hayan ejecutado desde el último IPL. Es importante destacar que no todos los comandos SQL son salvados en memoria, ya que algunos programas recalculan el plan, dando flush a mucha información valiosa.
Sin embargo, es un mecanismo veloz, consume pocos recursos, y podemos indicar que queremos las instrucciones que se están ejecutando o sólo la información histórica.
Con botón derecho sobre el snapshot nos permite ver diferentes opciones:
- Analizar
- Mostrar instrucciones SQL
- Investigar
- Comentarios
Nos centraremos en los 2 primeros puntos
Analizar
Nos permite ver información estadística de las instrucciones SQLs, desde el tipo de instrucción, hasta la duración o grado de proceso paralelo empleado, el tipo de denominación usada, etc.
Si selecciono de la lista junto a Sentencias SQL la opción de Resumen podré ver un resumido de las instrucciones que guardó en los archivos de estadísticas de forma tabular. Con Detalle aparecerán todas, incluso las repetidas.
Moviéndome hacia la derecha se pueden ver las instrucciones capturadas y datos estadísticos de cada uno, incluyendo ID del proceso.
Pero lo interesante es poder ver el Visual Explain, que es una de las gemas del iACS y del Client Access.
Parados sobre el registro que nos interesa damos click derecho y seleccionamos Trabajar con sentencias SQL. Luego, en la ventana de Run SQL Scripts podemos darle al botón que indica Explain. Algunas veces deberemos corregir el nombre de la biblioteca o reemplazar una "/" por un "."
Los resultados pueden ser más que interesantes, ya que nos puede advertir de falta de índices, operaciones de full-scan, búsquedas no optimizadas con simples filtrados, etc. y podemos descomponer la instrucción en diferentes tareas para entender al forma en que ejecuta.
Recuerdo haber envidiado a los DBAs de Oracle por una herramienta que permitía ver el plan de ejecución, pero con Visual Explain quedé satisfecho.
Lo importante es que podemos capturar toda esta información sin tener que hacer un trace, y el tiempo de tomar el snapshot, que obviamente tiene relación con la cantidad de instrucciones a guardar, es aceptable (por lo general no supera los 5 o 10 minutos).
Espero que les sea útil. Pueden dejarme comentarios si tienen dudas o consultas.