Запросы очень медленные после нескольких исполнений

Я новичок в оракуле, и теперь я становлюсь сумасшедшим со следующей ситуацией. Я работаю над базой данных оракула 11g, и много раз случается, что я запускаю запрос с помощью sql-разработчика, и это выполняется правильно через 5/6 секунд, тогда как другие используют один и тот же запрос за 300/400 секунд для выполнения. Есть некоторые инструменты для отладки того, что происходит, когда запрос использует 300/400 секунд?

Обновление 1  Это мой скриншот разработчика sql, проблема в том, что проблема заключается в прямом пути чтения

enter image description here

Обновление 2 отчет

Обновление 3 report2

Любое предложение?

Ответ 1

Попробуйте установить трассировку. Пользователь, независимо от того, какой пользователь испытывает задержку Как sys:

GRANT ALTER SESSION TO USER;

Как пользователь выполняет трассировку:

ALTER SESSION SET EVENTS '10046 trace name context forever, level 8';
ALTER SESSION SET TRACEFILE_IDENTIFIER = "MY_TEST_SESSION";

Произведите ошибку/проблему, затем как пользовательское тестирование:

ALTER SESSION SET EVENTS '10046 trace name context off';

Как система узнает, где хранятся файлы трассировки:

show parameter background_dump_dest;

Перейдите в этот каталог и найдите файлы .trc/.trm, содержащие MY_TEST_SESSION. Например, ORCL_ora_29772_MY_TEST_SESSION.trc.
После этого tkprof эти файлы. В linux:

tkprof ORCL_ora_29772_MY_TEST_SESSION.trc output=ORCL_ora_29772_MY_TEST_SESSION.tkprof explain=user/password sys=no

Прочитайте файл tkprof, и он покажет вам время ожидания для данных операторов.
Для получения дополнительной информации о TKPROF читайте this. Для получения дополнительной информации о включении/отключении трассировки читайте this.

Ответ 2

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

Сравните эту единственную строку кода с шагами трассировки в другом ответе. Кроме того, вывод выглядит намного приятнее.

select dbms_sqltune.report_sql_monitor(sql_id => 'your sql id', type => 'text') from dual;

Почти никогда не нужно использовать трассировку в 11g и выше.

Ответ 3

Такое поведение может быть вызвано ошибками/проблемами обратной связи по мощности в 11gR2. У меня была аналогичная проблема. Вы можете проверить, действительно ли это происходит, отключив эту функцию с помощью _optimizer_use_feedback=false

Также попробуйте применить последние обновления.