Oracle mechanics

18.12.2012

Oracle Baseline и оптимизатор, основанный на правилах (RBO)

Filed under: Oracle,Plan Management,RBO — Игорь Усольцев @ 01:05
Tags: , ,

В процессе генерации и фиксации «быстрого» плана с помощью Baseline, попался запрос, выполняющийся по воле разработчиков с подсказкой RULE

Оказалось, что в версии 11.2 планы, основанные на RBO, прекрасно фиксируются с помощью вполне современных технологий SQL Plan Management

Далее — иллюстрация + запрос для мониторинга воспроизводимости (готовности к использованию) предварительно одобренных Baseline

11.2.0.3.@ SQL> -- текущая секция OUTLINE плана запроса с подсказкой /*+ RULE*/
SQL> @plan_ol_hints 77jn8g5qq4zj8 0

PLAN_HASH_VALUE
---------------
      733510153

OUTLINE_HINTS
---------------------------------------
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('11.2.0.3')
DB_VERSION('11.2.0.3')
OPT_PARAM('optimizer_index_caching' 10)
RBO_OUTLINE                            -- соответствующая метка
...

SQL> -- создание baseline из кэша
SQL> declare res number;
  2  begin
  3    res := dbms_spm.load_plans_from_cursor_cache(sql_id => '77jn8g5qq4zj8', plan_hash_value => '733510153', fixed => 'yes', enabled => 'yes' );
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL> select sql_handle, plan_name, reproduced from dba_sql_plan_baselines where sql_text like 'select%max(owner_id) owner_id%';

SQL_HANDLE           PLAN_NAME                      REP
-------------------- ------------------------------ ---
SQL_a63c89637800211b SQL_PLAN_acg49cdw0088v8c9ecb1d YES -- получился рабочий, воспроизводимый baseline

SQL> -- набор подсказок, составляющий baseline
SQL> @bl_hints SQL_PLAN_acg49cdw0088v8c9ecb1d

OUTLINE_HINTS
---------------------------------------
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('11.2.0.3')
DB_VERSION('11.2.0.3')
OPT_PARAM('optimizer_index_caching' 10)
RBO_OUTLINE                            -- та же метка
...

Запрос для мониторинга воспроизводимости одобренных и фиксорованных baseline:

SQL> select sql_text, description
2    from DBA_SQL_PLAN_BASELINES b
3   where ACCEPTED = 'YES'
4     and ENABLED = 'YES'
5     and REPRODUCED = 'NO'
6     and not exists (select *
7            from DBA_SQL_PLAN_BASELINES
8           where SQL_HANDLE = b.SQL_HANDLE
9             and ACCEPTED = 'YES'
10             and ENABLED = 'YES'
11             and REPRODUCED = 'YES')
12  /

no rows selected

— по-хорошему, не должен возвращать строк

Добавить комментарий »

Комментариев нет.

RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Создайте бесплатный сайт или блог на WordPress.com.

%d такие блоггеры, как: