Я заметил, что parse_calls равняется количеству выполнений в нашей базе данных Oracle 11g.
select parse_calls, executions
from v$sql order by parse_calls desc;
Выполнение вышеуказанного запроса дает следующий результат:
"PARSE_CALLS" "EXECUTIONS"
87480 87480
87475 87476
87044 87044
26662 26662
21870 21870
21870 21870
Насколько мне известно, это серьезный недостаток производительности. Все эти операторы SQL являются либо хранимыми процедурами, либо используют переменные связывания. Я также повторно использую командные объекты, которые вызывают хранимые процедуры из C #.
Как мне уменьшить количество вызовов синтаксического анализа в этом?
Кроме того, есть ли какой-нибудь метод, по которому я могу различить жесткий и мягкий синтаксический анализ?
РЕДАКТИРОВАТЬ :
Как упоминал @DCookie, я выполнил следующий запрос к базе данных.
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;
Результат следующий. ниже
"NAME" "SUM(S1.VALUE)"
"parse count (describe)" 0
"parse count (failures)" 29
"parse count (hard)" 258
"parse count (total)" 11471
Таким образом, количество жестких синтаксических анализов кажется очень низким по сравнению с их количеством. Спасибо всем за их ответы :)
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ:
Основная проблема при синтаксическом анализе заключалась в том, что в строке подключения отключен пул соединений. После включения пула соединений я смог полностью решить проблему синтаксического анализа.