Как удалить план запроса?

starwars
Дата: 07.10.2015 17:52:39
Есть один кривой план, который использует оптимизатор.
Доступа к коду (самому запросу) нет, хочу удалить существующий план,
чтобы потом оптимизатор выбрал другой более корректный.

как удалить существующий план для конкретного запроса?
у меня есть SQL_ID запроса.
Q.Tarantino
Дата: 07.10.2015 17:54:52
откуда удалить?
если из SGA - alter system flush shared_pool :)
starwars
Дата: 07.10.2015 17:58:41
Q.Tarantino
откуда удалить?
если из SGA - alter system flush shared_pool :)


Не, такой вариант не подходит.

У меня есть запрос, при выполнении которого CBO выполняет Full Scan большой таблицы.
Меня такой вариант не устраивает и я хочу, чтобы оптимизатор использовал другой план.
Использовать хинты в запросе и видоизменять сам запрос я не могу.
baseliner 747
Дата: 07.10.2015 18:11:51
baseline
starwars
Дата: 07.10.2015 18:12:35
Запустил SQL Tuning Advisor, выбрал данный запрос. Правда рекомендаций пока не получил.
starwars
Дата: 07.10.2015 18:13:03
baseliner 747
baseline

Можете показать на простом примере как это работает?
baseliner 747
Дата: 07.10.2015 18:16:08
starwars
baseliner 747
baseline

Можете показать на простом примере как это работает?

В соседней ветке парень записывается на курсы по поиску в интернете. Узнай у него где они проходят.
j2k
Дата: 07.10.2015 18:23:39
starwars, dbms_shared_pool.purge
starwars
Дата: 07.10.2015 18:38:09
SQL> ALTER SYSTEM SET OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES=FALSE;

System altered.

SQL> SET SERVEROUTPUT ON
SQL> declare
  2  l_plans_loaded  PLS_INTEGER;
  3  begin
  4  l_plans_loaded := DBMS_SPM.load_plans_from_cursor_cache(
  5  sql_id => '0x41qgtrpsfc5');
  6  DBMS_OUTPUT.put_line('Plans Loaded: ' || l_plans_loaded);
  7  END;
  8  /
Plans Loaded: 2

PL/SQL procedure successfully completed.


SQL> SET LONG 10000
SQL> SELECT DBMS_SPM.evolve_sql_plan_baseline(sql_handle => 'SQL_1df5a2a662dae444')
  2  FROM   dual;

DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(SQL_HANDLE=>'SQL_1DF5A2A662DAE444')
--------------------------------------------------------------------------------

-------------------------------------------------------------------------------
                        Evolve SQL Plan Baseline Report
-------------------------------------------------------------------------------

Inputs:
-------
  SQL_HANDLE = SQL_1df5a2a662dae444
  PLAN_NAME  =
  TIME_LIMIT = DBMS_SPM.AUTO_LIMIT
  VERIFY     = YES

DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(SQL_HANDLE=>'SQL_1DF5A2A662DAE444')
--------------------------------------------------------------------------------
  COMMIT     = YES

-------------------------------------------------------------------------------
                                 Report Summary
-------------------------------------------------------------------------------
There were no SQL plan baselines that required processing.


я немного запутался....
помогите создать корректный baseline
starwars
Дата: 07.10.2015 18:52:08
Вопрос такой: если позволять oracle автоматически захватывать планы OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES=TRUE
это даст дополнительную нагрузку на БД?