|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
Oracle Exadata 11.2.0.4, RAC на 4 ноды. Наблюдаю в базе что некие процессы периодически ( нестабильно) работают медленней чем должны. Анализ показывает, что замедляют их некоторые запросы - например, некий запрос работает 30 минут вместо 30 секунд. Сравниваю планы и данные в этих запросах ( быстрое выполнение vs медленное ) - планы совершенно идентичны, outline совпадает до строчки, распределение данных тоже практически не меняется изо дня в день. По awr тоже непонятно в чем проблема. Скажем анализ dba_hist_active_sess_history сгруппированный по event для плохого случая дает такую картину: eventcount(*)ON CPU112reliable message64enq: RO - fast object reuse54cell smart table scan15enq: PS - contention2PX Deq: Signal ACK RSG2latch free1PX Deq: Signal ACK EXT1log file switch completion1library cache: mutex X1PX qref latch1 Не так много удалось найти по reliable message, гугл про enq: RO - fast object reuse говорит что-то о транкейтах и темповых таблицах, но это insert as select и ни одной темповой таблицы в запросе нет. А вот тот же запрос с тем же планом на тех же данных но хорошее выполнение: eventcount(*)/10ON CPU5.7direct path read temp0.5cursor: pin S wait on X0.3cell smart table scan0.3enq: RO - fast object reuse0.1 ( цифры разделил на 10, т.к. второй раз цифры из gv$active_session_history, а первый - из db_hist_active_sess_hist ). Сравнивая dba_hist_sqlstat для хорошего и плохого выполнения вижу что цифры похожи ( например , buffer_gets, физические чтения, количество прочитанных данных, показатели смартскана т.п. ) и только один показатель удивляет. В то время как для "хорошего" выполнения мы имеем на 1 execution 9 parse_calls ( потому что DOP= 4, 8 дочерних сессий + 1 координатор ), то у "плохого" выполнения эти цифры составляют тысячи и десятки тысяч на 1 execution. Например такой запрос: Код: plsql 1. 2. 3.
Выдает нам такую картину: parse_callsexecutionsinvalidationssql_id48366167ryv0syzqb9kp4540410avc1dqza7pz7d4401616f66thvqhb2nvt374011567n6pbjpphfnm23812143ac0bmwc2uj282005610077fy92upp8d519744102znx8jhabd5r0 И вот это дико непонятно. Никто не сталкивался с таким? Доступа к металинку у меня пока нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 20:44 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
Valergrad, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
по тормозящему запросу посмотреть можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 11:53 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
что в v$sql_shared_cursor? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 14:44 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
Valergrad, Покажи что есть в ash по любому такому sqlid за проблемный период. Без группировок. Тупо в экселе выложи все строки. Что там в sql in parse. Меняются ли sql exec id? Сколько разных сессий там? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 14:56 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
Сталкивался. В 18 версии Оракл стал более прозрачным и хреначит в логах сообщения типа WARNING: too many parse errors, count=800 SQL hash=0xb1444754 PARSE ERROR: ospid=974, error=12872 for statement Включайте трассировку и поймаете ошибку, она как правило связана с динамическим сбором статистики во время парсинга ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 16:10 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
DBA, DВАВ 18 версии Оракл стал более прозрачным и хреначит в логах сообщения типа WARNING: too many parse errors, count=800 SQL hash=0xb1444754 PARSE ERROR: ospid=974, error=12872 for statement Добавлю, что это с 12.2 12.2 Generates Trace Files with Error 'PARSE ERROR: ospid=<ospid>, error=918 for Statement' (Doc ID 2436261.1) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 16:29 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
xtenderValergrad, Что там в sql in parse. Меняются ли sql exec id? Не меняются, конечно, иначе бы я понял что дело в каких-то инвалидациях курсоров. xtenderValergrad, Сколько разных сессий там? Как обычно, координатор + дочерние. В плане довольно много p->s, так что частенько остается только координатор. xtenderValergrad, Покажи что есть в ash по любому такому sqlid за проблемный период. Без группировок. Тупо в экселе выложи все строки. Ок. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2019, 00:55 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
DВАСталкивался. Включайте трассировку и поймаете ошибку, она как правило связана с динамическим сбором статистики во время парсинга Немного не понял. Речь о том, что для парса оракл собирает какую-то статистику? И фейлится во время сбора этой статистики, что засчитывается как парс? ( Dynamic_sampling в плане не было, на всякий случай). Трассировку будет трудно включить - т.к. происходит это только периодически, скажем, один ворклоу из 10. Заранее не угадаешь - пройдет или нет. И проблемным каждый раз оказывается разный запрос. Включить же трассу на весь воркфлоу - это убить весь прод. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2019, 01:00 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
На остальные вопросы отвечу в понедельник как будет доступ к рабочему компу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2019, 01:02 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
feagorValergrad, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
по тормозящему запросу посмотреть можно? Этот запрос ничего не возвращает. Дело в том, что executions_delta по нему равен нулю ( хотя он совершенно точно выполнился и вставил данные ). В executions_total = 1. Если же убрать фильтр по executions_delta, то получается так: BEGIN_INTERVAL_TIMEPLAN_HASH_VALUESQL_PROFILEEXECSELA_PER_EXEC_SECPX_PER_EXECROWS_PER_EXECFETCHES_PER_EXEC22-AUG-19 13.00.15.43240311011520791.169585810022-AUG-19 14.00.19.08040311011520489.865925000 Полный бред, потому что delta/total почему-то показывают противоречивую информацию по этому запросу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2019, 11:57 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
xtenderValergrad, Покажи что есть в ash по любому такому sqlid за проблемный период. Без группировок. Тупо в экселе выложи все строки. Что там в sql in parse. Меняются ли sql exec id? Сколько разных сессий там? Выложил для Xtenderа и может еще кого полный лог dba_hist_active_sess_history. Возможно, сможете что-то увидеть в нем, наводящее на мысли. Запрос выполнялся 45 минут с таким же планом, с которым среднее время - 25 секунд. ( только поля dbid, program, module, action, machine занулил на всякий случай, а чтобы влезло в 150кб убрал session_type = 'FOREGROUND' для всех) P.S. Пока выкладывал обнаружил очень странное поведение в sql_child_number. sql_child_number не только постоянно плавает, но еще и иногда равен -1. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2019, 12:58 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
prepared cursors? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2019, 14:05 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
Valergrad, Согласно документу MOS, Вам рекомендуется обновить jdbc до 12.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2019, 14:56 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
Vadim LejninValergrad, Согласно документу MOS, Вам рекомендуется обновить jdbc до 12.2 Боюсь, я не понял, какой документ, и почему jdbc? Как джава здесь учавствует? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2019, 15:31 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
Valergrad, видно слейвы в "IN PARSE", но из AWR все-таки слишком мало информации, хотя бы из ASH бы. Видно что было 3 чайлда: часть вместе с координатором получила 0, следующие 2, и последние 4. Желательно протрейсить с _px_trace и снаппером подеровским со статистиками, и хотя бы отчет sqld360 по этому sql_id. И покажи, что в Код: plsql 1. 2.
Melkomyagkii_newbiчто в v$sql_shared_cursor? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 12:45 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 19:32 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
Melkomyagkii_newbiНе похоже на https://iusoltsev.wordpress.com/2019/07/27/long-long-parse/#more-7585 ? Да не очень, там один длительный парс. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 19:58 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
ValergradMelkomyagkii_newbiНе похоже на https://iusoltsev.wordpress.com/2019/07/27/long-long-parse/#more-7585 ? Да не очень, там один длительный парс. тоже об этом подумал, но он там не приводит dba_hist_sqlstat, вдруг она с ума сошла и так врет при таком.. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 23:57 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
Valergrad, Для начала стоило бы проверить, а не работали ли другие слейвы на другой ноде (child курсоры 1,3) и не была ли какая-либо из этих нод перегружена, не было ли px downgrade. Ну и вообще план показать полный из авр, с other_xml из DBA_HIST_SQL_PLAN ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 01:00 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
Valergrad, ValergradНе так много удалось найти по reliable message, гугл про enq: RO - fast object reuse говорит что-то о транкейтах и темповых таблицах, но это insert as select и ни одной темповой таблицы в запросе нет. Стоит проверить два документа: 1. Performance Issues With Parallel Queries And TEMP TABLE TRANSFORMATION (Doc ID 1633759.1) Применим при наличии Cursor-Duration Temp Table (TEMP TABLE TRANSFORMATION в плане). Т.к. в приведенном дампе ASH подобных операций не попало и TEMP_SPACE_ALLOCATED было малым, это скорее следующее: 2. Bug 21422580 - DBWR Using 100% CPU With ENQ: RO - FAST OBJECT REUSE During Truncate Or Drop Table (Doc ID 21422580.8) По этому документу: 1. установлен ли fix для указанного бага 2. проводились ли указанные операции по таблицам, учавствующим в запросе, в проблемное время (в том числе поискать в ASH соответствующие SQL_OPNAME во время перед выполнением проблемного запроса) 3. чем занимались CKPT и DBWR по ASH, OSWatcher (%CPU), глянуть их tracefiles 4. какой канал указан в 'reliable message' - через x$ksrcdes ( x$table ). вероятно, object broadcast. ValergradВ то время как для "хорошего" выполнения мы имеем на 1 execution 9 parse_calls ( потому что DOP= 4, 8 дочерних сессий + 1 координатор ), то у "плохого" выполнения эти цифры составляют тысячи и десятки тысяч на 1 execution. Точно ли одинаковые plan_hash_value и одинаковые данные? В приведенной выборке из DBA_HIST_SQLSTAT в первом сообщении даже нет проблемного запроса 4u8n688vjnn5r из ASH. "Высокий" parse_calls/executions типично для некоторых параллельных планов ( Parallel Fun – 2 ). Что в DBA_HIST_SQLSTAT.PX_SERVERS_EXECS_DELTA ? Это можно определить тем запросом, что писал feagor 21957564 В любом случае, на PARSE_CALLS с таким ASH особо нет смысла смотреть. События ожидания здесь первичны. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 11:27 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
тут гораздо важнее, что слейвы умирали и перезапускались, что легко увидеть, например, по SID 3008: SAMPLE_TIMESESSION_IDSESSION_SERIAL#SQL_IDIS_SQLID_CURRENTSQL_CHILD_NUMBERFORCE_MATCHING_SIGNATURESQL_PLAN_HASH_VALUESQL_PLAN_LINE_IDSQL_PLAN_OPERATIONSQL_PLAN_OPTIONSSQL_EXEC_IDQC_SESSION_IDQC_SESSION_SERIAL#PX_FLAGSEVENTSESSION_STATETIME_MODELIN_PARSEIN_HARD_PARSEIN_SQL_EXECUTION22-AUG-19 14.30.18.7213008209974u8n688vjnn5rY46.41E+184031101152INSERT STATEMENT190325995720896ON CPU1024NNY22-AUG-19 14.28.38.5143008122334u8n688vjnn5rY46.41E+184031101152INSERT STATEMENT190325995720896ON CPU1024NNY22-AUG-19 14.27.47.374300850434u8n688vjnn5rY-100190325995720896ON CPU16YNN22-AUG-19 13.57.30.2613008104814u8n688vjnn5rY46.41E+184031101152104PX BLOCKITERATOR167772161903259958519783ON CPU1024NNY22-AUG-19 13.54.59.5003008570894u8n688vjnn5rY46.41E+184031101152105TABLE ACCESSSTORAGE FULL FIRST ROWS167772161903259958519783ON CPU1024NNY Сразу видно, что SESSION_SERIAL# менялись: сначала слейв успел поработать, затем несколько раз перезапускался и парсил запрос снова ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 13:34 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
SeaGateValergrad, "Высокий" parse_calls/executions типично для некоторых параллельных планов ( Parallel Fun – 2 ) Да, похоже это именно оно. У Льюиса точно такие же высокие цифры цифры px_servers_allocated и parse_calls как и у меня. И в структурах запроса и плана просматривается общее ( в запросе есть NOT EXISTS который превращается планом в FILTER, при этом эта постоянные переходы между DFO деревьями и смены DOP в плане). Льюис пишет: авторOracle really did start and stop something like 6,700 PX session (constantly re-using the same small set of PX slave processes) for each execution of the filter subquery. This is definitely a performance threat – we keep acquiring and releasing PX slaves, we keep creating new sessions (yes, really), and we keep searching for cursors in the library cache. All these activities are highly contentious. If you start running multiple queries that do this sort of thing you find that you see increasing amounts of time being spent on latch contention, PX slave allocation, mutex waits, and all the other problems you get with sessions that log on, do virtually nothing, then log off in rapid succession. Возможно на что-то такое мы и нарываемся периодически: еще раз тщательно покопаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 13:41 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
xtender Сразу видно, что SESSION_SERIAL# менялись: сначала слейв успел поработать, затем несколько раз перезапускался и парсил запрос снова Да, почитайте по ссылке выше от Льюиса - Льюис именно об этом и пишет, что сессия создается на каждую строчку фильтра ( !!!). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 13:42 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
xtender, xtender тут гораздо важнее, что слейвы умирали и перезапускались, что легко увидеть, например, по SID 3008: Это совершенно не важно на данном этапе с текущими данными. Это легко воспроизвести, используя ту ссылку, что я дал. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 13:45 |
|
50 тысяч parse_calls на 1 executions
|
|||
---|---|---|---|
#18+
SeaGatextender, xtender тут гораздо важнее, что слейвы умирали и перезапускались, что легко увидеть, например, по SID 3008: Это совершенно не важно на данном этапе с текущими данными. Это легко воспроизвести, используя ту ссылку, что я дал. К сожалению металинковские ссылки я открыть пока не могу - возможно там что-то интересное. Но суть в том, что если про "Bug 21422580 - DBWR Using 100% CPU With ENQ: RO - FAST OBJECT REUSE During Truncate Or Drop Table (Doc ID 21422580.8)" то запрос простой инсерт ас селект, и он не использует таблицы, по которым кто-то еще в этот момент может их транкейтить или дропать. Поэтому я эту сторону особо не смотел. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 13:54 |
|
|
start [/forum/topic.php?fid=52&msg=39854114&tid=1882144]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 274ms |
total: | 424ms |
0 / 0 |