powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как заставить оптимизатор применить план к запросу от другого запроса
8 сообщений из 8, страница 1 из 1
Как заставить оптимизатор применить план к запросу от другого запроса
    #40095259
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть запрос:

select ... from TBL1 ...

создаю копию таблицы TBL1, называю TBL2

делаю точно такой же запрос, но уже с TBL2

select ... from TBL2 ...

Запрос выполняется значительно дольше чем 1-й хотя таблицы одинаковые, данные в них тоже.

Смотрю планы 1 и 2 запросов, они отличаются, т.е. во 2-м случае оптимизатор почему то выполняет по другому плану.

Как заставить оптимизатор применить план выполнения от 1-го запроса ко 2-му, вернее для 2-го создать такой же план как у 1-го, только заменить в нём имена таблиц и индексов?
...
Рейтинг: 0 / 0
Как заставить оптимизатор применить план к запросу от другого запроса
    #40095261
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter
Есть запрос:

select ... from TBL1 ...

создаю копию таблицы TBL1, называю TBL2

делаю точно такой же запрос, но уже с TBL2

select ... from TBL2 ...

Запрос выполняется значительно дольше чем 1-й хотя таблицы одинаковые, данные в них тоже.

Смотрю планы 1 и 2 запросов, они отличаются, т.е. во 2-м случае оптимизатор почему то выполняет по другому плану.

Как заставить оптимизатор применить план выполнения от 1-го запроса ко 2-му, вернее для 2-го создать такой же план как у 1-го, только заменить в нём имена таблиц и индексов?


Каким образом создается вторая таблица? Создаешь командой
Код: plsql
1.
2.
create table tbl2
as select * from tbl1 

или скриптом? Есть ли индексы на обеих таблицах? Собрана ли статистика по первой и второй таблице?
...
Рейтинг: 0 / 0
Как заставить оптимизатор применить план к запросу от другого запроса
    #40095262
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgen,

Нет, создаю скриптом

create table tbl2
(поля
....
)

создаю индексы

Да, индексы имеются на TBL1 и на TBL2 создаю такие же индексы с другими, конечно, именами.

Статистики по таблицам специально не собирал.
...
Рейтинг: 0 / 0
Как заставить оптимизатор применить план к запросу от другого запроса
    #40095265
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter
flexgen,

Нет, создаю скриптом

create table tbl2
(поля
....
)

создаю индексы

Да, индексы имеются на TBL1 и на TBL2 создаю такие же индексы с другими, конечно, именами.

Статистики по таблицам специально не собирал.


А чего так? Попробуй собрать и посмотри изменятся ли планы по обоим таблицам.
...
Рейтинг: 0 / 0
Как заставить оптимизатор применить план к запросу от другого запроса
    #40095267
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробывал создать скриптом:

create table tbl2
as select * frim tbl1

потом добавил индексов

не помогло - запрос к tbl2 выполняется по другому плану и значительно дольше.

Таблицы часто обновляются, в них заливаются миллионы записей.

Наверное имеет смысл закрепить статистику по таблице и индексам и не собирать её?

Но как это поможет в том чтобы заставить оптимизатор выполнять запрос ко 2-й таблице по плану запроса к 1-й?
...
Рейтинг: 0 / 0
Как заставить оптимизатор применить план к запросу от другого запроса
    #40095378
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
verter,
Планы покажите
...
Рейтинг: 0 / 0
Как заставить оптимизатор применить план к запросу от другого запроса
    #40095385
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagor
verter,
Планы покажите


feagor,

на самом деле в запросе соединяются 3 таблицы:

для 1-го запроса: TBL_11, TBL_12, TBL_13
для 2-го запроса: TBL_21, TBL_22, TBL_23

все таблицы 2-го запроса и данные в них идентичны таблицам из 1-го, только называются по-другому и индексы, соответственно, тоже.

хорощий план (1 запрос):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
'0','INSERT STATEMENT '
'1',' PX COORDINATOR '
'2','  PX SEND QC (RANDOM)'
'3','   LOAD AS SELECT (HYBRID TSM/HWMB)'
'4','    OPTIMIZER STATISTICS GATHERING '
'5','     WINDOW SORT'
'6','      PX RECEIVE '
'7','       PX SEND HASH'
'8','        HASH JOIN '
'9','         PART JOIN FILTER CREATE'
'10','          PX RECEIVE '
'11','           PX SEND BROADCAST'
'12','            NESTED LOOPS '
'13','             NESTED LOOPS '
'14','              PX BLOCK ITERATOR'
'15','               TABLE ACCESS STORAGE FULL','TBL_11'
'16','              INDEX RANGE SCAN','I_TBL_12','2','FIELD1, FIELD2'
'17','             TABLE ACCESS BY INDEX ROWID','TBL_12'
'18','         PX BLOCK ITERATOR'
'19','          TABLE ACCESS STORAGE FULL','TBL_13'


плохой план (2 запрос):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
'0','INSERT STATEMENT '
'1',' PX COORDINATOR '
'2','  PX SEND QC (RANDOM)'
'3','   LOAD AS SELECT (HYBRID TSM/HWMB)'
'4','    OPTIMIZER STATISTICS GATHERING '
'5','     WINDOW SORT'
'6','      PX RECEIVE '
'7','       PX SEND HASH'
'8','        NESTED LOOPS '
'9','         NESTED LOOPS '
'10','          HASH JOIN'
'11','           PART JOIN FILTER CREATE'
'12','            PX RECEIVE '
'13','             PX SEND BROADCAST LOCAL'
'14','              PX BLOCK ITERATOR'
'15','               TABLE ACCESS STORAGE FULL','TBL_21'
'16','           PX BLOCK ITERATOR'
'17','            TABLE ACCESS STORAGE FULL','TBL_23'
'18','          INDEX RANGE SCAN','I_TBL_22','FIELD1, FIELD2'
'19','         TABLE ACCESS BY INDEX ROWID','TBL_22
...
Рейтинг: 0 / 0
Как заставить оптимизатор применить план к запросу от другого запроса
    #40095395
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
verter,

verter
создаю копию таблицы TBL1, называю TBL2

все ли констрейнты создали? Все not null столбцы исходной таблицы объявлены как not null?
verter
оптимизатор почему то выполняет по другому плану.
ну и сравните статистики и гистограммы, если они вдруг одинаковые(в чем я очень сомневаюсь), сравните их трейсы 10053

verter
Как заставить оптимизатор применить план выполнения от 1-го запроса ко 2-му, вернее для 2-го создать такой же план как у 1-го, только заменить в нём имена таблиц и индексов?
первый вариант: скопировать статистики от старых таблиц на новые, например: dbms_stats.create_stat_table(..),
dbms_stats.export_table_stats(...), update stattab set table_name..., dbms_stats.import_table_stats(...)
Второй: взять аутлайны первого запроса, подправить и зафиксировать на втором запросе.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как заставить оптимизатор применить план к запросу от другого запроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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