powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / enq: TX - contention
25 сообщений из 37, страница 1 из 2
enq: TX - contention
    #39955250
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.
execute immediate 'alter session enable parallel dml';

 for x in list_of_partitions_in_T.first .. list_of_partitions_in_T.last
 loop
    dbms_session.set_context(x....) -- значение из list_of_partitions_in_T
    ...
    --формируем merge такого вида:
    l_sql := 'merge /*+parallel(24)*/
                     into (select * 
                              from T
                            where T.date_col = sys_context(....))
                  using (select ...
                              from some_other_table
                            where some_other_table.date_col = sys_context(....))
                  ......
                 '
    execute immediate l_sql;
    commit;
 end loop;

execute immediate 'alter session disable parallel dml';



В общем итог этого всего - процедура "выполняется" больше суток и enq: TX - contention составляет 94% активности.
Подскажите, пожалуйста, куда смотреть(dynamic performance views, может статьи какие-то) и как узнать, что кроется под этим enq: TX - contention, знаю что enq: TX разные бывают, а что конкретно в этом случае - не понятно.
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955272
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maria_1992,

Добрый день.
На таблице есть Bitmap индексы?

под Enq: TX Contention может подразумеваться блокировка на уровне строк Enq: TX Row Lock Contention. Не обновляются ли записи по уникальным ключам в разных потоках?
Используются ли в запросе DBlink'и?
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955278
maria_1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
feagor, здравствуйте.

Индексов на таблице вообще нет и dblink'и не используются.
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955283
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LOBы есть в таблицах?
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955286
maria_1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander Anokhin,

LOB'ов нет вообще, но date_col - virtual.
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955290
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что говорит dba_waiters?
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955292
maria_1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

[1:56:03 PM] 0 rows selected in 0.586 seconds
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955295
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maria_1992
andrey_anonymous,

[1:56:03 PM] 0 rows selected in 0.586 seconds

Это при наличии интенсивного TX Contention?
Что-то как-то не очень верится.
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955296
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 слейвы ждут друг друга врумя от времени.

Стоит сделать hang analyze dump, как минимум call stack посмотреть.
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955307
maria_1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

увы, но так и есть.
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955312
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как именно диагностировали, что enq: TX - contention составляет 94% активности? Случайно не в V$SESSION.EVENT смотрите?
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955313
maria_1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955316
maria_1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander Anokhin
Как именно диагностировали, что enq: TX - contention составляет 94% активности? Случайно не в V$SESSION.EVENT смотрите?


В OEM смотрела - с вкладки average active sessions переходила в Active Sessions Waiting: Other и там видно Activity(%) для данного sql_id
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955321
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maria_1992
действительно одни PX блокируют других.

Попробуйте отсортировать набор для merge так, чтобы параллельные update не ссорились.

Еще есть вариант загнать набор в pipelined parallel enable - там можно объяснить оракелю, как раскидывать записи по PX, однако тут возникнут сложности с тем, что для варианта merge using pipelined неизбежна буферизация промежуточных наборов ввиду врожденного ограничения на два сета слейвов - т.е. будет работать достаточно эффективно ровно до тех пор, пока порция данных помещается в памяти. Как только вылезли за пределы - идет буферизация в temporary tablespace с кратным падением производительности.

...и это... pctfree и maxtrans целевой таблицы проконтролируйте на всякий пожарный - не соображу с ходу, будет между PX драка за ITL или нет.
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955328
maria_1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
maria_1992
действительно одни PX блокируют других.

Попробуйте отсортировать набор для merge так, чтобы параллельные update не ссорились.

Еще есть вариант загнать набор в pipelined parallel enable - там можно объяснить оракелю, как раскидывать записи по PX, однако тут возникнут сложности с тем, что для варианта merge using pipelined неизбежна буферизация промежуточных наборов ввиду врожденного ограничения на два сета слейвов - т.е. будет работать достаточно эффективно ровно до тех пор, пока порция данных помещается в памяти. Как только вылезли за пределы - идет буферизация в temporary tablespace с кратным падением производительности.


Т.е. здесь все дело в моей кривой "архитектуре"....
Большущее спасибо за рекомендацию. Попробую.
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955329
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maria_1992
Код: plsql
1.
execute immediate 'alter session enable parallel dml';



Чуть в сторону от сути: присмотритесь к фактическим планам - там точно параллельный merge? Оно иногда может не слушаться, тогда поможет FORCE parallel dml
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955333
maria_1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander Anokhin и feagor, вам тоже огромное спасибо за помощь:)
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955340
maria_1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
maria_1992
Код: plsql
1.
execute immediate 'alter session enable parallel dml';



Чуть в сторону от сути: присмотритесь к фактическим планам - там точно параллельный 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
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955343
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)" я бы избавился.
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955348
maria_1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous

Не совсем. Убедитесь, что в плане нет Parallel->Serial на шаге merge.
...или наоборот, попробуйте serial merge, если параллельная выборка производится сложным запросом.
...и от "dynamic statistics used: dynamic sampling (level=6)" я бы избавился.


Вот:

Код: plsql
1.
2.
3.
4.
23  | Id  | Operation                           | Name              | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |    TQ  |IN-OUT| PQ Distrib |
28  |   3 |    MERGE                            | T1                |       |       |            |          |       |       |  Q1,06 | PCWP |            |
29  |   4 |     PX RECEIVE                      |                   | 45493 |   562M|  5550  (15)| 00:00:01 |       |       |  Q1,06 | PCWP |            |
30  |   5 |      PX SEND HYBRID (ROWID PKEY)    | :TQ10005          | 45493 |   562M|  5550  (15)| 00:00:01 |       |       |  Q1,05 | P->P | HYBRID (ROW|
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955350
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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)
...
Рейтинг: 0 / 0
enq: TX - contention
    #39955359
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну а следующим шагом стоило бы посмотреть call stacks (hanganalyze dump или oradebug short_stack)
...
Рейтинг: 0 / 0
enq: TX - contention
    #39956025
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Anokhin
ну а следующим шагом стоило бы посмотреть call stacks (hanganalyze dump или oradebug short_stack)
Что даст полезного сия информация для тюнинга merge что без нее непонятно?

Действовать как правило лучше скальпелем чем кувалдой.
Код: plsql
1.
alter session set events 'wait_event["enq: TX - row lock contention"] callstack()';
...
Рейтинг: 0 / 0
enq: TX - contention
    #39956043
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кобанчег
Что даст полезного сия информация для тюнинга merge что без нее непонятно?

"TX - contention" одно из событий ожидания, котрое покрывает совершенно разные не связанные с собой вещи, можно было назвать "enq: TX - other". Само по себе оно не объясняет, почему одна сессия ждёт другую. Точнее оно говорит о том, что одна сессия держит enq: TX, а другая запрашивает в несовместимом режиме, но почему одна держит, а другая запрашивает этот "enq: TX - other", как правило, непонятно. Стек вызовов даст знать, что за код вызывается, где в коде происходит вызов ожидания "TX - contention". Что не гарантирует, что сразу станет всё ясно, но в целом это ключевая информация, необходимый минимум.

Вряд-ли здесь уместно говорить о "тюнинг merge". Если это из разряда space search как Doc ID 2488646.1, возможно выделение экстентов перед merge поможет, но это только предположение.

Кобанчег

Действовать как правило лучше скальпелем чем кувалдой.
Код: plsql
1.
alter session set events 'wait_event["enq: TX - row lock contention"] callstack()';


У тебя бракованный скальпель. 24 трейс файла вместо одного и только ожидающие сессии, без блокирующих.
...
Рейтинг: 0 / 0
enq: TX - contention
    #39956067
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кобанчег
Что даст полезного сия информация для тюнинга merge что без нее непонятно?
а что тебе уже без нее понятно?


Кобанчег
Код: plsql
1.
alter session set events 'wait_event["enq: TX - row lock contention"] callstack()';

не путай,
"enq: TX - contention" - это не "enq: TX - row lock contention"
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / enq: TX - contention
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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