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

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

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

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

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

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

Комментарии (2)

[397] Комментарий от Александр   19.11.2008(10:51:26)
Я думаю неплохо было бы привести пример sql-запроса который покажет количество hard/soft parse (на базе стандартных системных представлений, а не статспаковских, - если можно)
[406] Комментарий от dbstalker   24.11.2008(11:19:18)
Пробуйте работать, например, с такими запросами :
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#
Но вы должны осознавать, что это "средняя температура по больнице".



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

Имя
Электронная почта
 
Ваш сайт
Защита от спама: укажите сумму 3 + 1
   
 

Поиск по блогам



Подпишись на RSS:

RSS - Подписаться на блог



Читателям


Рекомендую к прочтению





Разделы блога



Последние публикации



Последние коментарии