powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не применяются Baseline. Оптимизатор не меняет план запроса
16 сообщений из 16, страница 1 из 1
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257738
insonicum_dana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в какой-то момент времени t оптимизатор стал странно себя вести
и делать full scan таблицы вместо Index range scan. Все индексы присутствуют, Valid и Visible.
Статистика по таблице пересобиралась, baseline создавались, у Oracle было два плана для запроса,
оптимальный и не оптимальный с full scan. Пробовал как через bms_spm.load_plans_from_cursor_cache
так и средствами OEM.

Какие есть предположения, почему оптимизатор выбирает не оптимальный план?
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257753
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
insonicum_danaв какой-то момент времени t оптимизатор стал странно себя вести
и делать full scan таблицы вместо Index range scan. Все индексы присутствуют, Valid и Visible.
Статистика по таблице пересобиралась, baseline создавались, у Oracle было два плана для запроса,
оптимальный и не оптимальный с full scan. Пробовал как через bms_spm.load_plans_from_cursor_cache
так и средствами OEM.

Какие есть предположения, почему оптимизатор выбирает не оптимальный план?Что вам ответили в My Oracle Support ?
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257763
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
insonicum_danaделать full scan таблицы вместо Index range scanСтоимость у FULL SCAN меньше?
optimizer_index_cost_adj и optimizer_index_caching не меняли?
db_file_multiblock_read_count?
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257766
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системную статистику не пересобирали?
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257772
insonicum_dana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TakuravaСистемную статистику не пересобирали?
нет, не пересобирал.
параметры БД не менял.
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257774
insonicum_dana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Takuravainsonicum_danaделать full scan таблицы вместо Index range scanСтоимость у FULL SCAN меньше?
optimizer_index_cost_adj и optimizer_index_caching не меняли?
db_file_multiblock_read_count?

есть предположение, что причина в shared pool.
возможно его не хватает или наоборот слишком много.
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257775
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
insonicum_dana, что со стоимостью?
Может baseline неправильно прикрутили?
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257782
insonicum_dana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Takuravainsonicum_dana, что со стоимостью?
Может baseline неправильно прикрутили?

вот так делал
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
-- SQL plan baseline create
declare
  l_sql_id_src varchar2(13)    :='akr82292w8n49';   -- sql_id  OBRAZEC
  l_plan_hash_value_src number := 1244699591;       -- plan_hash_value OBRAZEC 
  l_sql_id_trg  varchar2(13)   :='4db4j4fzqb3zv';   -- sql_id problem query
  l_sql_text_trg clob;  
  l_res number;  
begin
 
  select a.sql_fulltext into l_sql_text_trg
    from v$sqlarea a 
   where a.sql_id = l_sql_id_trg;
  
  l_res := dbms_spm.load_plans_from_cursor_cache( 
              sql_id => l_sql_id_src, 
              plan_hash_value => l_plan_hash_value_src, 
              sql_text => l_sql_text_trg);
  dbms_output.put_line(l_res);  
end; 
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257783
insonicum_dana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Takuravainsonicum_dana, что со стоимостью?
Может baseline неправильно прикрутили?
стоимость была меньше при использовании индекса.
я подумал, может это баг, у меня 11.2.0.3
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257876
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
insonicum_dana,

тут 1000 и 1 причина могут быть, начиная что у вас baseline не fixed, и заканчивая кучей багов.
начните с v$sql_shared_cursor, может там будут какие подсказки
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257917
insonicum_dana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
insonicum_danaTakuravainsonicum_dana, что со стоимостью?
Может baseline неправильно прикрутили?

вот так делал
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
-- SQL plan baseline create
declare
  l_sql_id_src varchar2(13)    :='akr82292w8n49';   -- sql_id  OBRAZEC
  l_plan_hash_value_src number := 1244699591;       -- plan_hash_value OBRAZEC 
  l_sql_id_trg  varchar2(13)   :='4db4j4fzqb3zv';   -- sql_id problem query
  l_sql_text_trg clob;  
  l_res number;  
begin
 
  select a.sql_fulltext into l_sql_text_trg
    from v$sqlarea a 
   where a.sql_id = l_sql_id_trg;
  
  l_res := dbms_spm.load_plans_from_cursor_cache( 
              sql_id => l_sql_id_src, 
              plan_hash_value => l_plan_hash_value_src, 
              sql_text => l_sql_text_trg);
  dbms_output.put_line(l_res);  
end; 



это то правильно?
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257942
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
insonicum_danaв какой-то момент времени t оптимизатор стал странно себя вести
и делать full scan таблицы вместо Index range scan. Все индексы присутствуют, Valid и Visible.
Статистика по таблице пересобиралась, baseline создавались, у Oracle было два плана для запроса,
оптимальный и не оптимальный с full scan. Пробовал как через bms_spm.load_plans_from_cursor_cache
так и средствами OEM.

Какие есть предположения, почему оптимизатор выбирает не оптимальный план?

Мне кажется ИМХО, что с точки зрения оптимизатора там все правильно,
это гистограмная статистика распределения значений срабатывает по селективности.
Вероятнее всего у вас в предикате
появляется значение , которое имеет плохую селективность в таблице,
для него выбиратеся плохой план.
для значения с хорошей селективность - хороший план.

Например если у вас в таблице на 100 жинщин 3 мужчины ,
при условии выборки мужчин оптимизатор будет использовать индекс ,
а для женщин фулскан.
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39257944
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
insonicum_danainsonicum_danaпропущено...
вот так делал
это то правильно?Не могу сказать, я только через OEM такое делаю. :(
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39258057
insonicum_dana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
д0kinsonicum_danaв какой-то момент времени t оптимизатор стал странно себя вести
и делать full scan таблицы вместо Index range scan. Все индексы присутствуют, Valid и Visible.
Статистика по таблице пересобиралась, baseline создавались, у Oracle было два плана для запроса,
оптимальный и не оптимальный с full scan. Пробовал как через bms_spm.load_plans_from_cursor_cache
так и средствами OEM.

Какие есть предположения, почему оптимизатор выбирает не оптимальный план?

Мне кажется ИМХО, что с точки зрения оптимизатора там все правильно,
это гистограмная статистика распределения значений срабатывает по селективности.
Вероятнее всего у вас в предикате
появляется значение , которое имеет плохую селективность в таблице,
для него выбиратеся плохой план.
для значения с хорошей селективность - хороший план.

Например если у вас в таблице на 100 жинщин 3 мужчины ,
при условии выборки мужчин оптимизатор будет использовать индекс ,
а для женщин фулскан.

Код: plsql
1.
AND table1.column1(+) = table2.column2 



на столбец column1 есть индекс, но таблица table1 читается целиком
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39258097
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
insonicum_danaд0kпропущено...


Мне кажется ИМХО, что с точки зрения оптимизатора там все правильно,
это гистограмная статистика распределения значений срабатывает по селективности.
Вероятнее всего у вас в предикате
появляется значение , которое имеет плохую селективность в таблице,
для него выбиратеся плохой план.
для значения с хорошей селективность - хороший план.

Например если у вас в таблице на 100 жинщин 3 мужчины ,
при условии выборки мужчин оптимизатор будет использовать индекс ,
а для женщин фулскан.

Код: plsql
1.
AND table1.column1(+) = table2.column2 



на столбец column1 есть индекс, но таблица table1 читается целиком

left outer join при любых раскладах и в любой СУБД читает левую таблицу
целяком и полностью....


ИМХО
Единственное исключение может быть для случая

......
left outer join on
table1.column1 = table2.column2
where table2.column2 is null
...
Рейтинг: 0 / 0
Не применяются Baseline. Оптимизатор не меняет план запроса
    #39258099
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения так будет правильно
д0kleft outer join on
table1.column1 = table2.column2
where table2.column2 is not null
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не применяются Baseline. Оптимизатор не меняет план запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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