Me doy cuenta de que las llamadas parse son iguales a la cantidad de ejecuciones en nuestra base de datos Oracle 11g.Reducción de llamadas parse en Oracle
select parse_calls, executions
from v$sql order by parse_calls desc;
Al ejecutar la consulta anterior se obtiene el siguiente resultado.
"PARSE_CALLS" "EXECUTIONS"
87480 87480
87475 87476
87044 87044
26662 26662
21870 21870
21870 21870
Como soy consciente, este es un inconveniente de rendimiento importante. Todas estas declaraciones SQL son procedimientos almacenados o utilizan variables de vinculación. También estoy reutilizando los objetos de comando que llaman a los procedimientos almacenados desde C#.
¿Cómo puedo reducir el número de llamadas parse en esto?
Además, ¿hay algún método que pueda distinguir entre análisis fijos y análisis suaves?
EDITAR:
Como se mencionó @DCookie me encontré con la siguiente consulta en la base de datos.
SELECT s2.name, SUM(s1.value)
FROM v$sesstat s1 join v$statname s2 on s1.statistic# = s2.statistic#
WHERE s2.name LIKE '%parse count%'
GROUP BY s2.name
ORDER BY 1,2;
El resultado es la siguiente
"NAME" "SUM(S1.VALUE)"
"parse count (describe)" 0
"parse count (failures)" 29
"parse count (hard)" 258
"parse count (total)" 11471
Por lo tanto el número de análisis sintácticos duros parece ser muy baja en comparación con el número de análisis sintácticos. Gracias a todos por sus respuestas :)
INFORME FINAL DE ACTUALIZACIÓN:
El principal problema para el análisis fue porque teníamos la agrupación de conexiones desactivada en la cadena de conexión. Después de activar la agrupación de conexiones, pude resolver completamente el problema de análisis.
Supongo que los procedimientos almacenados se compilan y no ejecutan las sentencias 'EXECUTE IMMEDIATE'? –
Sí. Todo está compilado. No hay declaraciones 'EJECUTAR INMEDIATO'. –
Es probable que esté relacionado con la configuración del grupo compartido, pero no recuerdo cómo verificarlo. Estoy seguro de que esto se contestará pronto –