Ещё один интересный случай, связанный с длительной фазой разбора (hard parsing) запроса в Oracle 10.2.0.3
В отличие от предыдущего случая (Медленный разбор SQL запроса (long parse time)), когда много времени тратилось на перебор многочисленных комбинаций соединений таблиц (пермутаций) уже на этапе оптимизации и зависело от лимита кол-ва таких перестановок (параметр _optimizer_max_permutations) или выбора используемого оптимизатора (CBO или RBO), на этот раз при первом выполнении (и, соответственно, выполнении hard parsing) запроса из 118 таблиц:
SQL> select operation, count(*) from v$sql_plan
2 where (plan_hash_value, child_number) =
3 (select plan_hash_value from v$sql where sql_text like 'SELECT /* MY_LONG_QUERY */%' and child_number = 0)
4 and operation like 'TABLE%'
5 group by operation
6 /
OPERATION COUNT(*)
------------ --------
TABLE ACCESS 118
кроме табличной комбинаторики, значительное время тратилось на этапе трансформации запроса (query transformation), предшествующей оптимизации:
-----------------------------------------------------------------------------
| Query Text & Parameters Parsing |
| V |
| Query Transformation | <-- описываемый случай "тормозил" и в этом месте
| (incl.Cost-Based Query Transformation - CBQT) |
| V |
| Query Optimization |
| V |
| Cost-Based Optimization < > Rule-Based Optimization |
|(with join order permutations) (with simplified table order choice?)| <-- тут "притормаживал" случай, описанный ранее
-----------------------------------------------------------------------------
(далее…)