powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / 50 тысяч parse_calls на 1 executions
25 сообщений из 29, страница 1 из 2
50 тысяч parse_calls на 1 executions
    #39853438
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
select parse_calls_delta,  executions_delta, invalidations_delta, t.sql_id from dba_hist_sqlstat t
where executions_delta > 0
order by t.parse_calls_delta / t.executions_delta desc;



Выдает нам такую картину:

parse_callsexecutionsinvalidationssql_id48366167ryv0syzqb9kp4540410avc1dqza7pz7d4401616f66thvqhb2nvt374011567n6pbjpphfnm23812143ac0bmwc2uj282005610077fy92upp8d519744102znx8jhabd5r0

И вот это дико непонятно. Никто не сталкивался с таким? Доступа к металинку у меня пока нет.
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39853693
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valergrad,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select sn.begin_interval_time,
       st.plan_hash_value,
       st.sql_profile,
       sum(st.executions_delta) as execs,
       round(avg(st.elapsed_time_delta/decode(st.executions_delta,0,1,st.executions_delta))/1e6,2)as ela_per_exec_sec,
       max(round(st.px_servers_execs_delta/decode(st.executions_delta,0,1,st.executions_delta))) as px_per_exec,
       round(avg((st.rows_processed_delta/decode(st.executions_delta,0,1,st.executions_delta)))) as rows_per_exec,
       round(avg((st.fetches_delta/decode(st.executions_delta,0,1,st.executions_delta)))) as fetches_per_exec
from   dba_hist_sqlstat st, dba_hist_snapshot sn
where  sql_id like 'gnrh73f78z51n%'
and    st.snap_id = sn.snap_id
and    st.instance_number = sn.instance_number
and    st.executions_delta > 0
and    sn.begin_interval_time between sysdate - 10 and sysdate
group by sn.begin_interval_time, st.plan_hash_value, st.sql_profile
order by sn.begin_interval_time;


по тормозящему запросу посмотреть можно?
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39853744
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что в v$sql_shared_cursor?
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39853750
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Valergrad,

Покажи что есть в ash по любому такому sqlid за проблемный период. Без группировок. Тупо в экселе выложи все строки. Что там в sql in parse. Меняются ли sql exec id? Сколько разных сессий там?
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39853782
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сталкивался.
В 18 версии Оракл стал более прозрачным и хреначит в логах сообщения типа
WARNING: too many parse errors, count=800 SQL hash=0xb1444754
PARSE ERROR: ospid=974, error=12872 for statement
Включайте трассировку и поймаете ошибку, она как правило связана с динамическим сбором статистики во время парсинга
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39853787
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39853968
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderValergrad,

Что там в sql in parse. Меняются ли sql exec id?

Не меняются, конечно, иначе бы я понял что дело в каких-то инвалидациях курсоров.

xtenderValergrad,
Сколько разных сессий там?


Как обычно, координатор + дочерние. В плане довольно много p->s, так что частенько остается только координатор.


xtenderValergrad,
Покажи что есть в ash по любому такому sqlid за проблемный период. Без группировок. Тупо в экселе выложи все строки.


Ок.
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39853969
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВАСталкивался.
Включайте трассировку и поймаете ошибку, она как правило связана с динамическим сбором статистики во время парсинга

Немного не понял. Речь о том, что для парса оракл собирает какую-то статистику? И фейлится во время сбора этой статистики, что засчитывается как парс? ( Dynamic_sampling в плане не было, на всякий случай).
Трассировку будет трудно включить - т.к. происходит это только периодически, скажем, один ворклоу из 10. Заранее не угадаешь - пройдет или нет. И проблемным каждый раз оказывается разный запрос. Включить же трассу на весь воркфлоу - это убить весь прод.
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39853970
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На остальные вопросы отвечу в понедельник как будет доступ к рабочему компу.
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39854114
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagorValergrad,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select sn.begin_interval_time,
       st.plan_hash_value,
       st.sql_profile,
       sum(st.executions_delta) as execs,
       round(avg(st.elapsed_time_delta/decode(st.executions_delta,0,1,st.executions_delta))/1e6,2)as ela_per_exec_sec,
       max(round(st.px_servers_execs_delta/decode(st.executions_delta,0,1,st.executions_delta))) as px_per_exec,
       round(avg((st.rows_processed_delta/decode(st.executions_delta,0,1,st.executions_delta)))) as rows_per_exec,
       round(avg((st.fetches_delta/decode(st.executions_delta,0,1,st.executions_delta)))) as fetches_per_exec
from   dba_hist_sqlstat st, dba_hist_snapshot sn
where  sql_id like 'gnrh73f78z51n%'
and    st.snap_id = sn.snap_id
and    st.instance_number = sn.instance_number
and    st.executions_delta > 0
and    sn.begin_interval_time between sysdate - 10 and sysdate
group by sn.begin_interval_time, st.plan_hash_value, st.sql_profile
order by sn.begin_interval_time;



по тормозящему запросу посмотреть можно?

Этот запрос ничего не возвращает. Дело в том, что 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 почему-то показывают противоречивую информацию по этому запросу.
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39854151
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39854192
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prepared cursors?
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39854228
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad,

Согласно документу MOS, Вам рекомендуется обновить jdbc до 12.2
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39854256
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim LejninValergrad,

Согласно документу MOS, Вам рекомендуется обновить jdbc до 12.2

Боюсь, я не понял, какой документ, и почему jdbc? Как джава здесь учавствует?
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39854581
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Valergrad,

видно слейвы в "IN PARSE", но из AWR все-таки слишком мало информации, хотя бы из ASH бы. Видно что было 3 чайлда: часть вместе с координатором получила 0, следующие 2, и последние 4.
Желательно протрейсить с _px_trace и снаппером подеровским со статистиками, и хотя бы отчет sqld360 по этому sql_id.
И покажи, что в
Код: plsql
1.
2.
select * from v$sysstat where class=32;
select * from v$pq_sysstat;


Melkomyagkii_newbiчто в v$sql_shared_cursor?
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39854861
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39854868
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkomyagkii_newbiНе похоже на https://iusoltsev.wordpress.com/2019/07/27/long-long-parse/#more-7585
?

Да не очень, там один длительный парс.
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39854906
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValergradMelkomyagkii_newbiНе похоже на https://iusoltsev.wordpress.com/2019/07/27/long-long-parse/#more-7585
?

Да не очень, там один длительный парс.

тоже об этом подумал, но он там не приводит dba_hist_sqlstat, вдруг она с ума сошла и так врет при таком..
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39854918
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Valergrad,

Для начала стоило бы проверить, а не работали ли другие слейвы на другой ноде (child курсоры 1,3) и не была ли какая-либо из этих нод перегружена, не было ли px downgrade. Ну и вообще план показать полный из авр, с other_xml из DBA_HIST_SQL_PLAN
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39855012
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 особо нет смысла смотреть. События ожидания здесь первичны.
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39855138
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
тут гораздо важнее, что слейвы умирали и перезапускались, что легко увидеть, например, по 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# менялись: сначала слейв успел поработать, затем несколько раз перезапускался и парсил запрос снова
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39855141
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.


Возможно на что-то такое мы и нарываемся периодически: еще раз тщательно покопаю.
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39855143
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender
Сразу видно, что SESSION_SERIAL# менялись: сначала слейв успел поработать, затем несколько раз перезапускался и парсил запрос снова

Да, почитайте по ссылке выше от Льюиса - Льюис именно об этом и пишет, что сессия создается на каждую строчку фильтра ( !!!).
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39855145
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

xtender тут гораздо важнее, что слейвы умирали и перезапускались, что легко увидеть, например, по SID 3008:
Это совершенно не важно на данном этапе с текущими данными. Это легко воспроизвести, используя ту ссылку, что я дал.
...
Рейтинг: 0 / 0
50 тысяч parse_calls на 1 executions
    #39855151
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)"
то запрос простой инсерт ас селект, и он не использует таблицы, по которым кто-то еще в этот момент может их транкейтить или дропать. Поэтому я эту сторону особо не смотел.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / 50 тысяч parse_calls на 1 executions
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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