powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Интилигентность оптимайзера, база без хинтов - реальность?
25 сообщений из 260, страница 1 из 11
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530198
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу оговорюсь, что вопросы несколько поверхностные и утрированные. Я с DB2 совершенно не знакома, так что рассматривайте мой постинг как спортивный интерес новичка.

Пообщалась тут недавно с DB2-шником, который проявил интерес к Oracle. Я ему пару интересных штук по Oracle рассказала, он мне про DB2. Его впечатлила реализация механизма блокировок в Oracle, а меня механизм разбора
и оптимизации SQL выражений в DB2.

В частности, что в DB2 хинты отсутсвуют как класс. Факт, то что в Oracle производительность запроса можно увеличить в несколько раз с пом. хинтов, он считает вовсе не крутизной, а скорее кривизной. Вот его примерные слова:

"В DB2 не важно как ты напишешь запрос. Запросы оптимайзер преобразует в некий граф с оценкой по статистики, которая всегда поддерживается в актуальном состоянии, что позволяет выбрать оптимальный план. Таким образом в шаманстве по переписыванию запросов в их более оптимальные эквиваленты попросту нет необходимости. Нужно просто написать запрос на выборку нужных данных, а отимайзер преобразует его в оптимальный внутренний эквивалент."

Нечто вроде

Код: plaintext
1.
2.
Запрос (варинат  1 ) \
Запрос (варинат  2 ) - - > оптимальное внутреннее представление
Запрос (варинат  3 ) /

С моей стороны аргумент был, что разработчик иногда имеет больше информации, или она недоступна оптимайзеру, как лучше выбирать данные, и может указать на это с пом. хинтов.

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

Итак, мои вопросы:

1) Буду признательна за интересные ссылки по механизму работы оптимайзера DB2 (только пожалуйста не на углубленную доскональную документацию).

2) Поделитесь впечатлениями по написанию SQL запросов. Дейсвительно вам совсем не приходится переписывать запросы?

3) Бывает ли такое, что оптимайзер заклинивает, и он упорно использует далеко не самый оптимальный план?

4) Слышала, что влиять на оптимайзер, можно с помощью правки статистики напрямую вручную (в Oracle есть нечто похожее optimizer_index_cost_adj). В принципе это тогда почти что тоже самое, что и хинты.

to NewYear

Рассчитываю на ваше участие:)
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530309
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поищи в Internet'e про LEO

http://www.google.com/search?q=DB2+LEO&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8

HINT кривизна, потому как он может стать не актуальным в силу изменения распределения данных etc... И у оптимизатора не будет возможности выбора, и еще тебе придется переделывать приложение, что не есть гуд.

P.S. По мне так Oracle механизм блокировок не есть GOOD для чистого OLTP или DW слишком много ресурсов допоглнительных требует.

P.P.S. Вышесказанное есть моя личная точка зрения и не может служить официальным заявлением компании IBM
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530413
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>2) Поделитесь впечатлениями по написанию SQL запросов. Дейсвительно вам >совсем не приходится переписывать запросы?

ну в общем да.

>3) Бывает ли такое, что оптимайзер заклинивает, и он упорно использует >далеко не самый оптимальный план?

да, бывает. если написать UDF на С++, и включить ее в запрос.
тогда нужно так создавать индексы, чтоб был один возможный план выполнения. это единственный случай, какой я знаю.
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530444
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про oracle я знаю только, что там есть какие-то дурацкиe rollback-segments,
которые никому не нужны, и что при попытке откатить трарзакцию скажем, в 100 мегов он заваливается.
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530456
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Nikolay

HINT кривизна, потому как он может стать не актуальным в силу изменения распределения данных etc...

Да, это частая проблема. Изначально хинты позиционировались как средство, к которому следует прибегать в виде исключения, чтобы "подтолкнуть" оптимайзер. Но их использование стало скорее нормой, что в принципе было предсказуемо.

По мне так Oracle механизм блокировок не есть GOOD для чистого OLTP или DW слишком много ресурсов допоглнительных требует.


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

То что, блокировки это атрибут данных, имеет след. преимущества

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

При коммите Oracle не всегда снимает все блокировки сразу а только частично (если правильно помню 10% от buffer cache), зачем тратить ресурсы и тормозить работу других сессий сразу, например чтобы снять блокировки со 100000 измененных строк? Блокировки это атрибут данных и они просто скидываются на диск вместе с измененными данными. Они будут сняты по мере необходимости другими сессиями. При доступе к таких "неочищенным" от блокировок блокам, обращающейся к нему процесс увидит блокировку и проверив что она уже недействительна, очистит ее или просто перепишет, наложив свою. Таким образом сглаживается расход ресурсов на управление блокировками и равномерно распределяется по времени.

Очень удачная аналогия в этом отношении следующая. Есть столовая со множеством столиков, на каждом стоит чайник. Задача - обслужить (напоить чаем) большой поток посетителей. Одно дело когда чай могут разливать только официанты, которые в мыле бегают от столика к столику, другое дело когда клиенты сами могут налить себе чай, не конкурируя друг с другом за такой ограниченный ресурс как официанты.

PS
В Книге Тома Кайта много подобных очень наглядно и с примерами раскрыто. Если вдруг понадобится узнать об механизмах и особенностях работы СУБД Oracle, его 2 книги это лучший способ узнать о них.
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530457
Oracle XPert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Violina: Пока очень кратко. чуть подробнее немного позже..

2) Поделитесь впечатлениями по написанию SQL запросов. Дейсвительно вам совсем не приходится переписывать запросы?

К сожалению, приходится

3) Бывает ли такое, что оптимайзер заклинивает, и он упорно использует далеко не самый оптимальный план?

Да, и на базах с большим дрейфом данных - достаточно часто

HINT кривизна, потому как он может стать не актуальным в силу изменения распределения данных etc...

Not TRUE.[/ color] IBM Optimizer - кривизна по Чебышеву!
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530468
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViolinaБывает ли такое, что оптимайзер заклинивает, и он упорно использует далеко не самый оптимальный план?
А как узнать в DB2 что этот план не самый оптимальный? Хинтов-то нет, чтобы вариацию попытаться сделать. М.б. поэтому DB2-ники думают, что сервер им даёт правильные планы?

NewYearпро oracle я знаю только, что там есть какие-то дурацкиe rollback-segments, которые никому не нужны
Ну Вам-то они может и не нужны...
NewYear и что при попытке откатить трарзакцию скажем, в 100 мегов он заваливается
Хто заваливается? Сервер? С core dump-ом?
_______________
Alex
There are three kinds of people: those who can count and those who can't
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530473
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to NewYear

про oracle я знаю только, что там есть какие-то дурацкиe rollback-segments

Есть, но почему сразу дурацкие. Это как настроишь базу, так она и себя вести будет. Вы наверное, знаете что Oracle скорее версионник чем блокировочник, rollback segments ему нужны для получения версий данных по состоянию на опрделенных момент времени. Именно они и обеспечивают возможность того, что чтение и запись не блокируют друг друга. Также они используются для отката транзакций.

to Oracle X-pert

базах с большим дрейфом данных

Что имеется в виду под дрейфом данных в вашем случае?

PS
Мы все таки здесь в гостях, давайте не будем провоцировать на выпады:)
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530487
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжение...

А redo журнал нужен только в случае сбоя, для наката потерянных в результате него изменений. Наличие rollback segments позволяет Ораклу очень быстро писать redo журнал, так как он как бы берет на себя большую часть функций. Поэтому redo журнал пишется очень быстро с одной стороны, с другой стороны нет необходимости скидывать изменные данные на диск именно сейчас. Oracle скидывает их по своему усмотрению, расномерно распределяя нагрузку по времени - еще не закомиченные данные могут быть скинуты на диск или наоборот закомиченные данные могут оставаться в памяти, пока Oracle не сочтет нужным их записать - таим образом избегается еще один bottle neck.
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530522
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViolinaЗапросы оптимайзер преобразует в некий граф с оценкой по статистики, которая всегда поддерживается в актуальном состоянии, что позволяет выбрать оптимальный план. Таким образом в шаманстве по переписыванию запросов в их более оптимальные эквиваленты попросту нет необходимости. Нужно просто написать запрос на выборку нужных данных, а отимайзер преобразует его в оптимальный внутренний эквивалент.
Опыт подсказывает (когда-то я занимался схожими алгоритмами), что при большом количестве элементов графа (неколько десятков) будет:
- возрастать неточность прогноза
либо
- возрастать время расчёта (причём нелинейно).
Это так? Т.е.:
Правильные (оптимальные) ли строятся планы для больших запросов?
ViolinaКонтраргументом был вопрос, как разработчик может знать состояние данных лучше, чем оптимайзер, если статистика всегда актуальна?
Могу привести пример: разработчик может знать, минимизация чего является целью оптимизации запроса. Либо времени отклика, либо суммарного выполнения запроса. Сервер БД про это никак сам догадаться не может

_______________
Alex
There are three kinds of people: those who can count and those who can't
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530547
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to stdio

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

Да, это один из показательных примеров. Читала одну статью противника хинтов, где он и говорил, что это единственный случай когда использование хинтов оправдано.

/*+all_rows*/
/*+first_rows*/
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530586
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Violina: Хранение блокировок в страницах имеет следствие - более высокиe требования к IO. Это тоже ресурс, Тома Кайта я читал.

2stdio: Вариацию плана можно сделать поигравшись с индексами.
Сколько времени ты тратишь на оптимизацию одного сложного запроса???

P.S. Вышесказанное есть моя личная точка зрения и не может служить официальным заявлением компании IBM
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530627
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понятия не имею про какие то там хинты, поэтому не знаю чем они лучше/хуже. Знаю лишь, что в DB2 можно посмотреть планы запроса, рассмотренные оптимизатором, их стоимость и т.д., а также рекомендации по оптимизации плана (чаще всего создание каких - либо индексов).

2 stdio: в DB2 database-engine осуществляет выборку посредством одного из нескольких возможных путей

Reading rows directly from the table (dataspace scan processing)
Reading rows through an access path (using either key selection or key positioning)
Creating an access path directly from the dataspace
Creating an access path from an existing access path (index-from-index)
Using the query sort routine (if conditions are satisfied)

для каждого из этих путей Optimizer выполняет определение стоимости запроса на основе имеющейся статистики, посчитать лучше человек практически не сможет.

ЗЫ. Объясните на пальцах, что такое хинты?

ЗЗЫ. Виолина - это что массированная атака или просто для стеба ?
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530653
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Nikolay

Хранение блокировок в страницах имеет следствие - более высокиe требования к IO.

Не в страницах, в блоках. С этим можно было бы согласиться, если бы IO делалось исключительно для блокировок, но поскольку IO так и так делаются в силу изменения данных (при чтении ВООБЩЕ НЕ накладываются какие бы то ни было блокировки), то убиваются сразу 2 зайца, см. мой постинг

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

PS
Ссылки на статьи с описанием методов разбора SQL запросов все еще на повестке дня. Сама я тоже поискать попытаюсь, но наверняка кто то сможет порекомендовать конкретно что то интересное.
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530667
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни то не другое. На форуме Oracle я уже давно известна подобными философско-теоретическими вопросами. См. например

Транзакционность DDL операций - друг или враг

PS
Мне действительно интересно узнать об особенностях друих СУБД так сказать из первых рук и плодотворно подискутировать, без таких выпадов типа - ацтой, дурацкие итп.
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530669
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предпоследнее сообщение для riman
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530710
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Violina: Что в Oracle блок то в остальных CУБД страница.
Я имею в виду блокировки занимают место на котором могли бы располагаться данные, да немного места (чем больше конкурентность тем больше. ITL слоты
помоему это так называется).
Но сканировать-то больше приходится => больший IO.

И что означает затраты по сравнению на эскалацию пренебрежительно малы. Пока это звучит голословно.

В подтверждение моего тезиса о меньшей эффективности IO Oracle и DB2 посмотри на ничем не примечательные места 5 и 6 в TPC-C
tpc.org. Oracle быстее на 1% но и контроллеров у него больше чуть ли не в 2 раза больше

P.S. Вышесказанное есть моя личная точка зрения и не может служить официальным заявлением компании IBM
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530788
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikolay KulikovХранение блокировок в страницах имеет следствие - более высокиe требования к IO.
Не сказал бы. Всё равно блок на диск писать. Ну заодно в нём и десяток байт под "служебные нужды" поиспользовать.
Nikolay KulikovСколько времени ты тратишь на оптимизацию одного сложного запроса???
Смотря какого... ;-) У меня-то лично с Oracle-овым оптимизатором проблем нет. Мы, типа, дружим.
Если серьёзно, то с оптимизацией дело обстоит так, что если я вижу "плохой" план, то пытаюсь понять причину его выбора. Как правило, у оптимизатора на это есть какие-то основания. Если причина понятна, то пытаюсь модифицировать SQL-запрос. Вот способы:
1) Использовать exists вместо, in. И наоборот.
2) Написать выражение заведомо так, чтобы индекс не подцепился (если индекс вредит).
3) Пересмотреть принцип построения запроса.
итп.
rimanЗЫ. Объясните на пальцах, что такое хинты?
Хинты - это подсказки оптимизатору, заставляющие его использовать (или говорящие, что _не_ надо использовать) определённый путь доступа к извлечению данных.
rimanдля каждого из этих путей Optimizer выполняет определение стоимости запроса на основе имеющейся статистики, посчитать лучше человек практически не сможет.
не верю, что оптимизатор делает _полный_ перебор вариантов. Он наверняка сразу откидывает некоторые "ветки" графа как по его мнению заведомо (оптимизатора) неоптимальные. Вот тут он может ошибиться.
Кстати, это распространённое заблуждение про "мощь" оптимизатора по сравнению с человеком. Почему:
1) Оптимизатор "думает" очень мало времени.
2) Принципы мышления человека и машины отличаются...
К тому же не предлагается строить _все_ планы за оптимизатор. Речь идёт об ответственных и ресурсоёмких/частых запросах.
rimanReading rows directly from the table (dataspace scan processing)
Reading rows through an access path (using either key selection or key positioning)
Creating an access path directly from the dataspace
Creating an access path from an existing access path (index-from-index)
Using the query sort routine (if conditions are satisfied)
Стоп-стоп-стоп. Это ведь про выборку из одной таблицы? Фактически, что тут от оптимизатора требуется, так это сказать, как лезть за данными: через индекс или через полный просмотр таблицы. Интересен вопрос, когда таблиц _несколько_. Тут надо уже рассматривать различные варианты соединения таблиц и разные способы соединения... И поэтому вариантов становится настолько много, что "оценить" каждый нет возможности.
Nikolay KulikovВариацию плана можно сделать поигравшись с индексами.
А если БД производственная? Кто же разрешит "левый" индекс на БД повесить? А запрос-то нужно написать... И план знаешь, какой должен быть оптимальным... Вот только воздействовать на оптимизатор через индексы у тебя возможности нет. В Oracle это решается как раз использованием хинта.
_______________
Alex
There are three kinds of people: those who can count and those who can't
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530910
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stdio
1) Использовать exists вместо, in. И наоборот.
2) Написать выражение заведомо так, чтобы индекс не подцепился (если индекс вредит).
3) Пересмотреть принцип построения запроса.


1) Не знаю как в Oracle это реализовано, но в DB2 использование exists естесственно, потому что:

Код: plaintext
1.
2.
3.
4.
5.
For Subquery - when using negation logic:
Use NOT Exists 
	tip:DB2 tests non-existence
Instead of NOT IN
	tip:DB2 must materialize the complete result set
2) в DB2 Optimizer и не подхватит не нужный индекс, он выбирает наилучший путь.
3) не совсем понял, как это? Если Вам нужны эти данные из этих таблиц, как их ещё можно достать?

stdio
Стоп-стоп-стоп. Это ведь про выборку из одной таблицы?

естесственно.

stdio
Интересен вопрос, когда таблиц _несколько_.

вот тогда оптимизатор может подсказать какие ещё индексы нужно создать.
Про определение способа соединения оптимизатором я не знаю, надо у Николая или NewYear'a спросить

Да и вообще парочка советов по индексам:
Код: plaintext
1.
2.
3.
4.
5.
Create indexes for columns you frequently:
ORDER BY
GROUP BY (better than a DISTINCT)
SELECT DISTINCT
JOIN
stdio
А если БД производственная? Кто же разрешит "левый" индекс на БД повесить? А запрос-то нужно написать... И план знаешь, какой должен быть оптимальным... Вот только воздействовать на оптимизатор через индексы у тебя возможности нет. В Oracle это решается как раз использованием хинта.

Может тогда администратора к БД вообще не подпускать? Тем более, что плохой индекс оптимизатор точно не использует для плана доступа.

ЗЫ. Поправьте, где я ошибся. Абзацы с инглишем - из книжек, копирайты тоже оттуда.
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530953
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Nikolay

Что в Oracle блок то в остальных CУБД страница.

ОК. У меня термин "страница" ассоциируется с несколько "бОльшей" структурой чем блок. Кроме того уровень гранулярности наложения блокировок это строка, а в блоке их может быть несколько.

И что означает затраты по сравнению на эскалацию пренебрежительно малы. Пока это звучит голословно.

Ну во-первых, сам факт что другие СУБД вынуждены делать эскалацию. Зачем ее делают - затем что поддержка такого критического количества блокировок на более низком уровне сулила бы большие затраты ресурсов и очень ощутимо сказывалась бы на производительности. Или есть другие причины? В Oracle в этом нет необходимости, затраты на блокировки растут линейно с количеством заблокированных строк.

По поводу доплонительных IO. Опять же приведу аналогию. Одно дело когда ты не планировал ехать например в центр города, а тебя попросили кого то свозить туда, другое дело когда ты так и так по своей надобности поехал туда и к тебе примазался попутчик. Конечно будут дополнительные затраты на бензин из за возросшей массы (+попутчик), но они не существенны. См. также постинг

stdioНе сказал бы. Всё равно блок на диск писать. Ну заодно в нём и десяток байт под "служебные нужды" поиспользовать.


Насчет скорости выборки данных (время отклика), возможно что например DB2, MS SQL и MySQL выбирают данные в ряде случаев быстрее чем Oracle. Но также надо учитывать, что какой-нибудь запрос может поставить другие в очередь и сделать обработку попросту последовательной из за наложения слишком "сильных" блокировок. Пусть например MySQL такой быстрый в отношении выборки данных, но какой от этого толк, если

Из документации по MySQL
This means that if you have many updates on a table, SELECT statements will wait until there are no more updates.

To work around this for the case where you want to do many INSERT and SELECT operations on a table, you can insert rows in a temporary table and update the real table with the records from the temporary table once in a while.


Ведь в основном проблемы возникают не из за недостаточной скорости чтения данных с диска. И такие проблемы не всегда решишь, раскидав датафайлы по разным дискам или выставив другой размер блока. Действительно серьезные проблемы возникают из-за того, что юзеры начинают конкурировать за "узкие места" и "ограниченные" ресурсы и выстраиваться в очередь. Вот здесь то и сказывается "удачный" механизм реализации блокировок и распределения нагрузок по времени, позволяющий легко сводить такие ситуации к минимуму.
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530993
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stdioКто же разрешит "левый" индекс на БД повесить?

NikolayМожет тогда администратора к БД вообще не подпускать?

Здесь встану на сторону Николая:) Меня тоже умиляет тот факт, что собранная статистика может быть большим злом и испортить планы выполнения.

Как вывести имена тех таблиц схемы, где есть хотя бы 1 запись????
Способ хороший, но вот когда предлагают собрать статистику для каких-то вспомогательных технических целей - это меня всегда смущает. А что если проект расчитан на использование RULE и optimizer_mode = CHOOSE. Как насчёт последствий?

если расчитано на rule, а указано choose (обычная настройка в init.ora), то сбор статистики приведет к возможным проблемам с производительностью системы. Могу привести пример - сбор статистики в oracle Applications 11.0 по рекомендациям консультантов приводил к падению производительности отчетов на 20-30%.


К счастью это решаемо

Если серьезный проект делают на rule и завязываются на этом, то выставляют режим rule и статистика пофигу. Или же выставляют режим choose и собирают статистику.
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32530995
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
riman, мы исходим из разных посылок:
Я говорю, что все (оптимизаторы) не идеальны и поэтому должны быть какие-то "ручки" к БД для подкручивания.
Вы же исходите из понятия идеального оптимизатора. В принципе, изначальный вопрос Виолины и сводится к тому, что: настолько ли идеален оптимизатор IBM?
rimanМожет тогда администратора к БД вообще не подпускать?
Добавление к "покупной" системе лишнего индекса может разные последствия иметь:
1) Снижение производительности
2) Потеря тех. поддержки
В гос. конторах, вроде ЦБ, админ просто прав по служебным иструкциям такими вещами не имеет прав заниматься.
rimanТем более, что плохой индекс оптимизатор точно не использует для плана доступа
Мы исходим из разных посылок.
_______________
Alex
There are three kinds of people: those who can count and those who can't
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32531044
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Violina.
это я сказал
2 stdio
stdioМы исходим из разных посылок.
Как я понял Вы полагаете, что оптимизатор может выдать неверный план запроса. Я же говорю, что он показывает лучший из существующих. Если можно написать лучше - Adviser предлагает создать новый план (здесь я не говорю, что этот новый план есть лучший), если администратор может обойтись без него - он пишет свой план. Если всё прошло удачно Adviser больше ничего не посоветует.
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32531120
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rimanКак я понял Вы полагаете, что оптимизатор может выдать неверный план запроса.
Вы неправильно меня понимаете. Я полагаю, что оптимизатор может выдать неотимальный план. Вы, наверное, согласитесь, что понятия "неверный план" и "неоптимальный план" - всё-таки разные понятия. И истолковываю "неверный" как синоним слова "неосуществимый".
rimanЯ же говорю, что он показывает лучший из существующих.
Что значит "лучший"? Оптимизатор оценивает планы в неких виртуальных "попугаях" (С) Шин. Лучший в "попугаях" - возможно. Но почему можно утверждать, что этот план будет самым лучшим на работающей системе? Ведь, если действительно стремиться построить наиоптимальнейший план, то надо учитывать текущую и будущую (на неск. минут, скажем) загрузку дисков и CPU.
rimanЕсли можно написать лучше - Adviser предлагает создать новый план (здесь я не говорю, что этот новый план есть лучший), если администратор может обойтись без него - он пишет свой план. Если всё прошло удачно Adviser больше ничего не посоветует
Что это за Adviser? Виолина, похоже, им и интересуется. Что он может? Как выглядит?
_______________
Alex
There are three kinds of people: those who can count and those who can't
...
Рейтинг: 0 / 0
Интилигентность оптимайзера, база без хинтов - реальность?
    #32531150
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что это за Adviser? Виолина, похоже, им и интересуется. Что он может? Как выглядит?

Да, было бы интересным. Но дискуссия тоже интересна. В отношении механизмов построения планов я могу в ней учавствовать пока что только в режиме read only:)

PS
Кстати в Oracle 10g тоже появился родной SQL Tuning Advisor. И ИМХО в Oracle тоже все идет к тому, что статистика всегда должна быть собранной и автоматически поддерживается uptodate. Оптимайзер становиться все более "умным" и Rule Based Approach просто вымирает.
...
Рейтинг: 0 / 0
25 сообщений из 260, страница 1 из 11
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Интилигентность оптимайзера, база без хинтов - реальность?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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