CURSOR_SHARING. Параметр инициализации

dbstalker, 25 сентября

Cursor_sharing - этот параметр служит для управления "автоматическим связыванием" в запросах. Иными словами задает ораклу каким способом искать Ваш запрос в SGA. Параметр может принимать следующие значения:

  • EXACT - ищется запрос точно совпадающий с Вашим. Никакой перезаписи Вашего запроса (использование переменных связывания) для возможного использования другими сессиями не производится.
  • FORCE - ищется запрос, совпадающий с Вашим запросом с точностью до связных переменных. Перезапись осуществляется: все литералы заменяются на связные переменные, план создается для «усовершенствованного» запроса.
  • SIMILAR (появилось в 9i) -выполняются те же действия, что и при FORCE, но к тому же осуществляется проверка: можно ли подобрать аналогичный уже разобранный запрос, который не должен изменить план Вашего запроса. То есть, если оптимизатор решит, что для выполнения Вашего запроса нужен другой план, нежели в уже разобранном, то Ваш запрос будет полностью разбираться.

Перезапись запросов позволяет несколько раз выполнять единожды сгенерированный план выполнения запроса. Обычно, это уменьшает количество полных разборов (hard parses),повышает эффективность работы разделяемого пула.

Оптимизатор при значении параметра SIMILAR и FORCE заменяет все литералы на переменные связывания :SYS_B _?. Как это происходит можно увидеть, выполнив действия, описанные в статье Тома Кайта.

alter session set cursor_sharing=exact;
select * from dual CS_EXACT where dummy = 'A';
select * from dual CS_EXACT where dummy = 'B';
alter session set cursor_sharing=force;
select * from dual CS_FORCE where dummy = 'A';
select * from dual CS_FORCE where dummy = 'B';
alter session set cursor_sharing=similar;
select * from dual CS_SIMILAR where dummy = 'A';
select * from dual CS_SIMILAR where dummy = 'B';
select sql_text  from v$sql   where sql_text like 'select * from dual CS% where dummy = %' order by sql_text;

И вот, что имеем в результате:

SQL_TEXT
---------------------------------------------------------
select * from dual CS_EXACT where dummy = 'A'
select * from dual CS_EXACT where dummy = 'B'
select * from dual CS_FORCE where dummy = :"SYS_B_0"
select * from dual CS_SIMILAR where dummy = :"SYS_B_0"
 

Здесь видно, что для EXACT сколько запросов (отличающихся только литералом) мы будем выполнять, столько и будет полных разборов, построений планов. Таких запросов в системе может быть на столько много, что сервер не сможет справиться с их разбором.

При прочих значениях параметра сursor_sharing, можно наглядно видеть, что только один запрос находиться в shared pool. И все сессии могут использовать план этого запроса. То есть полный разбор, построение плана производится один раз, а выполняется – много раз. Следствием этого является уменьшение количества полных разборов (они превращаются в частичный). А это значит, что потребляется меньше ресурсов (процессорное время, конкуренция в библиотечном кеше, размер разделяемого пула,…), производительность растет.

Еще посмотрите сюда и сюда - это наглядный пример использования сursor_sharing .

Статью Тома Кайта читайте тут.

1 комментарий

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

viman
24 января 2009 г. в 07:13

параметр несомненно полезный, но...
Даже не пробуйте его ставить в значение отличное от EXACT, например, в Oracle 9.2.0.8(у нас был x86_64 for Linux) без последующих, устраняющих баги патчей, либо тестируйте тщательно. Особенно когда есть работа через DBLink. Выполните запрос через DBLink На другой сервер (например, с where t.date_field >= trunc(sysdate))и получите ORA-00600. Мало того, что текущая ваша сессия упадет, так, скорее всего, через некоторое время и сам экземпляр тоже... В 10-ке тоже проблемы, вроде исправлено только в 10.2.0.4.

 

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

Я не спамер: введите суму 1+5



 

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

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

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

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


 
 

Бизнес форум

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

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