|
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 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
xtender Кобанчег Что даст полезного сия информация для тюнинга merge что без нее непонятно? Например, можно еще проверить компрессию таблицы. Был ли concurrent сбор статистики или DDL типа alter table, index rebuild, etc. Можно посмотреть другие детали из ash (sql_exec_id, sql_exec_start, что косвенно может указывать на рестарт, но вряд ли это тот случай). На версии 11.2 мы сталкивались с тем, что при параллельный DML в subpartitioned table Oracle накладывал TM enqueue in exclusive mode на все подсекции в результате чего либо всё вставало колом либо вообще сыпались дедлоки. Это опять же не этот случай, но намекает что может быть полнейший абсурд и неплохо бы еще раз понаблюдать за блокировками во время выполнения (в ash то попадает только active). Если есть база для экспериментов, то неплохо бы воспроизвести, потом выполнить без параллельности и еще без sub-partitions. Так путем проб и анализа нащупывается подход который работает приемлемо. Еще раз: определяется фактор из-за которого проблема с производительностью. Дальнейший вопрос уже как это решать - code fix, patch (или вообще миграция на новую версию), или банально некоторая манипуляция DBA. Александру был задан вопрос что понять смысл альтернативного подхода. Вероятно в его практике обычно невозможно не то, что провести ряд экспериментов но даже выполнить повторный прогон и вместо анализа различных подходов он будет смотреть на ядрёные функции. Потом вероятно поднимет SR и будет ждать пока починят. Каждому своё. Можно пойти дальше - дизассемблер в руки и ковырять кишки. Этот парень может много про это рассказать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 14:00 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Кобанчег, 1. Ну зачем же гадать? BGAAG! 2. Александр посоветовал очень здравый правильный системный траблшутинг, безо всяких гаданий. 3. У Александра огромный опыт и знания в траблшутинге(в том числе работы в самом оракл), так что не надо измышлизмов, что он сделает и в какой ситуации. Если ты что-то не понял в его словах, то не надо сразу оголтело наезжать - просто спроси, и, скорее всего, с его долготерпением он постарается доходчиво объяснить. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 14:09 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
xtender, Саян, а может тебе хватит выступать адвокатом людей и указывать что кому делать? Ты не заметил как после твоих нравоучений ( 22122317 ) неожиданно пропал -2-, санитар леса ты наш. Я просто спросил как ему поможет знание callstack в решении этой конкретной проблемы. Про наезды это твои домыслы. Может ты дашь хотя бы одну ссылку где лично ты описываешь как тебе помог callstack, я с удовольствием почитаю. Только не надо давать ссылки на описание в духе "наука ради науки", я тоже не раз ковырял сие. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 14:22 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Кобанчег, offtop Кобанчег Саян, а может тебе хватит выступать адвокатом людей и указывать что кому делать? Кобанчег Ты не заметил как после твоих нравоучений ( 22122317 ) неожиданно пропал -2-, санитар леса ты наш. Кобанчег Действовать как правило лучше скальпелем чем кувалдой. Код: plsql 1.
Кобанчег Я просто спросил как ему поможет знание callstack в решении этой конкретной проблемы. Про наезды это твои домыслы. Хочешь продолжить этот абсолютно оффтопный разговор - напиши мне на почту. Эта тема не место для такого рода оффтопа. Кобанчег Может ты дашь хотя бы одну ссылку где лично ты описываешь как тебе помог callstack, я с удовольствием почитаю. зы. http://orasql.org/2017/12/13/collection-iterator-pickler-fetch-pipelined-vs-simple-table-functions/ По сабжу: Кобанчег Здравый смысл подсказывает, что если в обычных условиях всё работает ОК Кобанчег 99.9% можно определить без callstack ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 14:41 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
xtender а как тебе понравится если на твое Кобанчег Действовать как правило лучше скальпелем чем кувалдой. Код: plsql 1.
Конструкция как раз была приведена чтобы адресат обосновал необходимость более общей конструкции, если в ней есть необходимость для его целей (которые мне были не до конца ясны). Факт кривой копипасты тоже абсолютно очевиден. У меня нет особого ЧСВ и это меня никак не ранит. xtender Кобанчег Может ты дашь хотя бы одну ссылку где лично ты описываешь как тебе помог callstack, я с удовольствием почитаю. зы. http://orasql.org/2017/12/13/collection-iterator-pickler-fetch-pipelined-vs-simple-table-functions/ Спасибо за предложение на писать на почту, на этом, пожалуй, можно закруглится. Я думаю твоя позиция про очень здравый правильный системный траблшутинг TX - contention в случае merge понятна, но мне было интересно мнение господина Анохина. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 15:13 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Кобанчег Может ты дашь хотя бы одну ссылку где лично ты описываешь как тебе помог callstack, я с удовольствием почитаю. Только не надо давать ссылки на описание в духе "наука ради науки", я тоже не раз ковырял сие. И xtender Что конкретно ты предлагаешь адекватно, технически? Без гаданий, типа "проверить компрессию таблицы"(про которую, Александр уже дал ноту), "Был ли concurrent сбор статистики или DDL типа alter table, index rebuild, etc" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 15:30 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Кобанчег но мне было интересно мнение господина Анохина. Кобанчег Я думаю твоя позиция про очень здравый правильный системный траблшутинг TX - contention Да, в этом случае именно hang analyze dump, или лучше system state dump, это системный и правильный траблшутинг TX - contention. ASH тоже полезно, особенно когда надо понять как события развивались, но в данном случае правильный дамп полезнее, поскольку "enq: TX - contention" это достаточно общий wait event, их около 4-х разных, если не ошибаюсь, и первым делом стоит понять какой именно это "enq: TX - contention" из всего их многообразия, вместе с цепочкой ожиданий, кто в каком месте ждёт, и кто финальный блокер и что он делает. Кобанчег Может ты дашь хотя бы одну ссылку где лично ты описываешь как тебе помог callstack, я с удовольствием почитаю. https://support.oracle.com/epmos/faces/DocumentDisplay?id=2488646.1 Slow extent allocation for partitioned compressed table causing slowdown with enq: tx - contention and l1 validation wait events When it happens, most of PX slaves wait for "TX - contention" and stack for blockers (PX slaves as well) contains ktsp_bump_hwm, which means we are trying to extend the segment to get new space and are on CPU ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 16:26 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Alexander Anokhin Кобанчег но мне было интересно мнение господина Анохина. Мне по прежнему не совсем понятно какие дальнейшие шаги при таком подходе после получения стека. Искать ядрёные функции на металинке или еще чего. Alexander Anokhin Да, в этом случае именно hang analyze dump, или лучше system state dump, это системный и правильный траблшутинг TX - contention Для просмотра полного дерева блокировок или callstack или всё сразу? И главное в какой момент если maria_1992 "выполняется" больше суток ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 16:49 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
Alexander Anokhin Эта была цитата из закрытого документа, её стоит удалить. Тут приоткрыто https://support.oracle.com/knowledge/Oracle Database Products/2488646_1.html Slow extent allocation for partitioned compressed table causing slowdown with enq: tx - contention and l1 validation wait events When it happens, most of PX slaves wait for "TX - contention" and stack for blockers (PX slaves as well) contains ktsp_bump_hwm, which means we are trying to extend the segment to get new space and are on CPU остальное в https://support.oracle.com/epmos/faces/DocumentDisplay?id=2488646.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 16:51 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
maria_1992 Всех приветствую. Прошу помощи:) 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 разные бывают, а что конкретно в этом случае - не понятно. А для каких целей может понадобиться именно такой попартиционный мерж в цикле, почему просто не использовать мерж в таблицу без циклов и отдельных партиций? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 10:48 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
beginner2020 А для каких целей может понадобиться именно такой попартиционный мерж в цикле, почему просто не использовать мерж в таблицу без циклов и отдельных партиций? Вопрос адресован ко всем у кого есть мысли на этот счет:) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 16:35 |
|
enq: TX - contention
|
|||
---|---|---|---|
#18+
beginner2020 beginner2020 А для каких целей может понадобиться именно такой попартиционный мерж в цикле, почему просто не использовать мерж в таблицу без циклов и отдельных партиций? Вопрос адресован ко всем у кого есть мысли на этот счет:) Как вариант - локализация технологических операций по загрузке хранилища (разделы, не участвующие в текущей фазе операции загрузки, доступны для обычных операций без ограничений). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 16:39 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1881263]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
148ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 287ms |
total: | 527ms |
0 / 0 |