|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Всех приветствую. Прошу помощи:) 1. Есть партиционированная табличка T (схема партиционирования range(date_col) interval(numtodsinterval (1, 'day')) subpartition by list col2). 2. Есть процедура для заливки данных в эту таблицу(T). 3. В процедуре есть такой вот фрагмент: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
В общем итог этого всего - процедура "выполняется" больше суток и enq: TX - contention составляет 94% активности. Подскажите, пожалуйста, куда смотреть(dynamic performance views, может статьи какие-то) и как узнать, что кроется под этим enq: TX - contention, знаю что enq: TX разные бывают, а что конкретно в этом случае - не понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 12:55 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
maria_1992, Добрый день. На таблице есть Bitmap индексы? под Enq: TX Contention может подразумеваться блокировка на уровне строк Enq: TX Row Lock Contention. Не обновляются ли записи по уникальным ключам в разных потоках? Используются ли в запросе DBlink'и? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 13:24 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
feagor, здравствуйте. Индексов на таблице вообще нет и dblink'и не используются. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 13:29 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
LOBы есть в таблицах? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 13:38 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Alexander Anokhin, LOB'ов нет вообще, но date_col - virtual. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 13:47 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Что говорит dba_waiters? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 13:53 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
andrey_anonymous, [1:56:03 PM] 0 rows selected in 0.586 seconds ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 13:56 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
maria_1992 andrey_anonymous, [1:56:03 PM] 0 rows selected in 0.586 seconds Это при наличии интенсивного TX Contention? Что-то как-то не очень верится. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 14:01 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
maria_1992 andrey_anonymous, [1:56:03 PM] 0 rows selected in 0.586 seconds Можно посмотреть в v$active_session_history или dba_hist_active_sess_history where event = 'enq: TX - contention', то т.к. это merge с parallel DML и DOP=24, похоже PX слейвы ждут друг друга врумя от времени. Стоит сделать hang analyze dump, как минимум call stack посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 14:02 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
andrey_anonymous, увы, но так и есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 14:15 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Как именно диагностировали, что enq: TX - contention составляет 94% активности? Случайно не в V$SESSION.EVENT смотрите? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 14:20 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Alexander Anokhin maria_1992 andrey_anonymous, [1:56:03 PM] 0 rows selected in 0.586 seconds Можно посмотреть в v$active_session_history или dba_hist_active_sess_history where event = 'enq: TX - contention', то т.к. это merge с parallel DML и DOP=24, похоже PX слейвы ждут друг друга врумя от времени. Проверила. В v$active_session_history полно записей с event = 'enq: TX - contention' и session_state - waiting, если посмотреть в blocking_session_... действительно одни PX блокируют других. У блокирующих в session_state чередуются on cpu и waiting ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 14:22 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Alexander Anokhin Как именно диагностировали, что enq: TX - contention составляет 94% активности? Случайно не в V$SESSION.EVENT смотрите? В OEM смотрела - с вкладки average active sessions переходила в Active Sessions Waiting: Other и там видно Activity(%) для данного sql_id ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 14:29 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
maria_1992 действительно одни PX блокируют других. Попробуйте отсортировать набор для merge так, чтобы параллельные update не ссорились. Еще есть вариант загнать набор в pipelined parallel enable - там можно объяснить оракелю, как раскидывать записи по PX, однако тут возникнут сложности с тем, что для варианта merge using pipelined неизбежна буферизация промежуточных наборов ввиду врожденного ограничения на два сета слейвов - т.е. будет работать достаточно эффективно ровно до тех пор, пока порция данных помещается в памяти. Как только вылезли за пределы - идет буферизация в temporary tablespace с кратным падением производительности. ...и это... pctfree и maxtrans целевой таблицы проконтролируйте на всякий пожарный - не соображу с ходу, будет между PX драка за ITL или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 14:43 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
andrey_anonymous maria_1992 действительно одни PX блокируют других. Попробуйте отсортировать набор для merge так, чтобы параллельные update не ссорились. Еще есть вариант загнать набор в pipelined parallel enable - там можно объяснить оракелю, как раскидывать записи по PX, однако тут возникнут сложности с тем, что для варианта merge using pipelined неизбежна буферизация промежуточных наборов ввиду врожденного ограничения на два сета слейвов - т.е. будет работать достаточно эффективно ровно до тех пор, пока порция данных помещается в памяти. Как только вылезли за пределы - идет буферизация в temporary tablespace с кратным падением производительности. Т.е. здесь все дело в моей кривой "архитектуре".... Большущее спасибо за рекомендацию. Попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 14:53 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
maria_1992 Код: plsql 1.
Чуть в сторону от сути: присмотритесь к фактическим планам - там точно параллельный merge? Оно иногда может не слушаться, тогда поможет FORCE parallel dml ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 14:55 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Alexander Anokhin и feagor, вам тоже огромное спасибо за помощь:) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 14:57 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
andrey_anonymous maria_1992 Код: plsql 1.
Чуть в сторону от сути: присмотритесь к фактическим планам - там точно параллельный merge? Оно иногда может не слушаться, тогда поможет FORCE parallel dml dbms_xplan.display_cursor говорит: 93 Note 94 ----- 95 - dynamic statistics used: dynamic sampling (level=6) 96 - Degree of Parallelism is 16 because of hint 97 - Warning: basic plan statistics not available. These are only collected when: 98 * hint 'gather_plan_statistics' is used for the statement or 99 * parameter 'statistics_level' is set to 'ALL', at session or system level ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 15:07 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
maria_1992 andrey_anonymous пропущено... Чуть в сторону от сути: присмотритесь к фактическим планам - там точно параллельный merge? Оно иногда может не слушаться, тогда поможет FORCE parallel dml dbms_xplan.display_cursor говорит: 93 Note 94 ----- 95 - dynamic statistics used: dynamic sampling (level=6) 96 - Degree of Parallelism is 16 because of hint 97 - Warning: basic plan statistics not available. These are only collected when: 98 * hint 'gather_plan_statistics' is used for the statement or 99 * parameter 'statistics_level' is set to 'ALL', at session or system level Не совсем. Убедитесь, что в плане нет Parallel->Serial на шаге merge. ...или наоборот, попробуйте serial merge, если параллельная выборка производится сложным запросом. ...и от "dynamic statistics used: dynamic sampling (level=6)" я бы избавился. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 15:11 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
andrey_anonymous Не совсем. Убедитесь, что в плане нет Parallel->Serial на шаге merge. ...или наоборот, попробуйте serial merge, если параллельная выборка производится сложным запросом. ...и от "dynamic statistics used: dynamic sampling (level=6)" я бы избавился. Вот: Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 15:20 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
maria_1992 andrey_anonymous пропущено... Чуть в сторону от сути: присмотритесь к фактическим планам - там точно параллельный merge? Оно иногда может не слушаться, тогда поможет FORCE parallel dml dbms_xplan.display_cursor говорит: 93 Note 94 ----- 95 - dynamic statistics used: dynamic sampling (level=6) 96 - Degree of Parallelism is 16 because of hint 97 - Warning: basic plan statistics not available. These are only collected when: 98 * hint 'gather_plan_statistics' is used for the statement or 99 * parameter 'statistics_level' is set to 'ALL', at session or system level Само по себе это не гарантирует параллельный шаг MERGE. Но в твоём случае он, очевидно, параллельный, раз PDML включён и PX слейвы активно блокируют друг друга через enq: TX - contention. Проблема вряд ли связана с планом, скорее что-то типа такого Slow Extent Allocation For Partitioned Compressed Table Causing Slowdown With enq: TX - contention And L1 validation Wait Events (Doc ID 2488646.1) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 15:21 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
ну а следующим шагом стоило бы посмотреть call stacks (hanganalyze dump или oradebug short_stack) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2020, 15:31 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Alexander Anokhin ну а следующим шагом стоило бы посмотреть call stacks (hanganalyze dump или oradebug short_stack) Действовать как правило лучше скальпелем чем кувалдой. Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2020, 21:26 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Кобанчег Что даст полезного сия информация для тюнинга merge что без нее непонятно? "TX - contention" одно из событий ожидания, котрое покрывает совершенно разные не связанные с собой вещи, можно было назвать "enq: TX - other". Само по себе оно не объясняет, почему одна сессия ждёт другую. Точнее оно говорит о том, что одна сессия держит enq: TX, а другая запрашивает в несовместимом режиме, но почему одна держит, а другая запрашивает этот "enq: TX - other", как правило, непонятно. Стек вызовов даст знать, что за код вызывается, где в коде происходит вызов ожидания "TX - contention". Что не гарантирует, что сразу станет всё ясно, но в целом это ключевая информация, необходимый минимум. Вряд-ли здесь уместно говорить о "тюнинг merge". Если это из разряда space search как Doc ID 2488646.1, возможно выделение экстентов перед merge поможет, но это только предположение. Кобанчег Действовать как правило лучше скальпелем чем кувалдой. Код: plsql 1.
У тебя бракованный скальпель. 24 трейс файла вместо одного и только ожидающие сессии, без блокирующих. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2020, 23:55 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Кобанчег Что даст полезного сия информация для тюнинга merge что без нее непонятно? Кобанчег Код: plsql 1.
"enq: TX - contention" - это не "enq: TX - row lock contention" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 04:05 |
|
|
start [/forum/topic.php?fid=52&msg=39955350&tid=1881263]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
138ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 255ms |
0 / 0 |