Запрос создает другой план выполнения с сервера приложений, чем жаба
В качестве предисловия я видел дюжину похожих SO Q/As, и они выглядят немного по-другому (разные серверы, разные параметры и т. Д.).
Основная проблема
Вот мой вопрос, мы запускаем оператор select с веб-сервера для нашего экземпляра exadata 11g. Это довольно простой запрос (это количество). Когда он выполняется с веб-сервера, это в среднем занимает в 150 раз больше времени, чем если бы мы выполняли точно такой же запрос от toad к тому же экземпляру базы данных. Время от времени запрос будет так же быстро запускаться с веб-сервера.
Дополнительная информация
Когда с веб-сервера происходит сбой, план выполнения значительно отличается, включая полное сканирование таблицы. Мы можем перейти к жабе, выполнить запрос и получить ответ 300 мс. Вернитесь к веб-серверу и получите 45-секундный ответ (мы смотрим через инструменты производительности оракула, новую реликвию).
Мы также попытались войти в систему под учетной записью оракула веб-пользователя, и производительность работает с правильным планом выполнения. Так что я предположил, что это не связано с пользователем (но я не совсем понимаю, есть ли что-то еще, на что я мог бы взглянуть здесь).
Кроме того, мы включили / отключили параллельный запрос и не увидели никакой разницы, аналогично в жабе. Мы не можем заставить его выйти за пределы веб-сервера.
Сам веб-сервер представляет собой iis, использующий транзакцию чтения с фиксацией (которую мы смоделировали в toad, toad по-прежнему выполняется нормально).
Степень на столах нормальная (я имею в виду, вы ожидаете, что это будет сосать как с веб-сервера, так и с жабой, если это было проблемой).
Я не думаю, что это может быть драйвером (не так ли?), Поскольку запрос уже находится на сервере базы данных, и oracle решает план выполнения независимо от того, кто его отправляет, и он находится в узле exadata, который вращается при полном сканировании таблицы.
Поэтому я предполагаю, что мой вопрос заключается в том, где еще я могу посмотреть, когда я получаю два разных плана выполнения для одного и того же запроса, с одинаковыми параметрами, для одного и того же пользователя, которые выполняются одновременно (или чередуются) с использованием разных клиентов?
1 ответ
Видел это раньше. Мой запрос выполнялся с двух разных компьютеров и получил впечатляющее время отклика на выполнение. Как и у вас, один план выполнения собрал индекс, а другой использовал полное сканирование таблицы. В моем случае причина была связана с кардинальной обратной связью. Выключите и исправьте эту проблему. Кстати, какую версию 11g вы используете? Чтобы получить план выполнения вашего быстрого запроса, добавьте /*+ monitor */ hint, чтобы ваш запрос отображался в SQL Monitor.