Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Настройка плана по образцу через dbms_sqltune  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
Недавно одна интересная ссылка упоминалась по настройке запросов без изменения кода. Antognini еще в 2006 году описавал эти возможности.
Если сам SQL Tuning Advisor не справляется со своей работой, можно самому настроить запрос и использовать профиль как оболочку для своих хинтов, аналогично OUTLINES.
Предлагаю свою вариацию на тему (по первой ссылке не все почему-то заработало - пробовал скрипты для 10-ки...):

declare
  -- исходный SQL  (v$sql: sql_id и child_number)
  l_sql_id_src char(13) := 'bcjzt484ub6yw';     
  l_child_number_src number :=0;

  -- настроенный SQL (v$sql: sql_id и child_number)
  l_sql_id_changed char(13) := 'bwxyx58a9qtup'; 
  l_child_number_changed number :=0;  

  l_hints sys.sqlprof_attr;
  l_sql_text      clob;  
begin

  -- новые хинты в настроенном вручную варианте запроса
  select extractValue(value(d), '/hint') bulk collect into l_hints
  from (select other_xml
          from v$sql_plan
         where sql_id = l_sql_id_changed
           and child_number = l_child_number_changed
           and other_xml is not null) add_data,
       table(XMLSequence(XMLType(add_data.other_xml).extract('other_xml/outline_data/hint'))) d;

  -- исходный проблемный запрос
  select sql_fulltext
    into l_sql_text
    from v$sql
   where sql_id = l_sql_id_src
     and child_number = l_child_number_src;
  
  -- удаляем профиль, если такой был
  dbms_sqltune.drop_sql_profile('PROF_'||l_sql_id_src,ignore => TRUE);

  -- создаем профиль на основе хинтов настроенного варианта
  dbms_sqltune.import_sql_profile(sql_text => l_sql_text
                                 ,profile  => l_hints
                                 ,category => 'DEFAULT'
                                 ,name     => 'PROF_'||l_sql_id_src
                                 ,force_match => true);
end;

Это для 10g. В 11g примерно то же самое можно сделать так.
5 мар 10, 10:50    [8435460]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Настройка плана по образцу через dbms_sqltune  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
Тема правки планов без изменения кода периодически всплываает. По ссылке можно взглянуть на некоторое обобщение, включая использование sql патчей. Только там неправильно написано, что Stored Outlines доступны в Oracle 9i SE - в 9i они были доступны только в EE.
8 апр 14, 15:06    [15849955]     Ответить | Цитировать Сообщить модератору
 Re: Настройка плана по образцу через dbms_sqltune  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Деев И.,

Не совсем точно написано замечание после последнего скрипта
Большим достоинством этого метода является то, что он подходит для разных версий и редакций Oracle – 9, 10, 11, EE, SE, XE.
До 10-ки по очевидным причинам он работать не будет поскольку не было sql_id, хотя сам подход рабочий.
13 апр 14, 23:35    [15876477]     Ответить | Цитировать Сообщить модератору
 Re: Настройка плана по образцу через dbms_sqltune  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
dbms_photoshop,

Спасибо, это существенное замечание. В 9i, конечно, нужно брать hash_value, позабыл об этом.
14 апр 14, 18:12    [15881108]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить