Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как поменять цель в плане запроса?  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
Один и тот же запрос на 9-м и 11-м сервере ORACLE имеет разные планы.
Различие заключается в цели:

В одном случае на 9-м сервере GOAL = CHOOSE
А в другом на 11-м сервере GOAL = ALL_ROWS

Как в 11-ой версии сервера настроить план так, чтобы цель была CHOOSE ?
8 апр 13, 10:30    [14149835]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
А ты знаешь, в чем отличие CHOOSE от ALL_ROWS?
8 апр 13, 10:38    [14149893]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
tru55
А ты знаешь, в чем отличие CHOOSE от ALL_ROWS?


а при чём тут это? Мой вопрос можно переформулировать так: как сделать так чтобы план запроса был одинаков для двух разных версий серверов оракл, настройки оптимизатора все заданы по-умолчанию.
8 апр 13, 11:32    [14150197]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
всепросто
Guest
verter
tru55
А ты знаешь, в чем отличие CHOOSE от ALL_ROWS?


а при чём тут это? Мой вопрос можно переформулировать так: как сделать так чтобы план запроса был одинаков для двух разных версий серверов оракл, настройки оптимизатора все заданы по-умолчанию.

Нанять специалиста, который будет разбираться за тебя.
8 апр 13, 11:47    [14150310]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Performance Tuning Guide and Reference (Ora 9)

OPTIMIZER_MODE Initialization Parameter

CHOOSE
The optimizer chooses between a cost-based approach and a
rule-based approach, depending on whether statistics are
available. This is the default value.

If the data dictionary contains statistics for at least one of the
accessed tables, then the optimizer uses a cost-based approach
and optimizes with a goal of best throughput.


Если выбирается CBO, то там либо ALL_ROWS (по умолчанию), либо FIRST_ROWS (FIRST_ROWS_n), ничего другого нет


CHOOSE выкинут, начиная с Ora 10
8 апр 13, 11:48    [14150319]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
В 11-м сервере в вэб-интерфейсе консоли настройщика нашёл где поставить параметр для оптимизатора по-умолчанию:

Initialization Parameters-->optimizer_mode
8 апр 13, 12:10    [14150450]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
tru55


CHOOSE выкинут, начиная с Ora 10


он не выкинут, просто вместо него по-умолчанию стоит ALL_ROWS
8 апр 13, 12:12    [14150458]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
Kamael
Member

Откуда: Алмата
Сообщений: 374
verter
В 11-м сервере в вэб-интерфейсе консоли настройщика нашёл где поставить параметр для оптимизатора по-умолчанию:

Initialization Parameters-->optimizer_mode


Потом расскажите, что стало с остальными планами на 11g.
8 апр 13, 12:14    [14150477]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
verter
tru55
CHOOSE выкинут, начиная с Ora 10

он не выкинут, просто вместо него по-умолчанию стоит ALL_ROWS


Database Reference ( Ora 10 )

Initialization Parameters

OPTIMIZER_MODE

OPTIMIZER_MODE = { first_rows_[1 | 10 | 100 | 1000] | first_rows | all_rows }
8 апр 13, 12:31    [14150627]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
ORA__SQL
Member

Откуда: Moscow
Сообщений: 1774
tru55
verter
пропущено...он не выкинут, просто вместо него по-умолчанию стоит ALL_ROWS
Database Reference ( Ora 10 )
Initialization Parameters
OPTIMIZER_MODE
OPTIMIZER_MODE = { first_rows_[1 | 10 | 100 | 1000] | first_rows | all_rows }
Выкинут из доки
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 

SQL> SELECT v.name,
  2         v.value
  3  FROM   v$parameter_valid_values v
  4  WHERE  v.name = 'optimizer_mode'
  5  /
 
NAME                                                             VALUE
---------------------------------------------------------------- --------------------------------------------------------------------------------
optimizer_mode                                                   RULE
optimizer_mode                                                   CHOOSE
optimizer_mode                                                   ALL_ROWS
optimizer_mode                                                   FIRST_ROWS
optimizer_mode                                                   FIRST_ROWS_1
optimizer_mode                                                   FIRST_ROWS_10
optimizer_mode                                                   FIRST_ROWS_100
optimizer_mode                                                   FIRST_ROWS_1000
8 апр 13, 12:45    [14150745]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
Kamael
Member

Откуда: Алмата
Сообщений: 374
tru55,

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as system
 
SQL> show parameter optimizer_mode;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------


optimizer_mode                       string      ALL_ROWS

 
SQL> alter system set optimizer_mode=bla_bla;
 
alter system set optimizer_mode=bla_bla
 
ORA-00096: invalid value BLA_BLA for parameter optimizer_mode, must be from among first_rows_1000, first_rows_100, first_rows_10, first_rows_1, first_rows, all_rows, choose, rule
 
SQL> alter session set optimizer_mode =choose;
 
Session altered

Другое дело, для чего это ТС нужно, ведь даже alter session/system set optimizer_mode =choose не гарантирует использование choose
8 апр 13, 12:50    [14150783]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
Помойка
Guest
verter,

Иными словами выкинут на помойку. Не надо копаться в помойке. Вам это все равно не поможет.
8 апр 13, 12:54    [14150804]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
Всё-таки план отличается не только целью, но и по содержаниию - на 9-ке один план, на 11-м - совершенно другой. Причём 9-ку и 11-й ставили по-умолчанию, т.е. настройки оптимизатора не меняли. Но почему то планы разные. Например если в плане на 9-ке стоит TABLE_ACCESS_BY_INDEX, то на 11-м TABLE_ACCESS_FULL. Может это из-за того, что когда из дампа заливали базу на 11-й сервер, то не перестроили индексы? Статистику пересобирали, это точно.
8 апр 13, 13:12    [14150946]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
R
Guest
verter,

С чего вы решили, что планы должны быть одинаковые ?
8 апр 13, 13:27    [14151050]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
Lecter
Member

Откуда: Киев
Сообщений: 2032
verter,

Вы можете обьяснить зачем это вам нужно?
Как собирали статистику?
8 апр 13, 13:34    [14151114]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
DВА
Member

Откуда:
Сообщений: 5439
verter
Всё-таки план отличается не только целью, но и по содержаниию - на 9-ке один план, на 11-м - совершенно другой. Причём 9-ку и 11-й ставили по-умолчанию, т.е. настройки оптимизатора не меняли. Но почему то планы разные. Например если в плане на 9-ке стоит TABLE_ACCESS_BY_INDEX, то на 11-м TABLE_ACCESS_FULL. Может это из-за того, что когда из дампа заливали базу на 11-й сервер, то не перестроили индексы? Статистику пересобирали, это точно.

если хотите видеть одинаковые планы ни в чем особо не разбираясь, то забудьте про экспорт-импорт, мигрируйте базу как положено путем обновления версий, выставляйте optimizer_features_enable в старое значение и может быть тогда будет какой-нить смысл говорить об эквивалентности планов.
Да и то не в вашем случае.
А так берем каждый съехавший план индивидуально, и выясняем, по каким причинам оптимизатор предпочел фул скан, и мог ли он вообще использовать ваш индекс
8 апр 13, 13:34    [14151116]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
verter
tru55
А ты знаешь, в чем отличие CHOOSE от ALL_ROWS?


а при чём тут это? Мой вопрос можно переформулировать так: как сделать так чтобы план запроса был одинаков для двух разных версий серверов оракл, настройки оптимизатора все заданы по-умолчанию.


Прописать хинтами подсказки к плану.

Только 9-ка и 11 -- достаточно разные сервера, в 9-ке может тупо не поддерживаться таких способов выполнения запроса (шагов плана), которые есть в 11, так что в 9-ке они будут проигнорированы и цель не будет достигнута.

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

На практике я бы оставил одну версию в покое, на откуп оптимизатору, там, где план стоится приемлимо самим оптимизатором,
а на другой версии выставлял бы хинты.
8 апр 13, 14:11    [14151402]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
Дело в том, что имеется огромное кол-во запросов, написанных и оптимизированных под 9-ку. Некоторые из них на 11-м работают медленно. Если разбираться с каждым запросом отдельно, то на это уйдёт огромное кол-во времени, поэтому хочется сделать так чтобы планы на всех запросах были одинаковые, т.е. такие же как на 9-ке.
8 апр 13, 14:21    [14151492]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
Хм....
Guest
[quot MasterZiv]
verter
пропущено...
Только 9-ка и 11 -- достаточно разные сервера

Сервера = версии?
8 апр 13, 14:21    [14151495]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
[quot Хм....]
MasterZiv
пропущено...

Сервера = версии?


Это безусловно одна СУБД, но версии настолько разные, что можно фигурально сказать, что это разные СУБД.
8 апр 13, 14:42    [14151659]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
verter
Дело в том, что имеется огромное кол-во запросов, написанных и оптимизированных под 9-ку. Некоторые из них на 11-м работают медленно. Если разбираться с каждым запросом отдельно, то на это уйдёт огромное кол-во времени, поэтому хочется сделать так чтобы планы на всех запросах были одинаковые, т.е. такие же как на 9-ке.


По опыту на 11 он часто в план вставляет JOIN на базе хэш-таблицы (hash-join).
Это часто лечится хинтом /*+ FIRST_ROWS */
8 апр 13, 14:45    [14151684]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
ORA__SQL
Member

Откуда: Moscow
Сообщений: 1774
MasterZiv
verter
Дело в том, что имеется огромное кол-во запросов, написанных и оптимизированных под 9-ку. Некоторые из них на 11-м работают медленно. Если разбираться с каждым запросом отдельно, то на это уйдёт огромное кол-во времени, поэтому хочется сделать так чтобы планы на всех запросах были одинаковые, т.е. такие же как на 9-ке.
По опыту на 11 он часто в план вставляет JOIN на базе хэш-таблицы (hash-join).
Это часто лечится хинтом /*+ FIRST_ROWS */
Учите не хорошему. Почитайте Note 154354.1
8 апр 13, 14:48    [14151708]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
ORA__SQL
MasterZiv
пропущено...
По опыту на 11 он часто в план вставляет JOIN на базе хэш-таблицы (hash-join).
Это часто лечится хинтом /*+ FIRST_ROWS */
Учите не хорошему. Почитайте Note 154354.1


Я не представляю, где можно найти этот note, но вполне представляю, что может быть там написано.
Что на самом деле план на базе HASH JOIN оптимальнее, и что надо 200 раз подумать, прежде чем ставить хинт.
Только это решать не мне, а автору топика.
8 апр 13, 15:13    [14151913]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
ORA__SQL
Member

Откуда: Moscow
Сообщений: 1774
MasterZiv
ORA__SQL
пропущено...
Учите не хорошему. Почитайте Note 154354.1
Я не представляю, где можно найти этот note, но вполне представляю, что может быть там написано.
Что на самом деле план на базе HASH JOIN оптимальнее, и что надо 200 раз подумать, прежде чем ставить хинт.
Только это решать не мне, а автору топика.
Помоему вы веткой ошиблись. Продолжайте лучше плюсами заниматься.
8 апр 13, 15:19    [14151945]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять цель в плане запроса?  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
MasterZiv
По опыту на 11 он часто в план вставляет JOIN на базе хэш-таблицы (hash-join).
Это часто лечится хинтом /*+ FIRST_ROWS */


Точно, так и есть! В 11-м он везде эти хэш-джоины ставит и вместе с ними TABLE_ACCESS_FULL. Не понимаю ,почему он не выбирает идти по индексам?!
8 апр 13, 15:44    [14152134]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить