Просмотр и анализ плана выполнения запроса в Oracle SQL
Для получения Плана выполнения в Oracle SQL Developer выполните следующие шаги:
- Щелкните правой кнопкой мыши на тексте SQL-запроса.
- Выберите опцию План выполнения или просто нажмите клавишу F10.
Затем, запустите запрос через ‘Выполнить выражение’ (F9). Для детализации результата плана выполнения можете воспользоваться следующим запросом:
Скопировать код
// Ведь видящие – верят! SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
Это поможет вам лучше понять, каким образом SQL-оптимизатор принял его решение, и оценить эффективность вашего запроса.
Начало работы
Прежде чем строить план выполнения, убедитесь, что ваш SQL-запрос уже был выполнен хотя бы один раз. После отображения сообщения о успешном создании плана можно с уверенностью гордиться своей работой! Если вы используете SQL*Plus, то примените команду EXPLAIN PLAN FOR перед запуском запроса, чтобы получить более подробную информацию о его эффективности.
Как разобраться в плане выполнения
Графический интерфейс SQL Developer наглядно показывает весь процесс выполнения запроса. Если же нужен более подробный анализ, на помощь приходит DBMS_XPLAN :
Скопировать код
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST'));
Выполнив этот запрос, вы получите возможность не только увидеть решения, принятые оптимизатором, но и ознакомиться со статистикой плана после выполнения SQL-запроса, что имеет важное значение для настройки производительности.
Чтобы углубиться в понимание плана выполнения, взгляните на окно Плана выполнения и ознакомьтесь с вариантами оптимизации.
Оптимизация продвинутого уровня
Готовы? Внимание! Настройка!
Для понимания плана выполнения настройте дополнительные параметры в SQL Developer, такие как информация о предикатах и параллельное выполнение, перейдя в меню Инструменты -> Параметры -> База данных -> Autotrace/План выполнения.
Помогите оптимизатору помочь вам
С помощью Подсказок SQL вы можете предложить оптимизатору использовать конкретный индекс или способ соединения. Однако будьте аккуратны: использование подсказок может изменить решения, принимаемые оптимизатором автоматически, поэтому применяйте их осознанно.
Доступ ко всему
Для создания и просмотра планов выполнения требуются соответствующие права доступа. Обычно это осуществляется через привилегию SELECT для представления V$SQL_PLAN .
Анализ запроса SQL
Для любого источника данных, который создается с использованием инструкции SQL для внутреннего представления, можно просмотреть план, анализ и результат.
Щелкните значок рядом с именем источника данных, в раскрывающемся меню выберите пункт «Свойства» и выберите ссылку Щелкните здесь на странице свойств.
План и анализ предназначены для использования специалистами по базам данных Oracle. Результаты позволяют узнать о возможном влиянии запроса на базу данных на основании размера таблицы и наличия индекса.
Для получения помощи по этой функции обратитесь к менеджеру учетной записи Responsys.
- About Oracle
- Legal Notices
- Terms of Use
- Your Privacy Rights
Приемы работы с планами выполнения запросов в Oracle
Это как гвоздь в подошве любимого ботинка. Ходить можно, но все чаще ловишь себя на желании остаться на месте или перепоручить дело другим. Мелкие неудобства не только замедляют нашу работу, но и снижают мотивацию, вносят помехи в процесс, снижают качество результата. И если нашелся друг, который научил вас взять молоток и забить этот гвоздь, вы не только будете благодарны ему за помощь, но и сами поможете другим, избавив их от мелкой, но очень раздражающей помехи. Для этого и нужно общаться, делиться не только глубокими и сокровенными знаниями в форумах и на сайтах вроде Хабра, но и своими простыми трюками и «маленькими хитростями»
Как и любой текст, запросы и программы на SQL можно создавать в любом текстовом редакторе. Но если вы профессионал, вы очень много и часто работаете с SQL, то вам уже не будет достаточно наличия подсветки синтаксиса и автоматического переформатирования кода, особенно, если вам приходится переключаться между различными версиями одной СУБД или разными платформами СУБД.
Недавно мне случилось общаться с одним из ведущих профессионалов СУБД Oracle. Он рассказал много интересного про работу с планами выполнения запросов в различных версиях этой СУБД и не постеснялся рассказать всем об используемых им инструментах, приемах и дать немного полезных мелких советов. Я сделал перевод одной из статей в его блоге и хотел бы предложить его вниманию Хабравчан. Несмотря на то, что описанный прием применялся для работы с Oracle, я теперь с успехом применяю тот же подход для MS SQL и Sybase.
Меня зовут Дан Хотка (Dan Hotka). Я директор Oracle ACE. Одной из моих привилегий в этой группе является помощь в распространении информации и полезных технических знаний, связанных с СУБД Oracle. Меня хорошо знают после моих 12 (скоро 14) опубликованных книг и буквально сотен статей. Я регулярно пишу в блоге и собираюсь делать это в дальнейшем. Мы даже могли встречаться на одном из событий или встреч группы пользователей. Я регулярно выступаю на эти темы по всему миру.
Я собираюсь поделиться с вами как техническими знаниями про Oracle, так и тем, как эти знания применяются в решениях Embarcadero.
Я скачал себе «большую тройку» продуктов Embarcadero: Rapid Sql, DBArtisan, DB PowerStudio. Сейчас я хотел бы рассказать о первом впечатлении и некоторых приемах работы с планами выполнения запросов в RapidSQL. (Я установил версию 8.6.1)
Я покажу пару приемчиков для планов выполнения запросов в и вокруг Rapid SQL.
Мне нравится инструмент. Конечно, это прекрасный инструмент, если у вас есть разные типы СУБД различных производителей, поскольку этот инструмент поддерживает около дюжины разных СУБД. Единый интерфейс для освоения всех БД! Мои приемчики относятся к Oracle. Но приемы для инструментов Embarcadero должны сработать вне зависимости от того, к какой СУБД вы подключились.
При просмотре планов выполнения я люблю видеть план выполнения и сам запрос одновременно.
Этого легко достигнуть.
Для начала, загрузите свой SQL запрос в окно редактора ISQL (используя кнопку Open), затем включите кнопку Explain Plan (отмечена в красном круге). Кнопка останется активированной.
Запустите запрос на выполнение, и появится закладка Query Plan, заполненная планом выполнения.
Поместите курсор мыши на любой из узлов на диаграмме и появится дополнительная полезная информация, относящаяся к этому шагу выполнения из плана запроса!
По умолчанию, Rapid SQL показывает план выполнения в графическом виде. Я вышел из старого мира оптимизации…. Предпочитаю текстовую версию, поэтому нажимаю правую кнопку мыши в окне с планом и выбираю “View as Text”.
Предпочитаю видеть текст запроса и план одновременно.
Это легко сделать. Видите закладки окон ISQL внизу главного окна? Для начала мы должны настроить Rapid SQL, чтобы он выдавал план в отдельном окне.
Нажмите кнопку Options (левый красный кружок) и затем установите опцию ‘Unattached’ для Result window. Это приведет к созданию двух отдельных закладок внизу Rapid SQL, после запуска запроса на выполнение. Просто протащите немного это окно за закладку и появится прямоугольник, куда можно переместить это окно.
Или можно воспользоваться пунктом Tile windows из главного меню программы
И еще: все это так же работает и в DBArtisan — решении для администраторов баз данных.
- базы данных
- sql
- oracle database
- explain plan
- Rapid SQL
- embarcadero
- embarcadero technologies
- DB Tools
- Блог компании «Embarcadero (Borland)»
- Oracle
- SQL
Описание операций плана выполнения в Oracle
Читает индекс целиком (все строки) в порядке, представленном индексом. В зависимости от различной системной статистики СУБД может выполнять эту операцию, если нужны все строки в порядке индекса, например, из-за соответствующего предложения ORDER BY. Вместо этого оптимизатор может также использовать операцию Index Fast Full Scan и выполнить дополнительную операцию сортировки.
Index Fast Full Scan
Читает индекс целиком (все строки) в порядке, хранящемся на диске. Эта операция обычно выполняется вместо полного сканирования таблицы, если в индексе доступны все необходимые столбцы. Подобно операции TABLE ACCESS FULL, INDEX FAST FULL SCAN может извлечь выгоду из многоблочных операций чтения.
Table Access By Index ROWID
Извлекает строку из таблицы, используя ROWID, полученный из предыдущего поиска по индексу.
Table Access Full
Полное сканирование таблицы. Читает всю таблицу (все строки и столбцы), в порядке, хранящемся на диске. Хотя многоблочные операции чтения значительно повышают скорость сканирования полной таблицы, это все еще одна из самых дорогих операций. Помимо высоких затрат времени ввода-вывода, полное сканирование таблицы должно проверять все строки таблицы, что также занимает значительное количество процессорного времени.
Merge Join
Соединение слиянием объединяет два отсортированных списка. Обе стороны объединения должны быть предварительно отсортированы.
Nested Loops
Соединение вложенными циклами объединяет две таблицы, выбирая результат из одной таблицы и запрашивая другую таблицу для каждой строки из первой. Встречается очень часто. Выполняет довольно эффективное соединение относительно небольших наборов данных. Соединение вложенными циклами не требует сортировки входных данных.
Hash Join
Хеш-соединение загружает записи-кандидаты с одной стороны соединения в хеш-таблицу, которая затем проверяется для каждой строки с другой стороны соединения. Операция используется всегда, когда невозможно применить другие виды соединения: если соединяемые наборы данных достаточно велики и/или наборы данных не упорядочены по столбцам соединения.
Sort Unique
Сортирует строки и устраняет дупликаты.
Hash Unique
Более эффективная реализация алгоритма сортировки и устранения дупликатов с использованием хэш-таблицы. Заменяет операцию Sort Unique в определенных обстоятельствах.
Sort Aggregate
Вычисляет суммарные итоги с использованием агрегатных функций SUM, COUNT, MIN, MAX, AVG и пр.
Sort Order By
Сортирует результат в соответствии с предложением ORDER BY. Эта операция требует больших объемов памяти для материализации промежуточного результата.
Sort Group By
Сортирует набор записей по столбцам GROUP BY и агрегирует отсортированный результат на втором этапе. Эта операция требует больших объемов памяти для материализации промежуточного результата.
Sort Group By Nosort
Агрегирует предварительно отсортированный набор записей в соответствии с предложением GROUP BY. Эта операция не буферизует промежуточный результат.
Hash Group By
Группирует результат, используя хеш-таблицу. Эта операция требует больших объемов памяти для материализации промежуточного набора записей. Вывод не упорядочен каким-либо значимым образом.
Filter
Применяет фильтр к набору строк.
View
Создает промежуточное представление данных.
Count Stopkey
Прерывает выполение операций, когда было выбрано нужное количество строк.
Sort Join
Сортирует набор записей в столбце соединения. Используется в сочетании с операцией Merge Join для выполнения сортировки соединением слияния.
Intersection
Выполняет операцию пересечения между двумя источниками.
Union-All
Выполняет операцию объединения всех записей между двумя таблицами. Дублирующиеся строки не удаляются.
Load As Select
Прямая загрузка с использованием оператора SELECT в качестве источника.
Temp Table Generation/Transformation
Создает/преобразует временную таблицу. Используется в специфичных для Oracle преобразованиях типа Star.