Hola, estamos trabajando con la versión 3.16 y un usuario nos resportó que desde gestión cuando va a la operación Reasignar optativas y selecciona al alumno se queda procesando y da time out. Probamos ejecutar la operación en todos los ambientes y nos oscurrió el mismo error.
Revisando el código vimos que se ejecuta la funcion get_actividades_genericas_con_optativas_compartidas de la clase co_planes (no está personalizada) y es ese el método que tarda en ejecutarse. Probamos hacer la consulta directamente desde el motor de base de datos y paso lo mismo.
El volumen que manjeamos por ejemplo en el plan de estudios que da el error es de 5 actividades genericas,
generica 1: 200 optativas
generica 2: 200 optativas,
generica 3: 6 optativas,
generica 4 : 17 optativas
generica 5: 40 optativas
Entre la 1 y la 2 comparten y entre las 3 y la 4 comparten .
La consulta la revisó el dba y al parecer no falta ingùn indice en las tablas utilizadas.
Por favor, prueben con esta consulta SQL a ver qué pasa:
SELECT DISTINCT vw_actividades_genericas_plan.elemento,
vw_actividades_genericas_plan.elemento_revision,
vw_actividades_genericas_plan.nombre,
vw_actividades_genericas_plan.nombre_abreviado,
vw_actividades_genericas_plan.codigo,
sga_elementos_revision.regla,
sga_elementos_revision.parametros,
sga_reglas.nombre as regla_nombre,
get_regla_mensaje(sga_elementos_revision.regla, sga_elementos_revision.parametros) as forma_cumplimiento_generica
FROM vw_actividades_genericas_plan
JOIN vw_optativas_plan ON vw_actividades_genericas_plan.elemento_revision = vw_optativas_plan.elemento_revision_generica AND vw_actividades_genericas_plan.plan_version = vw_optativas_plan.plan_version
JOIN sga_elementos_revision ON vw_actividades_genericas_plan.elemento_revision = sga_elementos_revision.elemento_revision
JOIN sga_reglas ON sga_elementos_revision.regla = sga_reglas.regla
WHERE vw_actividades_genericas_plan.plan_version = <identificador del plan-versión> AND
EXISTS (SELECT 1
FROM vw_actividades_genericas_plan as otra_generica
JOIN vw_optativas_plan as otra_optativa ON otra_generica.elemento_revision = otra_optativa.elemento_revision_generica AND otra_generica.plan_version = otra_optativa.plan_version
WHERE vw_actividades_genericas_plan.plan_version = otra_generica.plan_version AND
vw_actividades_genericas_plan.elemento <> otra_generica.elemento AND
vw_optativas_plan.elemento = otra_optativa.elemento)
ORDER BY 3;