Estimados, buenos días…
En una implementación que tiene instalada la versión 2.06.2 de Guaraní los usuarios comenzaron a notar que la operación de Cierre de Acta de Regularidad tardaba demasiado, sobre todo en la impresión del acta. El acta no está personalizada, se utiliza el objeto dr_acta_reg_pend.
Hicimos un análisis del query y vemos que está ingresando primero y escaneando la tabla sga_curs_pendiente que generalmente tiene muchas filas y el costo estimado del query es altísimo… También está escaneando la sga_personas y la sga_actas_cursado.
Adjunto el plan de ejecución del query.
Estimated Cost: 2147483647
Estimated # of Rows Returned: 2147483647
Temporary Files Required For: Order By
-
dba.sga_curs_pendiente: SEQUENTIAL SCAN
-
dba.sga_alumnos: INDEX PATH
(1) Index Keys: unidad_academica carrera legajo (Serial, fragments: ALL)
Lower Index Filter: ((dba.sga_alumnos.carrera = dba.sga_curs_pendiente.carrera AND dba.sga_alumnos.legajo = dba.sga_curs_pendiente.legajo ) AND dba.sga_alumnos.unidad_academica = dba.sga_curs_pendiente.unidad_academica )
NESTED LOOP JOIN
-
dba.sga_sedes: SEQUENTIAL SCAN
NESTED LOOP JOIN -
dba.sga_comisiones: SEQUENTIAL SCAN
DYNAMIC HASH JOIN (Build Outer)
Dynamic Hash Filters: dba.sga_comisiones.sede = dba.sga_sedes.sede
- dba.sga_materias: SEQUENTIAL SCAN
DYNAMIC HASH JOIN
Dynamic Hash Filters: (dba.sga_materias.materia = dba.sga_comisiones.materia AND dba.sga_materias.unidad_academica = dba.sga_comisiones.unidad_academica )
- dba.sga_personas: SEQUENTIAL SCAN
DYNAMIC HASH JOIN
Dynamic Hash Filters: (dba.sga_personas.nro_inscripcion = dba.sga_alumnos.nro_inscripcion AND dba.sga_personas.unidad_academica = dba.sga_alumnos.unidad_academica )
- dba.sga_periodos_lect: SEQUENTIAL SCAN
DYNAMIC HASH JOIN
Dynamic Hash Filters: (dba.sga_periodos_lect.periodo_lectivo = dba.sga_comisiones.periodo_lectivo AND dba.sga_periodos_lect.anio_academico = dba.sga_comisiones.anio_academico )
-
dba.sga_actas_cursado: SEQUENTIAL SCAN
Filters:
Table Scan Filters: (dba.sga_actas_cursado.acta = 1133 AND dba.sga_actas_cursado.unidad_academica = ‘SEG’ )
DYNAMIC HASH JOIN
Dynamic Hash Filters: (dba.sga_comisiones.comision = dba.sga_actas_cursado.comision AND dba.sga_curs_pendiente.comision = dba.sga_actas_cursado.comision )
- dba.sga_det_escala: INDEX PATH
(1) Index Keys: escala_notas nota (Serial, fragments: ALL)
Lower Index Filter: (dba.sga_det_escala.nota = dba.sga_curs_pendiente.nota AND dba.sga_det_escala.escala_notas = dba.sga_actas_cursado.escala_notas )
NESTED LOOP JOIN
- dba.sga_libros_actacur: INDEX PATH
(1) Index Keys: unidad_academica libro (Serial, fragments: ALL)
Lower Index Filter: (dba.sga_libros_actacur.libro = dba.sga_actas_cursado.libro AND dba.sga_libros_actacur.unidad_academica = dba.sga_actas_cursado.unidad_academica )
NESTED LOOP JOIN
- dba.sga_carreras: INDEX PATH
(1) Index Keys: unidad_academica carrera (Serial, fragments: ALL)
Lower Index Filter: (dba.sga_carreras.carrera = dba.sga_actas_cursado.carrera AND dba.sga_carreras.unidad_academica = dba.sga_actas_cursado.unidad_academica )
NESTED LOOP JOIN
- dba.sga_planes: INDEX PATH
(1) Index Keys: unidad_academica carrera plan (Serial, fragments: ALL)
Lower Index Filter: ((dba.sga_planes.carrera = dba.sga_comisiones.carrera AND dba.sga_planes.plan = dba.sga_comisiones.plan ) AND dba.sga_planes.unidad_academica = dba.sga_comisiones.unidad_academica )
NESTED LOOP JOIN
- dba.sga_atrib_mat_plan: INDEX PATH
(1) Index Keys: unidad_academica carrera plan version materia (Serial, fragments: ALL)
Lower Index Filter: ((((dba.sga_atrib_mat_plan.materia = dba.sga_comisiones.materia AND dba.sga_atrib_mat_plan.version = dba.sga_planes.version_actual ) AND dba.sga_atrib_mat_plan.plan = dba.sga_planes.plan ) AND dba.sga_atrib_mat_plan.carrera = dba.sga_planes.carrera ) AND dba.sga_atrib_mat_plan.unidad_academica = dba.sga_planes.unidad_academica )
NESTED LOOP JOIN
======================================================================================
Saludos.
Sergio