Обложка канала

Oracle Developer👨🏻‍💻

Все о разработке в СУБД "Oracle" SQL, PL/SQL, оптимизация, архитектура, сертификации и многое другое.

Oracle Developer👨🏻‍💻

4 года назад
Открыть в
Задача о трансформации запроса Постановку смотрите в посте вторника. Немного теоретической части Любой запрос при hard parse проходит через стадию “оптимизации” для построения плана запроса. Одним из этапов оптимизации является трансформация запроса. Например, запрос
select * from tab1 where col1 = … or col2 = … 
при определенных условиях будет преобразован в запрос вида:
select * from tab1 where col1 = …
union all
select * from tab1 where col2 = … and col1 not in ...

Первоначальный запрос, в конечном итоге, может отличаться от того, что будет выполняться. В документации отражены некоторые возможные трансформации. Возвращаясь к нашему примеру Можно предположить, что таблица departments была исключена из запроса на этапе трансформации. Однако, хочется знать точней. 1️⃣ В плане запроса в блоке Outline Data есть намек, на то, что таблица была исключена из JOIN - ELIMINATE_JOIN(@"SEL$1" "D"@"SEL$1") 2️⃣ Если хочется копнуть глубже. Можно выполнить трассировку оптимизатора и посмотреть через какие этапы прошел запрос при построении плана. В результате будет файл с данными на сервере СУБД. Сформировать такой файл можно разными способами. Приведу только один (запрос должен выполняться впервые):
alter session set events '10053 trace name context forever';
alter session set tracefile_identifier='PLAN_TRC_EXAMPLE1';

select t.first_name
  from hr.employees t
  join hr.departments d on d.department_id = t.department_id
 where t.first_name like 'Alex%';

alter session set events '10053 trace name context off';

В результате выполнения в каталоге на сервере будет создан trc-файл с меткой PLAN_TRC_EXAMPLE1. Заглянув в секцию с преобразованиями, можно заметить интересную картину (см. скриншот выше ⬆️). ⚠️ для запросов, которые уже выполнялись используйте - dbms_sqldiag.dump_trace. На курсе по оптимизации будем разбирать подобные вопросы 🎓 Обсудить в чатике #решениезадачи #оптимизация Oracle Developer