Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
24.05.2004, 11:00
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
Сразу оговорюсь, что вопросы несколько поверхностные и утрированные. Я с DB2 совершенно не знакома, так что рассматривайте мой постинг как спортивный интерес новичка. Пообщалась тут недавно с DB2-шником, который проявил интерес к Oracle. Я ему пару интересных штук по Oracle рассказала, он мне про DB2. Его впечатлила реализация механизма блокировок в Oracle, а меня механизм разбора и оптимизации SQL выражений в DB2. В частности, что в DB2 хинты отсутсвуют как класс. Факт, то что в Oracle производительность запроса можно увеличить в несколько раз с пом. хинтов, он считает вовсе не крутизной, а скорее кривизной. Вот его примерные слова: "В DB2 не важно как ты напишешь запрос. Запросы оптимайзер преобразует в некий граф с оценкой по статистики, которая всегда поддерживается в актуальном состоянии, что позволяет выбрать оптимальный план. Таким образом в шаманстве по переписыванию запросов в их более оптимальные эквиваленты попросту нет необходимости. Нужно просто написать запрос на выборку нужных данных, а отимайзер преобразует его в оптимальный внутренний эквивалент." Нечто вроде Код: plaintext 1. 2. С моей стороны аргумент был, что разработчик иногда имеет больше информации, или она недоступна оптимайзеру, как лучше выбирать данные, и может указать на это с пом. хинтов. Контраргументом был вопрос, как разработчик может знать состояние данных лучше, чем оптимайзер, если статистика всегда актуальна? Итак, мои вопросы: 1) Буду признательна за интересные ссылки по механизму работы оптимайзера DB2 (только пожалуйста не на углубленную доскональную документацию). 2) Поделитесь впечатлениями по написанию SQL запросов. Дейсвительно вам совсем не приходится переписывать запросы? 3) Бывает ли такое, что оптимайзер заклинивает, и он упорно использует далеко не самый оптимальный план? 4) Слышала, что влиять на оптимайзер, можно с помощью правки статистики напрямую вручную (в Oracle есть нечто похожее optimizer_index_cost_adj). В принципе это тогда почти что тоже самое, что и хинты. to NewYear Рассчитываю на ваше участие:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 11:41
|
|||
|---|---|---|---|
|
|||
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
Поищи в 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 12:15
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
>2) Поделитесь впечатлениями по написанию SQL запросов. Дейсвительно вам >совсем не приходится переписывать запросы? ну в общем да. >3) Бывает ли такое, что оптимайзер заклинивает, и он упорно использует >далеко не самый оптимальный план? да, бывает. если написать UDF на С++, и включить ее в запрос. тогда нужно так создавать индексы, чтоб был один возможный план выполнения. это единственный случай, какой я знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 12:27
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
про oracle я знаю только, что там есть какие-то дурацкиe rollback-segments, которые никому не нужны, и что при попытке откатить трарзакцию скажем, в 100 мегов он заваливается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 12:32
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
to Nikolay HINT кривизна, потому как он может стать не актуальным в силу изменения распределения данных etc... Да, это частая проблема. Изначально хинты позиционировались как средство, к которому следует прибегать в виде исключения, чтобы "подтолкнуть" оптимайзер. Но их использование стало скорее нормой, что в принципе было предсказуемо. По мне так Oracle механизм блокировок не есть GOOD для чистого OLTP или DW слишком много ресурсов допоглнительных требует. ИМХО, как раз в Oracle блокировки не являются дорогим ресурсом. Блокировки в Oracle это просто атрибут данных. В этом отношении механизм отличается от других СУБД. Отсутсвует такое узкое место как менеджер блокировок, это одна из причин почему Oracle практически никогда не делает эскалацию блокировок, в ней просто нет необходимости. Про то, что запись никогда не блокирует чтение, и чтение никогда не блокирует запись вы наверное знаете. И то что нет необходимости подкоммичивать периодически изменения, чтобы освободить ресурсы и предотвратить дедлоки. То что, блокировки это атрибут данных, имеет след. преимущества При выборе данных на изменение или непосредственно изменение данные так и так затрагиваются, так что дополнительные расходы на управление блокировками ничтожны. При коммите Oracle не всегда снимает все блокировки сразу а только частично (если правильно помню 10% от buffer cache), зачем тратить ресурсы и тормозить работу других сессий сразу, например чтобы снять блокировки со 100000 измененных строк? Блокировки это атрибут данных и они просто скидываются на диск вместе с измененными данными. Они будут сняты по мере необходимости другими сессиями. При доступе к таких "неочищенным" от блокировок блокам, обращающейся к нему процесс увидит блокировку и проверив что она уже недействительна, очистит ее или просто перепишет, наложив свою. Таким образом сглаживается расход ресурсов на управление блокировками и равномерно распределяется по времени. Очень удачная аналогия в этом отношении следующая. Есть столовая со множеством столиков, на каждом стоит чайник. Задача - обслужить (напоить чаем) большой поток посетителей. Одно дело когда чай могут разливать только официанты, которые в мыле бегают от столика к столику, другое дело когда клиенты сами могут налить себе чай, не конкурируя друг с другом за такой ограниченный ресурс как официанты. PS В Книге Тома Кайта много подобных очень наглядно и с примерами раскрыто. Если вдруг понадобится узнать об механизмах и особенностях работы СУБД Oracle, его 2 книги это лучший способ узнать о них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 12:32
|
|||
|---|---|---|---|
|
|||
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
2 Violina: Пока очень кратко. чуть подробнее немного позже.. 2) Поделитесь впечатлениями по написанию SQL запросов. Дейсвительно вам совсем не приходится переписывать запросы? К сожалению, приходится 3) Бывает ли такое, что оптимайзер заклинивает, и он упорно использует далеко не самый оптимальный план? Да, и на базах с большим дрейфом данных - достаточно часто HINT кривизна, потому как он может стать не актуальным в силу изменения распределения данных etc... Not TRUE.[/ color] IBM Optimizer - кривизна по Чебышеву! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 12:36
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 12:39
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
to NewYear про oracle я знаю только, что там есть какие-то дурацкиe rollback-segments Есть, но почему сразу дурацкие. Это как настроишь базу, так она и себя вести будет. Вы наверное, знаете что Oracle скорее версионник чем блокировочник, rollback segments ему нужны для получения версий данных по состоянию на опрделенных момент времени. Именно они и обеспечивают возможность того, что чтение и запись не блокируют друг друга. Также они используются для отката транзакций. to Oracle X-pert базах с большим дрейфом данных Что имеется в виду под дрейфом данных в вашем случае? PS Мы все таки здесь в гостях, давайте не будем провоцировать на выпады:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 12:46
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
В продолжение... А redo журнал нужен только в случае сбоя, для наката потерянных в результате него изменений. Наличие rollback segments позволяет Ораклу очень быстро писать redo журнал, так как он как бы берет на себя большую часть функций. Поэтому redo журнал пишется очень быстро с одной стороны, с другой стороны нет необходимости скидывать изменные данные на диск именно сейчас. Oracle скидывает их по своему усмотрению, расномерно распределяя нагрузку по времени - еще не закомиченные данные могут быть скинуты на диск или наоборот закомиченные данные могут оставаться в памяти, пока Oracle не сочтет нужным их записать - таим образом избегается еще один bottle neck. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 13:02
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
ViolinaЗапросы оптимайзер преобразует в некий граф с оценкой по статистики, которая всегда поддерживается в актуальном состоянии, что позволяет выбрать оптимальный план. Таким образом в шаманстве по переписыванию запросов в их более оптимальные эквиваленты попросту нет необходимости. Нужно просто написать запрос на выборку нужных данных, а отимайзер преобразует его в оптимальный внутренний эквивалент. Опыт подсказывает (когда-то я занимался схожими алгоритмами), что при большом количестве элементов графа (неколько десятков) будет: - возрастать неточность прогноза либо - возрастать время расчёта (причём нелинейно). Это так? Т.е.: Правильные (оптимальные) ли строятся планы для больших запросов? ViolinaКонтраргументом был вопрос, как разработчик может знать состояние данных лучше, чем оптимайзер, если статистика всегда актуальна? Могу привести пример: разработчик может знать, минимизация чего является целью оптимизации запроса. Либо времени отклика, либо суммарного выполнения запроса. Сервер БД про это никак сам догадаться не может _______________ Alex There are three kinds of people: those who can count and those who can't ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 13:10
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
to stdio разработчик может знать, минимизация чего является целью оптимизации запроса. Либо времени отклика, либо суммарного выполнения запроса Да, это один из показательных примеров. Читала одну статью противника хинтов, где он и говорил, что это единственный случай когда использование хинтов оправдано. /*+all_rows*/ /*+first_rows*/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 13:27
|
|||
|---|---|---|---|
|
|||
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
2Violina: Хранение блокировок в страницах имеет следствие - более высокиe требования к IO. Это тоже ресурс, Тома Кайта я читал. 2stdio: Вариацию плана можно сделать поигравшись с индексами. Сколько времени ты тратишь на оптимизацию одного сложного запроса??? P.S. Вышесказанное есть моя личная точка зрения и не может служить официальным заявлением компании IBM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 13:41
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
Я понятия не имею про какие то там хинты, поэтому не знаю чем они лучше/хуже. Знаю лишь, что в 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 выполняет определение стоимости запроса на основе имеющейся статистики, посчитать лучше человек практически не сможет. ЗЫ. Объясните на пальцах, что такое хинты? ЗЗЫ. Виолина - это что массированная атака или просто для стеба ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 13:50
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
to Nikolay Хранение блокировок в страницах имеет следствие - более высокиe требования к IO. Не в страницах, в блоках. С этим можно было бы согласиться, если бы IO делалось исключительно для блокировок, но поскольку IO так и так делаются в силу изменения данных (при чтении ВООБЩЕ НЕ накладываются какие бы то ни было блокировки), то убиваются сразу 2 зайца, см. мой постинг при выборе данных на изменение или непосредственно изменение данные так и так затрагиваются, так что дополнительные расходы на управление блокировками ничтожны . С затратами которые несет менеджер блокировок и вынужден делать эскалацию, они пренебрежимо малы. PS Ссылки на статьи с описанием методов разбора SQL запросов все еще на повестке дня. Сама я тоже поискать попытаюсь, но наверняка кто то сможет порекомендовать конкретно что то интересное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 13:54
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
Ни то не другое. На форуме Oracle я уже давно известна подобными философско-теоретическими вопросами. См. например Транзакционность DDL операций - друг или враг PS Мне действительно интересно узнать об особенностях друих СУБД так сказать из первых рук и плодотворно подискутировать, без таких выпадов типа - ацтой, дурацкие итп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 13:55
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
предпоследнее сообщение для riman ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 14:16
|
|||
|---|---|---|---|
|
|||
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
2Violina: Что в Oracle блок то в остальных CУБД страница. Я имею в виду блокировки занимают место на котором могли бы располагаться данные, да немного места (чем больше конкурентность тем больше. ITL слоты помоему это так называется). Но сканировать-то больше приходится => больший IO. И что означает затраты по сравнению на эскалацию пренебрежительно малы. Пока это звучит голословно. В подтверждение моего тезиса о меньшей эффективности IO Oracle и DB2 посмотри на ничем не примечательные места 5 и 6 в TPC-C tpc.org. Oracle быстее на 1% но и контроллеров у него больше чуть ли не в 2 раза больше P.S. Вышесказанное есть моя личная точка зрения и не может служить официальным заявлением компании IBM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 14:43
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 15:35
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
stdio 1) Использовать exists вместо, in. И наоборот. 2) Написать выражение заведомо так, чтобы индекс не подцепился (если индекс вредит). 3) Пересмотреть принцип построения запроса. 1) Не знаю как в Oracle это реализовано, но в DB2 использование exists естесственно, потому что: Код: plaintext 1. 2. 3. 4. 5. 3) не совсем понял, как это? Если Вам нужны эти данные из этих таблиц, как их ещё можно достать? stdio Стоп-стоп-стоп. Это ведь про выборку из одной таблицы? естесственно. stdio Интересен вопрос, когда таблиц _несколько_. вот тогда оптимизатор может подсказать какие ещё индексы нужно создать. Про определение способа соединения оптимизатором я не знаю, надо у Николая или NewYear'a спросить Да и вообще парочка советов по индексам: Код: plaintext 1. 2. 3. 4. 5. А если БД производственная? Кто же разрешит "левый" индекс на БД повесить? А запрос-то нужно написать... И план знаешь, какой должен быть оптимальным... Вот только воздействовать на оптимизатор через индексы у тебя возможности нет. В Oracle это решается как раз использованием хинта. Может тогда администратора к БД вообще не подпускать? Тем более, что плохой индекс оптимизатор точно не использует для плана доступа. ЗЫ. Поправьте, где я ошибся. Абзацы с инглишем - из книжек, копирайты тоже оттуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 15:51
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
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. Ведь в основном проблемы возникают не из за недостаточной скорости чтения данных с диска. И такие проблемы не всегда решишь, раскидав датафайлы по разным дискам или выставив другой размер блока. Действительно серьезные проблемы возникают из-за того, что юзеры начинают конкурировать за "узкие места" и "ограниченные" ресурсы и выстраиваться в очередь. Вот здесь то и сказывается "удачный" механизм реализации блокировок и распределения нагрузок по времени, позволяющий легко сводить такие ситуации к минимуму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 16:04
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
stdioКто же разрешит "левый" индекс на БД повесить? NikolayМожет тогда администратора к БД вообще не подпускать? Здесь встану на сторону Николая:) Меня тоже умиляет тот факт, что собранная статистика может быть большим злом и испортить планы выполнения. Как вывести имена тех таблиц схемы, где есть хотя бы 1 запись???? Способ хороший, но вот когда предлагают собрать статистику для каких-то вспомогательных технических целей - это меня всегда смущает. А что если проект расчитан на использование RULE и optimizer_mode = CHOOSE. Как насчёт последствий? если расчитано на rule, а указано choose (обычная настройка в init.ora), то сбор статистики приведет к возможным проблемам с производительностью системы. Могу привести пример - сбор статистики в oracle Applications 11.0 по рекомендациям консультантов приводил к падению производительности отчетов на 20-30%. К счастью это решаемо Если серьезный проект делают на rule и завязываются на этом, то выставляют режим rule и статистика пофигу. Или же выставляют режим choose и собирают статистику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 16:05
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
riman, мы исходим из разных посылок: Я говорю, что все (оптимизаторы) не идеальны и поэтому должны быть какие-то "ручки" к БД для подкручивания. Вы же исходите из понятия идеального оптимизатора. В принципе, изначальный вопрос Виолины и сводится к тому, что: настолько ли идеален оптимизатор IBM? rimanМожет тогда администратора к БД вообще не подпускать? Добавление к "покупной" системе лишнего индекса может разные последствия иметь: 1) Снижение производительности 2) Потеря тех. поддержки В гос. конторах, вроде ЦБ, админ просто прав по служебным иструкциям такими вещами не имеет прав заниматься. rimanТем более, что плохой индекс оптимизатор точно не использует для плана доступа Мы исходим из разных посылок. _______________ Alex There are three kinds of people: those who can count and those who can't ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 16:21
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
2 Violina. это я сказал 2 stdio stdioМы исходим из разных посылок. Как я понял Вы полагаете, что оптимизатор может выдать неверный план запроса. Я же говорю, что он показывает лучший из существующих. Если можно написать лучше - Adviser предлагает создать новый план (здесь я не говорю, что этот новый план есть лучший), если администратор может обойтись без него - он пишет свой план. Если всё прошло удачно Adviser больше ничего не посоветует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 16:49
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
rimanКак я понял Вы полагаете, что оптимизатор может выдать неверный план запроса. Вы неправильно меня понимаете. Я полагаю, что оптимизатор может выдать неотимальный план. Вы, наверное, согласитесь, что понятия "неверный план" и "неоптимальный план" - всё-таки разные понятия. И истолковываю "неверный" как синоним слова "неосуществимый". rimanЯ же говорю, что он показывает лучший из существующих. Что значит "лучший"? Оптимизатор оценивает планы в неких виртуальных "попугаях" (С) Шин. Лучший в "попугаях" - возможно. Но почему можно утверждать, что этот план будет самым лучшим на работающей системе? Ведь, если действительно стремиться построить наиоптимальнейший план, то надо учитывать текущую и будущую (на неск. минут, скажем) загрузку дисков и CPU. rimanЕсли можно написать лучше - Adviser предлагает создать новый план (здесь я не говорю, что этот новый план есть лучший), если администратор может обойтись без него - он пишет свой план. Если всё прошло удачно Adviser больше ничего не посоветует Что это за Adviser? Виолина, похоже, им и интересуется. Что он может? Как выглядит? _______________ Alex There are three kinds of people: those who can count and those who can't ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.05.2004, 16:59
|
|||
|---|---|---|---|
Интилигентность оптимайзера, база без хинтов - реальность? |
|||
|
#18+
Что это за Adviser? Виолина, похоже, им и интересуется. Что он может? Как выглядит? Да, было бы интересным. Но дискуссия тоже интересна. В отношении механизмов построения планов я могу в ней учавствовать пока что только в режиме read only:) PS Кстати в Oracle 10g тоже появился родной SQL Tuning Advisor. И ИМХО в Oracle тоже все идет к тому, что статистика всегда должна быть собранной и автоматически поддерживается uptodate. Оптимайзер становиться все более "умным" и Rule Based Approach просто вымирает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=43&mobile=1&tid=1603768]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
88ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 254ms |
| total: | 480ms |

| 0 / 0 |
