Soft parse и hard parse – частичный разбор и полный разбор операторов

dbstalker, 23 сентября

Все Oracle SQL- предложения должны быть разобраны, перед тем как быть выполненными. Разбор – это процесс разбиения оператора на составные части, выполнение различных проверок. Основные его шаги:

  1. Синтаксический анализ. Проверка корректности оператора, проверка выполнения правил языка SQL, проверка грамматического смысла предложения. Коротко говоря – устанавливается корректность sql-утверждения.
  2. Семантический анализ. Проверка корректности с точки зрения объектов базы данных: существуют ли таблицы, столбцы, привилегии, права доступа, отсутствие неоднозначности. Коротко говоря – будет ли обеспечено корректное выполнение запроса.
  3. Оптимизация запроса
  4. Генерация плана источников строк

Если при разборе оператора после выполнения первых двух шагов оракл обнаруживает в разделяемом пуле (участок в памяти SGA), что идентичный (полностью совпадающий) оператор был разобран и обработан в другой сессии, следующие два шага не выполняются. Такой разбор называется частичным или soft parse. В этом случае экономятся ресурсы, запрос выполняется быстрее.

Если же запрос не был разобран ни в одной сессии или информация о разборе не сохранилась в памяти, то выполняются все четыре шага разбора. Этот разбор называется полным разбором или hard parse. При выполнении третьего и четвертого шага остро стоит вопрос конкуренции за защелки, к тому же требуется значительная нагрузка на процессор.

Ваша задача добивать повышения доли частичных разборов. Следствием этого будет повышение производительности системы.

Тэги: STATSPACK, общее, SGA

ОднаКнопка

2 комментария

Прокоментировать

Александр
19 ноября 2008 г. в 10:51

Я думаю неплохо было бы привести пример sql-запроса который покажет количество hard/soft parse (на базе стандартных системных представлений, а не статспаковских, - если можно)

dbstalker
24 ноября 2008 г. в 11:19

Пробуйте работать, например, с такими запросами :

select * from v$sysstat where name like '%parse%'
select sid,name,a.value from v$sesstat a,v$statname b where name like '%parse%' and a.statistic#=b.statistic#

Но вы должны осознавать, что это "средняя температура по больнице".

 

Новый комментарий

Я не спамер: введите суму 8+7



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Печь булерьян в дом
21 сентября, 1 ответа
Как Открыть Футбольную Школу
20 сентября, 1 ответа
IP телефония
20 сентября, 1 ответа