powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перекомпиляция плана
15 сообщений из 15, страница 1 из 1
Перекомпиляция плана
    #40137388
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если на таблице построить индекс приведёт ли это к перекомпиляции плана?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
-- табличка
create table test (f1 varchar2);
-- генерим план
var v1 varchar2;
exec :v1 := '1';
select * from test where f1 = :v1;
-- индекс
create index idx on test (f1);
-- будет ли построен новый план??
var v1 varchar2;
exec :v1 := '1';
select * from test where f1 = :v1;
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137412
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое перекомпиляция плана?
Первый раз такое слышу.

Команд CREATE PLAN IS и ALTER PLAN RECOMPILE - лично я не знаю.

Знаю только слова Parse, Execute, Fetch )))
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137419
Master_Detail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist
приведёт ли это к перекомпиляции плана?


А почему бы все же не проверить?

Но если хотите простой ответ - конечно же, план может перекомпилиться измениться. А может и не измениться, потому как есть еще распределение данных, селективность и все такое прочее

Код: plsql
1.
2.
3.
4.
-- генерим план
var v1 varchar2;
exec :v1 := '1';
select * from test where f1 = :v1;


Можете подробнее рассказать про то, как вы "генерите" план. Думаю, многие на форуме не знают про эту фичу
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137520
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master_Detail


А почему бы все же не проверить?


Проверил.

Master_Detail


Но если хотите простой ответ - конечно же, план может перекомпилиться измениться. А может и не измениться, потому как есть еще распределение данных, селективность и все такое прочее


ОК, план изменился, начал использовать новый индекс.

Кстати, как заставить принудительно перекомпилировать изменять план при bind параметрах?? (например в MSSQL используется опция RECOMPILE), то есть для одного SQL_ID получить несколько планов??

Master_Detail


Код: plsql
1.
2.
3.
4.
-- генерим план
var v1 varchar2;
exec :v1 := '1';
select * from test where f1 = :v1;


Можете подробнее рассказать про то, как вы "генерите" план. Думаю, многие на форуме не знают про эту фичу


Пожалуйста, всё очень просто :)

Код: plsql
1.
2.
3.
select * from test where f1 = '1';

select * from test where f1 = '2';



Вызовет создание 2-х планов.
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137521
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Неудачно выразился, создание нового плана для одного и того же запроса.
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137531
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist,

Принудительно инвалидировать курсоры (инициировав жесткий разбор (hard parse) запросов с возможным(!) построением новых планов, в которых задействованы объекты БД) можно через сбор статистики по объекту с помощью пакета DBMS_STATS (опция no_invalidate). Начиная с версии 11.2 (если я правильно помню), можно удалить планы для конкретного запроса из shared pool используя пакет DBMS_SHARED_POOL , что также инициирует жесткий разбор и возможное построение нового плана.

ЗЫ: инвалидировать курсоры в оракле можно и достаточно безобидными DDL (типа comment).
ЗЗЫ: в проде так делать надо очень осторожно.
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137533
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist

Код: plsql
1.
2.
3.
select * from test where f1 = '1';

select * from test where f1 = '2';



Вызовет создание 2-х планов.
В зависимости от значения параметра cursor_sharing .
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137534
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asmodeus
PaulWist


Вызовет создание 2-х планов.
В зависимости от значения параметра cursor_sharing .


Ну, ОК.

Код: plsql
1.
2.
3.
select * from test where f1 = '1' and 1 = 1;

select * from test where f1 = '2' and 2 = 2;
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137535
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А разве не то же самое?
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137537
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist
Asmodeus
пропущено...
В зависимости от значения параметра cursor_sharing .


Ну, ОК.

Код: plsql
1.
2.
3.
select * from test where f1 = '1' and 1 = 1;

select * from test where f1 = '2' and 2 = 2;

У них sql_id одинаковый? :)
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137538
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да
Код: plsql
1.
select * from dacom.test where f1 = :"SYS_B_0" and :"SYS_B_1" = :"SYS_B_2"
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137539
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
istrebitel
Да
Код: plsql
1.
select * from dacom.test where f1 = :"SYS_B_0" and :"SYS_B_1" = :"SYS_B_2"

Показывайте значние cursor_sharing` (вангую force). :)
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137540
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Asmodeus
Показывайте значение cursor_sharing` (вангую force). :)

Да, это и был ответ что при force так просто не обойдёшь.
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137560
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
select * from test where f1 = '1' and 1 = 1;

select * from test where 2 = 2 and f1 = '2';

select x3.* from test x3 where 3 = 4-1 and x3.f1 = '3';


?
...
Рейтинг: 0 / 0
Перекомпиляция плана
    #40137568
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Metelitsa,

22441062
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перекомпиляция плана
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (6): Анонимы (4), Bing Bot 1 мин., Yandex Bot 3 мин.
Пользователи онлайн (7): Анонимы (4), Bing Bot, Yandex Bot 2 мин., Google Bot 4 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]