Вопрос про хинты и стабилизацию плана оптимизатора

Просто
Дата: 31.05.2006 14:45:31
Ходил я как-то на собеседование, и показал свои SQL-запросы. Начальник, проводивший собеседование, увидев, что все они, как правило, нашпигованы хинтами, произнёс фразу: "Да-а, администрированием там у вас никто не занимался."
Ходил я также на другое собеседование, на котором начальник, проводивший собеседование, не скажу что с гордостью, но с каким-то достоинством произнёс: "Подавляющая часть запросов у нас с хинтами".

Причём и в том и в другом случае это были компании ("лидеры рынка" :) ), работающие с достаточно большим объёмом данных и большим количеством пользователей. В чём достоинства и недостатки использования хинтов по сравнению со стабилизацией плана оптимизатора?
alex-ls
Дата: 31.05.2006 14:46:51
А Вы знаете, что такое стоимостной оптимизатор?
Просто
Дата: 31.05.2006 14:52:09
alex-ls
А Вы знаете, что такое стоимостной оптимизатор?


Приблизительно. Знаю, что план разбора запроса он строит, основываясь на статистике, в отличие от продукционного, который строит план запроса по заранее заданным жёстким правилам. Знаю также, что стоимостный оптимизатор имеет три режима: choose, first_rows и all_rows.
alex-ls
Дата: 31.05.2006 14:55:21
Просто
alex-ls
А Вы знаете, что такое стоимостной оптимизатор?

Знаю, что план разбора запроса он строит, основываясь на статистике, в отличие от продукционного, который строит план запроса по заранее заданным жёстким правилам.

фактически хинтами Вы ограничиваете возможности оптимизатора стоимостного менять план в зависимости от изменения статистики, что на мой взгляд плохо.
Просто
Дата: 31.05.2006 14:59:35
alex-ls
фактически хинтами Вы ограничиваете возможности оптимизатора стоимостного менять план в зависимости от изменения статистики, что на мой взгляд плохо.


Это я тоже знаю. Но это не ответ на мой вопрос. Вопрос мой как раз в этом и состоял - почему в одних случаях разработчики почти всегда используют хинты, а в других - не используют.
andrey_anonymous
Дата: 31.05.2006 15:00:10
alex-ls
фактически хинтами Вы ограничиваете возможности оптимизатора стоимостного менять план в зависимости от изменения статистики, что на мой взгляд плохо.

Фактически часто стоит обратная задача - система стабильна, большинство запросов выверено и надо обеспечить сохранение этой стабильности при тиражировании.
Что касается outlines (это имелось ввиду под "стабилизацией плана"?), то они не всесильны. Нельзя, например, (по крайней мере у меня не получалось :) стабилизировать план динамического запроса с литералами.
andrey_anonymous
Дата: 31.05.2006 15:02:34
Просто
alex-ls
фактически хинтами Вы ограничиваете возможности оптимизатора стоимостного менять план в зависимости от изменения статистики, что на мой взгляд плохо.

Это я тоже знаю. Но это не ответ на мой вопрос. Вопрос мой как раз в этом и состоял - почему в одних случаях разработчики почти всегда используют хинты, а в других - не используют.

ИМХО это больше зависит от корней системы.
Если бОльшая часть была реализована еще под oracle7, то при последующих переходах проще захинтовать то что есть нежели рисковать и переходить на сырой (ora8) CBO. Ну а дальше уже по накатанному.
alex-ls
Дата: 31.05.2006 15:03:15
andrey_anonymous
alex-ls
фактически хинтами Вы ограничиваете возможности оптимизатора стоимостного менять план в зависимости от изменения статистики, что на мой взгляд плохо.

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

да я с этим не спорю... Это я подразумевал... Вот собственно и полный ответ автору ;)
Просто
Дата: 31.05.2006 15:05:32
andrey_anonymous
Фактически часто стоит обратная задача - система стабильна, большинство запросов выверено и надо обеспечить сохранение этой стабильности при тиражировании.


Понятно. Спасибо за ответ.

andrey_anonymous
Что касается outlines (это имелось ввиду под "стабилизацией плана"?)


Да. Термин "стабилизация плана" я взял из перевода книжки Кайта.

andrey_anonymous
Нельзя, например, (по крайней мере у меня не получалось :) стабилизировать план динамического запроса с литералами.


А можно поподробнее про литералы? Имеется в виду запрос с условиями вида where name = 'Иванов'?
andrey_anonymous
Дата: 31.05.2006 15:12:11
Просто
А можно поподробнее про литералы? Имеется в виду запрос с условиями вида where name = 'Иванов'?

Да, они. Похитрее, естественно (типа 'FROM ' ||:MyTableName|| ' where')