Home  |  Administration  |  SQL  |  Tuning  |  Miscellaneous  |

The Search For Intelligent Life in the Cost-Based Optimizer
by Tim Gorman

Предыдущая Оглавление Следующая

RBO против CBO

На протяжении почти десяти лет с момента создания оптимизатора, основанного на анализе затрат1 (CBO2), его существование в целом было отмечено разочарованием и неудовлетворением. CBO дебютировал в Oracle7 версии 7.0 с обещанием волшебного улучшения производительности приложения и преобразования существующих операторов SQL в молниеносно отрабатывающий код c помощью принятия оптимизатором тех же решений, которые принимали бы мы.

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

В результате большинство разработчиков предпочитало по-возможности по-прежнему использовать оптимизатор, основанный на анализе заданных правил3 (RBO4), который ценили за его адекватную предсказуемость и стабильность. Похоже, что единственным преимуществом CBO был тот факт, что он поддерживал все новые, модные возможности, которые Oracle включила в версию 7.1 и выше. Казалось, что риск, связанный с применением CBO, был ценой использования этих новых возможностей. Если не принимать этот момент во внимание, то "общественное мнение" был таково, что всем кроме мазохистов лучше придерживаться RBO.

Хотя постепенно ситуация с CBO стала гораздо лучше в Oracle8 версии 8.0 и на порядок лучше в Oracle8i, это широко распространенное мнение существует до сих пор. Действительно, ведь одна из новых возможностей Oracle8i stored outlines, была заявлена самой корпорацией Oracle как устойчивость планов оптимизатора (optimizer plan stability). К сожалению, смысл фразы, который имела в виду компания Oracle, отличается от того, как ее понимает весь остальной мир. В данном случае имелся в виду механизм расширения возможностей CBO при тестировании и миграции данных. Но все (по крайней мере, каждый, с кем я разговаривал), похоже, интерпретируют это новое свойство как огромную "заплатку" для CBO и молчаливое признание Oracle того факта, что на CBO просто нельзя полагаться, он не работает. Забавно, но подсказки (хинты) CBO в операторе SQL воспринимаются похожим образом. В действительности, ни один из этих случаев не является молчаливым признанием какого-либо недостатка, поскольку CBO на самом деле работает.

Истина заключается в том, что хотя эти негативные ощущения были верны для Oracle7, в Oracle8 и особенно в Oracle8i CBO работает отлично. Это довольно смелое утверждение, но, пожалуйста, позвольте дать мне шанс убедить вас в том, что я не являюсь ни представителем Oracle, ни (безусловно) безумным. Любое ненормальное поведение, о котором Вы слышали или свидетелем которого Вы могли быть, скорее в большей степени связано с неправильной эксплуатацией (т.е. недостаточными входными данными или плохой настройкой), чем просто c применением CBO.

Предыдущая Оглавление Следующая
Last Update: October 11, 2007 18:33:32