Все планы генераторов планов в Oracle - PullRequest
0 голосов
/ 10 ноября 2018

Читая Руководство по настройке Oracle SQL Я сталкивался с такой цитатой (вы можете найти ее в этой главе ):

Генератор планов исследует различные планы для блока запроса, пробуя разные пути доступа, методы соединения и порядки соединения.

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

Рисунок 4-2 Компоненты оптимизатора

Figure 4-2 Optimizer Components

Можно ли как-нибудь получить все этих планов, сгенерированных генератором планов?

Может быть, есть стандартные PL / SQL-пакеты для этого или системных представлений?

1 Ответ

0 голосов
/ 14 ноября 2018

Обычно вам не нужно видеть все возможные планы , но в некоторых случаях возникает интересный вопрос: почему Oracle отказывается от какого-либо плана и вместо него использует альтернативный.

Чтобы ответить на этот вопрос, идеальная запись - это 10053 след , созданный Oracle.

Существует классическая статья на эту тему от Вольфганга Брайтлинга, которую можно найти здесь .

Также Джонатан Льюис в своих Основах Оракул-Основы посвятил этой теме главу 14 След 10053 .

Google наверняка предоставит другие ссылки.

Слово предупреждения. 10053 не самая простая вещь в контексте Oracle. Также в каждом выпуске вы можете ожидать изменений в выходных данных. Хорошей отправной точкой для изучения является исследование запроса, который создает разные планы выполнения в двух разных средах. Просто возьмите трассу 10053 в обеих базах данных и создайте файл diff и наблюдайте разницу. Вы увидите, есть ли разница в параметрах оптимизатора, статистике объекта или системы и как эти изменения влияют на выбор окончательного плана выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...