Выбор в Oracle выполняется быстро только при первом выполнении

#oracle #performance #select

#Oracle #Производительность #выберите

Вопрос:

У меня есть запрос по представлению. При первом выполнении время запроса составляет 3 секунды. При втором выполнении запрос не возвращается. Я протестировал этот запрос в другой базе данных, появились те же результаты. Я изменил запрос и использовал подсказку /* INDEX (h xdst_pst_e_index)*/ . В одной из двух баз данных запрос теперь выполняется быстро при каждом выполнении. Но в другом быстр только первое выполнение. Есть еще одно странное поведение:

  • Создайте выбор
  • выполните его (время выполнения 3 секунды)
  • выполните его снова (запрос не возвращается)
  • измените выбор (добавьте пробел, я не меняю представление)
  • выполните его (время выполнения 3 секунды)
  • выполните его снова (запрос не возвращается)

База данных с таким поведением — Oracle 11.2.0.4.0, база данных с быстрым выполнением — 11.2.0.2.0.

Есть идеи? Я перестроил индекс, и статистика обновлена. План объяснения всегда один и тот же.

Комментарии:

1. проверьте вывод select * from table(dbms_xplan.display_cursor('your_sql_id', null)); . Симптомы типичны для обратной связи по мощности

2. Да, пожалуйста, поделитесь планом из обеих баз данных. Вы перестроили индекс и обновили статистику в обеих базах данных?

3. Спасибо за отзыв. Я изменил параметр optimizer_use_feedback в своем сеансе, и оператор выполняется 3 секунды при каждом выполнении. Я подумал о подсказке в моем заявлении для управления этим параметром, но параметр базы данных optimizier_ignore_hints имеет значение true в этой установке. Возможно, я могу изменить эти параметры для всей системы, но я понятия не имею, что происходит с другими операторами. Возможно, этот быстрый, а другие становятся медленными.

4. Рассмотрите возможность создания расширенной статистики