Диагностический вывод Oracle Query Optimizer - PullRequest
1 голос
/ 14 июля 2009

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

Есть ли способ получить диагностический вывод с сервера Oracle, чтобы проиллюстрировать, какие альтернативы рассматривал CBO и почему они были отброшены?

Я имею в виду такую ​​функцию, как EXPLAIN PLAN, за исключением того, что она перечисляет все возможные (или, по крайней мере, многие) планы выполнения и связанные с ними расходы.

1 Ответ

3 голосов
/ 14 июля 2009

Вы можете лучше понять, как оптимизатор Oracle принимает свои решения, собирая 10053 дампов событий трассировки.

Я обнаружил, что оптимизатор редко принимает "неправильные" решения (ну, исключая распределенные запросы по ссылкам БД), но обычно вводится в заблуждение статистикой, которая не совсем точно отражает характер и распределение ваших данных. Проверьте ресурсы, такие как http://optimizermagic.blogspot.com и http://www.jlcomp.demon.co.uk, чтобы посмотреть внутренние компоненты оптимизатора.

Вы также можете использовать утилиту Oracle SQL Analyzer (за дополнительную плату), чтобы оптимизатор рассмотрел альтернативные пути, и, если будет найден лучший, он по крайней мере создаст старый и новый ПЛАНЫ ОБЪЯСНЕНИЯ для вашего сравнения. Иногда вы можете проанализировать причину неоптимальных планов из этой информации (и чаще всего вы обнаружите, что это проблема статистики)

...