Guarani 3W - Ver Cursada

Gente,
les hago una consulta. En la interfaz 3W, cuando un docente (Perfil docente) desea ver la cursada de un alumno inscripto a examen, estamos teniendo una demora muy importante, hasta que muestra la cursada.
¿Que debo revisar y/o mejorar para que este tiempo disminuya? Recibimos varias quejas por esta demora.
Les comento que la version actual es la 2.9.1.
Espero sus respuestas.

Marcela Andrea Vera
UTN - FRSF

Marcela, cual es la operacion desde donde quieren ver la cursada?
¿Podes adjuntar una captura de pantalla?

Fijate la consulta que esta en \src\siu\modelo\datos\db\alumno.php, funcion get_datos_ultima_cursada_materia
Probá correrla desde el sqleditor con los datos de alguno de esos alumnos y fijate si podes detectar si es esa la query que esta tardando en recuperar la información.

Alejandro,
adjunto la pantalla, que indica “cargando” durante mas de tres minutos…
La opción están el perfil docente web, en exámenes, inscripciones a examen, cuando uno selecciona una mesa, y luego selecciona Ver Cursada de un alumno-
Cuando corre la misma consulta desde el SQL editor, tambien, demora muchisimo… mas de 3 minutos.
¿Que debo revisar? Esa es la consulta que me indicaste que correr:
SELECT FIRST 1
sga_comisiones.anio_academico as anio_academico,
sga_comisiones.periodo_lectivo as periodo_lectivo,
to_char(sga_cursadas.fecha_regularidad, ‘%d/%m/%Y’) as sfecha_regularidad,
NVL(to_char(sga_cursadas.fin_vigencia_regul, ‘%d/%m/%Y’), ‘Sin Vencimiento’) as sfecha_fin_vigencia,
CASE
WHEN sga_cursadas.fin_vigencia_regul IS NULL THEN 1
WHEN sga_cursadas.fin_vigencia_regul IS NOT NULL AND sga_cursadas.fin_vigencia_regul >= TODAY THEN 1
ELSE 0
END as es_vigente,
sga_cursadas.comision,
sga_comisiones.nombre as comision_nombre,
sga_comisiones.catedra as catedra,
sga_cursadas.nota,
sga_det_escala.descripcion as nota_descripcion,
sga_det_escala.concepto as nota_concepto,
DECODE(sga_cursadas.resultado, ‘P’, ‘Aprobado’, ‘A’,‘Aprobado’, ‘R’, ‘Reprobado’, ‘U’,‘Libre’) as resultado_desc,
DECODE(sga_cursadas.origen, ‘P’, ‘Promocion’, ‘C’, ‘Cursada’, ‘E’, ‘Equivalencia’, ‘EE’, ‘Equivalencia en otra Carrera’, ‘CE’, ‘Cusada en otra carrera’) as origen,
sga_cursadas.plan as plan,
sga_cursadas.fecha_regularidad as fecha_regularidad
FROM sga_cursadas
LEFT JOIN sga_comisiones ON sga_comisiones.comision = sga_cursadas.comision
LEFT JOIN sga_det_escala ON (sga_det_escala.escala_notas = sga_cursadas.escala_notas AND sga_det_escala.nota = sga_cursadas.nota )
WHERE sga_cursadas.unidad_academica = ‘…’
AND sga_cursadas.carrera = ‘V’
AND sga_cursadas.legajo = ‘…’
AND sga_cursadas.materia = ‘…’
ORDER BY sga_cursadas.fecha_regularidad desc

¿Que puedo revisar?

Marcela Vera


VerCursada.JPG

VerCursada.JPG_thumb.png

Fijate primero si lo que tarda es la consulta en la vista de cursadas:
SELECT * FROM vw_cursadas
WHERE sga_cursadas.unidad_academica = '… ’
AND sga_cursadas.carrera = ‘V’
AND sga_cursadas.legajo = ‘…’
AND sga_cursadas.materia = ‘…’

¿Corren periódicamente el UPDATE STATISTICS?
Aqui hay un mensaje por este tema y el adjunto de un sql para que lo corras y genere las sentencias del update statistics sobre las tablas para luego correrlo en la base.

Alejandro,
la consulta sobre la vista sga_cursadas no demora nada…
Lo que demora son los left join, los saque y coloque todo en el from y where y anduvo VOLANDO… NADA QUE VER.
Te comento que periodicamente se corren los US sobre las BD.
Por que los left join pueden demorar tanto??
Saludos

Marcela Vera

Si, no se porque en algunos casos los LEFT JOIN funcionan lento a diferencia del OUTER. En algun momento me paso lo mismo pero no pude detectar a que se debia ese problema.

Por favor cambia los LEFT JOIN por la sentencia OUTER (lo que esta en negrita):

FROM    sga_cursadas
                                         [b]   LEFT JOIN sga_comisiones ON sga_comisiones.comision = sga_cursadas.comision
                                            LEFT JOIN sga_det_escala ON (sga_det_escala.escala_notas = sga_cursadas.escala_notas AND sga_det_escala.nota = sga_cursadas.nota ) [/b]

por:

FROM sga_cursadas,
OUTER sga_comisiones,
OUTER sga_det_escala

WHERE sga_cursadas.unidad_academica = ‘…’
AND sga_cursadas.carrera = ‘V’
AND sga_cursadas.legajo = ‘…’
AND sga_cursadas.materia = ‘…’
AND sga_comisiones.comision = sga_cursadas.comision
AND sga_det_escala.escala_notas = sga_cursadas.escala_notas
AND sga_det_escala.nota = sga_cursadas.nota

Veremos de reemplazar los LEFT JOIN que haya por el OUTER de informix.

Alejandro,
si realice el cambio de los LETF JOIN por los outer y coloque en el WHERE las condiciones, y responde muy bien.
Saludos

Marcela Vera