powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему быстрый запрос может стать медленным?
25 сообщений из 41, страница 1 из 2
Почему быстрый запрос может стать медленным?
    #39682121
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, выручайте, вопрос на засыпку, не приходит ответ в голову.
Ситуация: есть job, выполняющийся раз в 30 секунд, который разгребает данные из таблицы, в которую постоянно идет вставка данных. За полминуты в ней накапливается порядка 800-1000 строк. В логе джоба я вижу, что он выполняется около 4-5 секунд.
Процедура в джобе самая обычная - цикл по курсору из таблицы, в которую идет вставка, в цикле какая-то обработка, и insert или update другой таблицы.
Он работает прекрасно целый день, потом (как правило ночью) вдруг основной запрос повисает и сессия просто висит часами на этом запросе. Нет блокировок, нет вставок, апдейтов, ничего нет, просто висит и все.
Если выполнить alter session flush shared_pool - он "просыпается"! За пару секунд дорабатывает а дальше
либо снова работает быстро весь день (это хороший исход), либо зависает снова на следующем запуске джоба.
В этом случае помогает гарантированно следующее:
1. Остановка джоба.
2. В процедуре "косметически" меняем текст основного запроса в курсоре: можно поменять местами столбцы во фразе select, можно алиас у столбца добавить, можно к извлекаемому столбцу дописать +0 например. Т.е. цель - изменить текст запроса, чтобы оракл снова сделал жесткий разбор запроса.
3. Запуск джоба.
После этого гарантировано работает еще день, ночью зависает. Утром джоб останавливаем, возвращаем запрос в состояние предыдущего дня, запускаем - работает день.
Что посоветуете?
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682127
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr_Frost,

Посмотреть планы запросов в тот момент, когда работает хорошо

Посмотреть планы запросов в тот момент, когда работает плохо

Сравнить
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682134
роман23t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и посмотри, какое событие БД у сессии в момент зависания.
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682152
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_Frost,

а ведь можно было для начала и просто статистику пересобрать (с опцией no_invalidate = FALSE) по таблице из основного запроса... ;)
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682156
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина АннаMr_Frost,

а ведь можно было для начала и просто статистику пересобрать (с опцией no_invalidate = FALSE) по таблице из основного запроса... ;) ага, врачи у нас тоже иногда так лечат. Сердце болит? Так вы антибиотики широкого спектра и витамины попейте
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682157
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_Frost,

планов запроса - нет, структуры таблицы - нет, схемы индексации - нет, объема и характера распределения данных в таблице - нет, текста проблемного запроса - нет.
поэтому всё нижесказанное - на правах предположения, что называется - "пальцем в небо".
возможно, ваша проблема - монотонно возрастающие значения в индексированных полях (а-ля ID, X_DATE) и выборки с условием " <монотонно растущее поле>>= <некое значение>.
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682160
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина АннаMr_Frost,

а ведь можно было для начала и просто статистику пересобрать (с опцией no_invalidate = FALSE) по таблице из основного запроса... ;)
Статистика по таблице была собрана 31.07.2018 21:02:03
Зависание началось 01.08.2018 в 01:17:43
В период между сбором статистики и зависанием джоб выполнился огромное число раз, каждый раз за 4-5 секунд
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682166
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_Frost,

вы можете долго спорить, мы можем долго гадать. но для ускорения процесса получения правильного ответа нужно больше конкретики. необходимый минимум озвучен. без него - любые предположения будут не более чем предположениями. по "фотографии" диагноз поставить можно, но, всё же, с анализами шансы на успех выше... а если будут "томограмма" и "ЭКГ" с "рентгеном" и прочие ФГС, то вообще чудесно...
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682176
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина АннаMr_Frost,

планов запроса - нет, структуры таблицы - нет, схемы индексации - нет, объема и характера распределения данных в таблице - нет, текста проблемного запроса - нет.
поэтому всё нижесказанное - на правах предположения, что называется - "пальцем в небо".
возможно, ваша проблема - монотонно возрастающие значения в индексированных полях (а-ля ID, X_DATE) и выборки с условием " <монотонно растущее поле>>= <некое значение>.

Если бы я мог смоделировать ситуацию, я бы конечно все предоставил.
Но мы ее не можем повторить у себя даже, как я вам ее смоделирую?
Это рабочий сервер, проявляется только на нем, на тестовом все ок.
Нам утром нужно все быстро чинить.
Я может быть не очень понятно объяснил, попробую по-другому.
Представьте, что у вас есть запрос, и он очень надолго завис.
Вы его берете, копируете и выполняете в отдельной сессии, например:
select col1, col2 from tab where id = :id
и он отрабатывает скажем за 1 секунду.
вы его переписываете хоть как, неважно, лишь бы хотя бы один символ изменился:
select col1 col1, col2 from tab where id = :id
просто добавили алиас.
Результат - 0,001 сек.
Второй результат - это как раз та скорость, с которой он и работал до слома
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682184
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_FrostНет блокировок, нет вставок, апдейтов, ничего нет, просто висит и все.Ты не знаешь, что такое ожидания и как их смотреть?
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682186
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_Frost,

о причинах "тормозов" вы сами себе и ответили - "съезжает" план выполнения запроса. если заставить сервер построить новый план - проблема исчезает.

возвращаясь к вопросу из стартового поста: если вы знаете "хороший" и "быстрый" план для запроса - можно "закрепить" его каким-нибудь доступным в вашей версии оракла способом (благо, в свежих версиях их больше одного).

но для того, чтобы понять причины такого поведения и устранить их - как-то придется получить чуть больше информации, чем вы уже имеете...
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682193
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина АннаMr_Frost,

о причинах "тормозов" вы сами себе и ответили - "съезжает" план выполнения запроса. если заставить сервер построить новый план - проблема исчезает.
это понятно, что съезжает, вопрос был в другом

Щукина Аннавозвращаясь к вопросу из стартового поста: если вы знаете "хороший" и "быстрый" план для запроса - можно "закрепить" его каким-нибудь доступным в вашей версии оракла способом (благо, в свежих версиях их больше одного).
Анна, еще раз. Запрос номер 1, который работает сегодня, он хороший. Будет работать отлично до ночи. Ночью ломается.
Меняю в нем любой символ, алиас, что угодно, превращаю его в Запрос2. Он работает один день до следующей ночи.
Утром я не делаю Запрос3, я возвращаю Запрос2 в Запрос1, он снова хороший, до слома.
И так далее, всегда по кругу. Текст запроса живет через один день.

Щукина Аннано для того, чтобы понять причины такого поведения и устранить их - как-то придется получить чуть больше информации, чем вы уже имеете...
Если ночью повиснет - утром скину планы разбора Запроса1 и Запроса2
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682199
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Аннао причинах "тормозов" вы сами себе и ответили - "съезжает" план выполнения запросаОй не факт.
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682205
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_Frost...
еще раз
...
я правильно понимаю: у вас "который год в подполе происходит подземный стук", а нам предлагается объяснить "как он происходит"?
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682211
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_Frostэто понятно, что съезжает, вопрос был в другомВопрос в причине plan flip?
Может быть начиная от cardinality feedback/adaptive cursor sharing до банального "устаревания" из библиотечного кеша и парсинга с новыми биндами. См v$sql_shared_cursor.

Также различные гадания возможны по
Код: plaintext
1.
2.
select sql_id, loaded_versions, loads, first_load_time, invalidations, parse_calls, optimizer_env_hash_value, child_number, last_load_time, last_active_time 
from v$sql
where sql_Id = ...

Причины смены плана надо расследовать оперативно потому что вьюха v$sql_shared_cursor НЕ сэмплится в ash.

Когда кажется, что просто висит и всё - смотри в v$active_session_history.
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682235
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, запрос повис. Готов выполнять любые ваши указания
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682238
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Статус сессии - активна.
Событие - async descriptor resize
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682244
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видно, что много раз выполнялся быстро, потом дважды выполнялся по 2 с лишним минуты, а сейчас уже более 10 минут висит.
Если сейчас ничего не делать - он скорее всего и до утра не выполнится.
Если я сейчас сделаю flush shared_pool - выполнится. Но дальше не предсказуеио. Либо снова повиснет, либо будет работать хорошо
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682247
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прирост в таблицу, из которой делается запрос курсора, не изменился. За полминуты прибавляется по 700-800 строк.
Т.е. не происходит ничего необычного. Объем данных для курсора не увеличился.
Активных сессий на сервере нет. Блокировок нет.
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682257
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, сегодня уже буду недоступен, все запросы смогу выполнить только завтра.
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682299
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr_FrostПрирост в таблицу, из которой делается запрос курсора, не изменился. За полминуты прибавляется по 700-800 строк.
Т.е. не происходит ничего необычного. Объем данных для курсора не увеличился.
Активных сессий на сервере нет. Блокировок нет.

Еще раз скажу - вы смотрите куда угодно, но только не туда куда, вас просят посмотреть. Никто вас не спрашивал про строки, объем данных или другие сессии. Это, разумеется, может оказаться важным, но с меньшей вероятностью чем другие факторы.

Самая банальная и вероятная причина такого поведения - это съехавший план. Вас уже куча народу попросило сравнить планы запросов в "хорошем" и в "плохом" случае, но вы этого так и не сделали - и делаете все что угодно кроме этого. Пока вы этого не сделаете - имхо гадать над более изысканными и редкими случаями подобного поведения - бессмысленно, разве что упражняться в остроумии и в том у кого была богаче практика.
На случай если вы не делаете этого по той простой причине, что не знаете как сравнить планы - сообщу.
Если у вас куплена лицензия, есть вьюха dba_hist_active_sess_history. В ней хранится информация за последние дни, в том числе вы можете посмотреть что же было предыдущими ночами. Находите в ней соответсвующую сессию по session_id и serial# ( номер сессии у джобов pl/sql developer вам показывает ) . sql_id - будет ваш идентификатор ваешго запроса (он как раз меняется если поменять хоть как-то текст запроса и не меняется если его не менять), sql_plan_hash_value - ваш план.
Смотрите одинаковый sql_plan_hash_value у двух запросов или нет - после чего можно уже разбирать почему план слетел если это произошло. Любые гадания на этом форуме возможны только если вы прикрепите сюда старый и новый план с помощью функции dbms_xplan.display_awr ( или display_cursor ).

Если же план одинаковый в обоих случаях, то просто саггрегируйте строки соответствующие долгому выполнению по нескольким полям чтобы узнать что конкретно сессия делала. А именно - саггрегируйте последовательно по sql_plan_line_id, по event, по object_id, по blocking_session_id чтобы понять на какой конкретно строке плана застряли, и что в этот момент делали.
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682350
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valergrad
Еще раз скажу - вы смотрите куда угодно, но только не туда куда, вас просят посмотреть.

Самая банальная и вероятная причина такого поведения - это съехавший план.

Если у вас куплена лицензия, есть вьюха dba_hist_active_sess_history.



Готов я смотреть куда просят, идей просто нет, как это сделать.
Запрос из dba_hist_active_sess_history ничего не возвращает, куплена у заказчика лицензия или нет - не в моей компетенции узнавать.

С утра разработчик выполнил flush shared_pool, и поменял запрос в процедуре. Поэтому могу сделать наоборот.
Сниму план сейчас, когда она работает быстро, и сниму план, когда зависнет.
Так пойдет?
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682354
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
План на сейчас, когда все работает
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682360
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам же ответили - смотрите latches
...
Рейтинг: 0 / 0
Почему быстрый запрос может стать медленным?
    #39682380
Mr_Frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашли второй запрос с похожим поведением, вот он сейчас висит в активных сессиях.
Файл 1.txt получен путем копирования текста этого запроса и выполнением его explain plan в новой сессии.
Файл 2.txt - explain plan висящего sql_id.
Разница огромна, с чем связана - мыслей нет(
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему быстрый запрос может стать медленным?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]