@heorhilisok

Хаотичное ухудшение производительности запроса — как определить причину?

Добрый день.

БД Oracle 19.3.0

Есть pl/sql процедура, содержащая в себе sql запросы, а так же dml инструкции.
В совершенно рандомное, не привязанное ни к чему время данная процедура начинает выполняться медленнее (в 5-6 раз). Пытался определить причины - в какой-то момент нашел, что в момент тупняков выполняется план с высокой стоимостью, как будто оптимизатор выбирает некорректно план. Что помогало (в разное время помогало что-то одно):

-пересобрать статистику по таблицам, к которым выполняется обращение в процедуре
-поменять режим работы оптимизатора (ставил 11.2.0.4 - периодически помогало, сейчас он и стоит)
-в самые трудные случаи, где время выполнения было уже в 10 раз больше чем ожидаемое - перезапуск бд (установлено все на linux)

Я потерял сон и аппетит, уже не знаю куда и как копать чтобы понять, в чем проблема.
Если есть какие-то рекомендации - буду очень признателен.

P.S. проблема обнаруживается пока что у одного клиента из 15. У остальных точно такой же код, и там все работает стабильно.
  • Вопрос задан
  • 173 просмотра
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
У Оракла есть пути стабилизации планов. Если ты точно знаешь что текущий план подходит то его можно
зафиксировать для данного SQL_ID. Последний раз я этим занимался в Oracle 11g и как сейчас - не знаю
но наверное этот API сохранился.
Ответ написан
Комментировать
@rPman
dml или ddl? обычно когда имеют в виду dml то говорят просто sql.

запросы create/alter/drop могут менять или сбрасывать собираемую статистику, которая в свою очередь влияет на построение плана и итоговую скорость выполнения запросов

Так же возможно каскадный запуск перекомпиляции связанных объектов в фоне (если я верно понимаю как это работает в oracle) что банально отнимает процессорное время и соответственно замедляет выполнение запросов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы