Запросы очень медленные после нескольких исполнений
Я новичок в оракуле, и теперь я становлюсь сумасшедшим со следующей ситуацией. Я работаю над базой данных оракула 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
Также попробуйте применить последние обновления.