|
|
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Коллеги, выручайте, вопрос на засыпку, не приходит ответ в голову. Ситуация: есть job, выполняющийся раз в 30 секунд, который разгребает данные из таблицы, в которую постоянно идет вставка данных. За полминуты в ней накапливается порядка 800-1000 строк. В логе джоба я вижу, что он выполняется около 4-5 секунд. Процедура в джобе самая обычная - цикл по курсору из таблицы, в которую идет вставка, в цикле какая-то обработка, и insert или update другой таблицы. Он работает прекрасно целый день, потом (как правило ночью) вдруг основной запрос повисает и сессия просто висит часами на этом запросе. Нет блокировок, нет вставок, апдейтов, ничего нет, просто висит и все. Если выполнить alter session flush shared_pool - он "просыпается"! За пару секунд дорабатывает а дальше либо снова работает быстро весь день (это хороший исход), либо зависает снова на следующем запуске джоба. В этом случае помогает гарантированно следующее: 1. Остановка джоба. 2. В процедуре "косметически" меняем текст основного запроса в курсоре: можно поменять местами столбцы во фразе select, можно алиас у столбца добавить, можно к извлекаемому столбцу дописать +0 например. Т.е. цель - изменить текст запроса, чтобы оракл снова сделал жесткий разбор запроса. 3. Запуск джоба. После этого гарантировано работает еще день, ночью зависает. Утром джоб останавливаем, возвращаем запрос в состояние предыдущего дня, запускаем - работает день. Что посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 16:27 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Mr_Frost, Посмотреть планы запросов в тот момент, когда работает хорошо Посмотреть планы запросов в тот момент, когда работает плохо Сравнить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 16:36 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
и посмотри, какое событие БД у сессии в момент зависания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 16:57 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Mr_Frost, а ведь можно было для начала и просто статистику пересобрать (с опцией no_invalidate = FALSE) по таблице из основного запроса... ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 17:28 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Щукина АннаMr_Frost, а ведь можно было для начала и просто статистику пересобрать (с опцией no_invalidate = FALSE) по таблице из основного запроса... ;) ага, врачи у нас тоже иногда так лечат. Сердце болит? Так вы антибиотики широкого спектра и витамины попейте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 17:35 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Mr_Frost, планов запроса - нет, структуры таблицы - нет, схемы индексации - нет, объема и характера распределения данных в таблице - нет, текста проблемного запроса - нет. поэтому всё нижесказанное - на правах предположения, что называется - "пальцем в небо". возможно, ваша проблема - монотонно возрастающие значения в индексированных полях (а-ля ID, X_DATE) и выборки с условием " <монотонно растущее поле>>= <некое значение>. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 17:36 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Щукина АннаMr_Frost, а ведь можно было для начала и просто статистику пересобрать (с опцией no_invalidate = FALSE) по таблице из основного запроса... ;) Статистика по таблице была собрана 31.07.2018 21:02:03 Зависание началось 01.08.2018 в 01:17:43 В период между сбором статистики и зависанием джоб выполнился огромное число раз, каждый раз за 4-5 секунд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 17:43 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Mr_Frost, вы можете долго спорить, мы можем долго гадать. но для ускорения процесса получения правильного ответа нужно больше конкретики. необходимый минимум озвучен. без него - любые предположения будут не более чем предположениями. по "фотографии" диагноз поставить можно, но, всё же, с анализами шансы на успех выше... а если будут "томограмма" и "ЭКГ" с "рентгеном" и прочие ФГС, то вообще чудесно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 17:53 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Щукина Анна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 сек. Второй результат - это как раз та скорость, с которой он и работал до слома ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 18:06 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Mr_FrostНет блокировок, нет вставок, апдейтов, ничего нет, просто висит и все.Ты не знаешь, что такое ожидания и как их смотреть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 18:18 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Mr_Frost, о причинах "тормозов" вы сами себе и ответили - "съезжает" план выполнения запроса. если заставить сервер построить новый план - проблема исчезает. возвращаясь к вопросу из стартового поста: если вы знаете "хороший" и "быстрый" план для запроса - можно "закрепить" его каким-нибудь доступным в вашей версии оракла способом (благо, в свежих версиях их больше одного). но для того, чтобы понять причины такого поведения и устранить их - как-то придется получить чуть больше информации, чем вы уже имеете... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 18:20 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Щукина АннаMr_Frost, о причинах "тормозов" вы сами себе и ответили - "съезжает" план выполнения запроса. если заставить сервер построить новый план - проблема исчезает. это понятно, что съезжает, вопрос был в другом Щукина Аннавозвращаясь к вопросу из стартового поста: если вы знаете "хороший" и "быстрый" план для запроса - можно "закрепить" его каким-нибудь доступным в вашей версии оракла способом (благо, в свежих версиях их больше одного). Анна, еще раз. Запрос номер 1, который работает сегодня, он хороший. Будет работать отлично до ночи. Ночью ломается. Меняю в нем любой символ, алиас, что угодно, превращаю его в Запрос2. Он работает один день до следующей ночи. Утром я не делаю Запрос3, я возвращаю Запрос2 в Запрос1, он снова хороший, до слома. И так далее, всегда по кругу. Текст запроса живет через один день. Щукина Аннано для того, чтобы понять причины такого поведения и устранить их - как-то придется получить чуть больше информации, чем вы уже имеете... Если ночью повиснет - утром скину планы разбора Запроса1 и Запроса2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 18:27 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Щукина Аннао причинах "тормозов" вы сами себе и ответили - "съезжает" план выполнения запросаОй не факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 18:38 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Mr_Frost... еще раз ... я правильно понимаю: у вас "который год в подполе происходит подземный стук", а нам предлагается объяснить "как он происходит"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 19:10 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Mr_Frostэто понятно, что съезжает, вопрос был в другомВопрос в причине plan flip? Может быть начиная от cardinality feedback/adaptive cursor sharing до банального "устаревания" из библиотечного кеша и парсинга с новыми биндами. См v$sql_shared_cursor. Также различные гадания возможны по Код: plaintext 1. 2. Причины смены плана надо расследовать оперативно потому что вьюха v$sql_shared_cursor НЕ сэмплится в ash. Когда кажется, что просто висит и всё - смотри в v$active_session_history. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 19:34 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Все, запрос повис. Готов выполнять любые ваши указания ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 20:32 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Статус сессии - активна. Событие - async descriptor resize ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 20:34 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Видно, что много раз выполнялся быстро, потом дважды выполнялся по 2 с лишним минуты, а сейчас уже более 10 минут висит. Если сейчас ничего не делать - он скорее всего и до утра не выполнится. Если я сейчас сделаю flush shared_pool - выполнится. Но дальше не предсказуеио. Либо снова повиснет, либо будет работать хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 20:43 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Прирост в таблицу, из которой делается запрос курсора, не изменился. За полминуты прибавляется по 700-800 строк. Т.е. не происходит ничего необычного. Объем данных для курсора не увеличился. Активных сессий на сервере нет. Блокировок нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 20:47 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, сегодня уже буду недоступен, все запросы смогу выполнить только завтра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2018, 21:12 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
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 чтобы понять на какой конкретно строке плана застряли, и что в этот момент делали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 03:16 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Valergrad Еще раз скажу - вы смотрите куда угодно, но только не туда куда, вас просят посмотреть. Самая банальная и вероятная причина такого поведения - это съехавший план. Если у вас куплена лицензия, есть вьюха dba_hist_active_sess_history. Готов я смотреть куда просят, идей просто нет, как это сделать. Запрос из dba_hist_active_sess_history ничего не возвращает, куплена у заказчика лицензия или нет - не в моей компетенции узнавать. С утра разработчик выполнил flush shared_pool, и поменял запрос в процедуре. Поэтому могу сделать наоборот. Сниму план сейчас, когда она работает быстро, и сниму план, когда зависнет. Так пойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 08:46 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
План на сейчас, когда все работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 08:54 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Вам же ответили - смотрите latches ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 09:02 |
|
||
|
Почему быстрый запрос может стать медленным?
|
|||
|---|---|---|---|
|
#18+
Нашли второй запрос с похожим поведением, вот он сейчас висит в активных сессиях. Файл 1.txt получен путем копирования текста этого запроса и выполнением его explain plan в новой сессии. Файл 2.txt - explain plan висящего sql_id. Разница огромна, с чем связана - мыслей нет( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 09:47 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39682211&tid=1883659]: |
0ms |
get settings: |
6ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
217ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 566ms |

| 0 / 0 |
