Сокращение вызовов синтаксического анализа в Oracle

Я заметил, что 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

Таким образом, количество жестких синтаксических анализов кажется очень низким по сравнению с их количеством. Спасибо всем за их ответы :)

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ:

Основная проблема при синтаксическом анализе заключалась в том, что в строке подключения отключен пул соединений. После включения пула соединений я смог полностью решить проблему синтаксического анализа.

7
задан Chathura W 26 September 2011 в 11:56
поделиться