Выполняю сложный запрос по схеме eBS R12 на базе Oracle DB 11G:Почему SQL-запрос может выполняться каждый раз больше времени при последующих запусках?
Для первого запуска требуется 4 секунды. Если я запустил его снова, это займет 9, следующие 30 и т. Д.
Если я добавлю «и 1 = 1», это займет 4 секунды, затем 9, 30 и так далее.
Быстрое действие заключается в том, что мы добавили случайную сгенерированную «и sometstring = somestring», и теперь результаты всегда находятся в 4 секунды.
Я никогда не сталкивался с вопросом, который будет вести себя таким образом (он должен быть противоположным или не изменять сигенификацию между исполнением). Мы протестировали его на 2 копии одного и того же БД, такое же поведение.
Как отладить его? И какая внутренняя механика может запутаться?
UPDATE 1:
EXPLAIN PLAN FOR
(my query);
SELECT * FROM table(DBMS_XPLAN.DISPLAY);
точно так же, перед началом работы, что это для последующих. см. http://pastebin.com/dMsXmhtG
Прочитайте файлы трассировки оракула. – OldProgrammer
@OldProgrammer Очень немногие разработчики имеют доступ к операционной системе, делая трассировку трудной или невозможной для их использования. Даже если бы у них был доступ, было бы не так удобно, как использовать что-то вроде «объяснить план для ...» и «выбирать» из таблицы (dbms_xplan.display); ». Трассировка редко бывает полезной в последних версиях Oracle. –