Analizar una consulta

Hola,
Algunas consultas de certificados (materias aprobadas y materias regularizadas) que tardan entre 20 y 30 segundos para traer los valores solicitados. Necesitaría conocer algún recurso para realizar algún análisis de las consultas y así poder realizar los cambios necesarios para optimizarlas.
Eduardo

Eduardo, indudablemente tenes algun problema en la base que podrian ser:

  • Falta de actualización de Estadisticas (Update statistics…)
  • Falta de inidices (en la mayoria de los casos que he visto esto se debe porque faltan foreing keys a tablas. Al crear foreign keys , informix crea automaticamente el indice correspondiente por esos campos, si es que ya no existe uno sobre los mismos)

Lo que podes hacer es primero indicar cual es la operación del sistema que detectas que hay problemas de tiempos de respuesta de las consultas, identificar cual es la sql que se esta ejecutando y a partir de alli vemos que tablas estan involucradas y que problema podes estar teniendo en la base.

Alejandro,
Los problemas de lentitud sobre el módulo de exámenes ya están solucionados. Está funcionando correctamente. La actualización de estadísticas las hago frecuentemente, 1 x mes aproximadamente. El problema es que las consultas que traen los certificados de materias aprobadas y regularizadas son consultas personalizadas. No estamos usando los store procedure estándares que usa el guaraní ya que estos traen la lista de materias (aprobadas, regularizadas) en un orden diferente al necesario. En nuestra facultad se usan materias agrupadas por áreas y el certificado debía reflejarlo. Consulté al director de estudios de la facultad si le servían los reportes tal como son generados por el sp_certMatAprob x ejemplo, facilitándole una muestra y prefirió seguir usando en el formato actual, el cual es generado por una consulta personalizada. El problema es que la consulta sql es muy grande y no encuentro una manera práctica de optimizarla sin mas que prueba y error. Estas consultas están en producción con antelación a mis inicios como responsable del sistema de alumnado. Estoy en la búsqueda de optimizar un poco el sistema en las funciones utilizadas con más frecuencia. Por ejemplo, la “Impresión automática de certificados pendientes” es un ejemplo de ello. La misma, cuando es iniciada ralentiza demasiado el sistema en su totalidad y hace uso de las consultas personalizadas que te comenté.
Igualmente te comento que tomé el sp_certmataprob y estoy personalizándolo para adaptarlo a nuestra necesidad y hasta el momento estoy logrando que la consulta sea casi instantánea.
Espero haberte ampliado un poco el panorama.
Eduardo

Si queres que revisemos esas consultas envialas y las analizamos para ver si se usan indices o no, si se pueden optimizar usando tablas temporales, etc.

Saludos.

Alejandro,
Te paso la consulta para que la puedas ver. El problema comienza cuando agrego a la consulta las líneas que están comentadas “–”. Esta consulta la estoy armando a partir del sp de certificado de materias aprobadas.
Muchas gracias


consulta.txt (2.22 KB)

Hola Eduardo

De entrada, cuando consultes la vista historia academica siempre entra por unidad academica, carrera y legajo

vos tenes

WHERE dba.vw_hist_academica.legajo = ‘P-1572/5’

y deberías tener

vw_hist_academica.unidad_academica =‘’
and vw_hist_academica.carrera =‘’
and vw_hist_academica.legajo = ‘P-1572/5’

tampos estás usando las claves primarias en las consultas a la tabla de planes.

Emilio

Alejandro,
Creo que es un tema joins. Fijate esta consulta adjunta. Cuando agrego todo lo relacionado con sga_det_escala, que la tengo comentada, la consulta se pone muy lenta.
Eduardo


consulta.txt (2.19 KB)

Tenés la clave primaria de sga_det_escala?

Si, escala_notas+nota

Hola Eduardo

Fijate, en todo caso, de actualizar las estadísticas sobre la tabla del detalle de la escala.
O de toda la base.

Emilio

Hola, fijate de ejecutar primero:

SET EXPLAIN ON;

Luego el query.
En el home del usuario que ejecuta debería crearse un archivo de texto plano (sqexplain.out) con el plan que el analizador de consultas usa para solucionar el problema.
Adjuntá la salida

si estas en windows en %informixdir%\setexpln quedará un archivo con el nombre del usuario que hizo la consulta.