Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 enq: TM - contention, requests mode 6 при попытке вставить в таблицу или её мастера  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1178
OEL 4.4, Двухузловой RAC, Oracle EE 10.2.0.3, Advanced Multimaster Replication, Data Guard.

Наблюдаемая ситуация - всё замерло на вставке в таблицу (A) в 12:08:42 и всё само заработало в 12:10:56.
По gv$active_session_history из sql_id, P1 и P2:
- все сесси (в основном, с первого инстанса), кроме трёх нижеописанных, пытались вставить в (А) и запрашивали разделяемую блокировку (mode 2) таблицы (C)
- сессия (1) работая на втором инстансе производила модификацию таблицы (A) и (B) (известно из LogMiner'а)
- сессия (2) работая на втором инстансе чуть позже захотела изменить таблицу (C) и была заблокирована (1), сама став причиной блокировки десятков сессий, пытающихся вставить в (A), при этом запрашивая эксклюзивную (mode 6) блокировку на таблицу (C)
- сессия (3) - очень похожа на сессию (1), работала на втором инстансе, была заблокирована сессией (1), сама при этом блокировала массу сессий, вставляющих в (A) и запрашивала эксклюзивную (mode 6) блокировку на (C)

Никакие другие таблицы сессиями не модифицировались (видно, в том числе, из LogMiner'а).

Когда сессия (1) закоммитилась, (2) продолжила работу, продолжая при этом блокировать всех модифицирующих таблицу (A). Когда закоммитилась (2), (3) продолжила работу и в скором времени закоммитилась, освободив всех.

Взаимоотношения таблиц ( A >- C означает, что A имеет внешний ключ на первичный ключ C):
A >- C
A >- D >- B

Все внешние ключи одностолбцовые и индексированые.
Все описанные таблицы не участвуют в репликации.

Теперь, собственно, вопрос:
- почему сессия (2) могла хотеть эксклюзивную TM-блокировку на таблицу (C)?
- то же относительно сессии (3)?

Я понимаю, что всё выглядит так, как будто не хватает индексов на внешних ключах, но они есть, они валидны и они все одностолбцовые. Честное слово :)
Проблема возникает периодически, приблизительно раз в год. Операций типа сессий (1) происходит до сотни в сутки, типа сессии (2) порядка десятка в неделю, всех остальных заблокированных - порядка десятка тысяч в сутки. Т.е. проблема явно "плавающая".

Тему Непонятная ситуация с "enq: TM - contention" в RAC видел - чем-то похоже, но "проверить" выключением ключей не смогу - рискую не дождаться результата :) И, в отличие от автора той темы, никакой корреляции с нагрузкой на систему нет.

Буду рад любым мыслям на тему.
Вытяжка из gv$active_session_history прилагается.

Краткие пояснения:

object_id таблиц
(A): 55752
(B): 55881
(C): 55500

sql_id:
58jdu6g9gtg22: insert into A
gmsksgz63pwda: insert into A
3s0vq98ts80na: update C
20 сен 12, 20:56    [13198646]     Ответить | Цитировать Сообщить модератору
 Re: enq: TM - contention, requests mode 6 при попытке вставить в таблицу или её мастера  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1178
Файл потерялся.

К сообщению приложен файл (20120920-Trouble.zip - 20Kb) cкачать
20 сен 12, 20:57    [13198648]     Ответить | Цитировать Сообщить модератору
 Re: enq: TM - contention, requests mode 6 при попытке вставить в таблицу или её мастера  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
Может это был parallel dml ?
20 сен 12, 22:49    [13198958]     Ответить | Цитировать Сообщить модератору
 Re: enq: TM - contention, requests mode 6 при попытке вставить в таблицу или её мастера  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1178
_Nikotin,

В каком месте?
Честно говоря не понял, как параллельный dml может привести к таким последствиям.
20 сен 12, 23:00    [13198995]     Ответить | Цитировать Сообщить модератору
 Re: enq: TM - contention, requests mode 6 при попытке вставить в таблицу или её мастера  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1178
проходил мимо...
Проблема возникает периодически, приблизительно раз в год.


Сглазил :)

Сегодня ситуация почти повторилась.
Т.е. была заблокирована вставка в ту же таблицу (А) несколькими десятками сессий, по причине запроса эксклюзивной TM-блокировки на уже другую таблицу (E), на которую с (А) имеется индексированный внешний ключ, некой сессией, которая в этот момент модифицировала (E). Кроме того, отстрел сессий, просящих блокировку mode 6 не дал результата - тут же такую же блокировку захотела ещё одна сессия, после которой - ещё одна и т.д. Отстрел всех сессий поправил ситуацию минут на 5, после чего ситуация повторилась. Помог только полный перезапуск базы. Пока. Я хренею, блин...

Всё выглядит так, как будто одна из сессий, вставляющих в (A), просто не находит индекса по внешнему ключу и запрашивает эксклюзивную блокировку (E). Почти. Ведь в этом случае запрашиваться должна блокировка mode 5, а не mode 6...

Проблема усугубляется тем, что массовая вставка идёт на одном инстансе кластера, а модификация таблицы (E) - на другом. Может быть, они просто не могут договориться о местонахождении корневого блока индекса? Но кластерных ожиданий практически нет...

На тесте ситуация не воспроизводится, что бы ни делали.
22 сен 12, 23:15    [13208010]     Ответить | Цитировать Сообщить модератору
 Re: enq: TM - contention, requests mode 6 при попытке вставить в таблицу или её мастера  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
проходил мимо...
Т.е. была заблокирована вставка в ту же таблицу (А) несколькими десятками сессий, по причине запроса эксклюзивной TM-блокировки на уже другую таблицу (E), на которую с (А) имеется индексированный внешний ключ,
...
Всё выглядит так, как будто одна из сессий, вставляющих в (A), просто не находит индекса по внешнему ключу и запрашивает эксклюзивную блокировку (E). Почти. Ведь в этом случае запрашиваться должна блокировка mode 5, а не mode 6...
Но ведь индексы на внешнем ключе позволят избежать блокировок при update/delete в родительской таблице, а не insert в child.
23 сен 12, 00:56    [13208372]     Ответить | Цитировать Сообщить модератору
 Re: enq: TM - contention, requests mode 6 при попытке вставить в таблицу или её мастера  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1178
wurdu
Но ведь индексы на внешнем ключе позволят избежать блокировок при update/delete в родительской таблице, а не insert в child.

Вы правы, а я торможу :(
У меня кончились идеи, почему insert в child'а может требовать mode 6 блокировку на парента. Остался последний вариант - oracle меня жёстко парит, рассказывая про блокировку не тех объектов, не того типа, не с теми модами, не теми сессиями. Но факт остаётся - всё встряёт.
23 сен 12, 01:35    [13208423]     Ответить | Цитировать Сообщить модератору
 Re: enq: TM - contention, requests mode 6 при попытке вставить в таблицу или её мастера  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
А там точно не через какую-нить gv$ges_blocking_enqueue надо смотреть?
23 сен 12, 02:36    [13208486]     Ответить | Цитировать Сообщить модератору
 Re: enq: TM - contention, requests mode 6 при попытке вставить в таблицу или её мастера  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1178
wurdu
А там точно не через какую-нить gv$ges_blocking_enqueue надо смотреть?

Честно? Никогда раньше про такую не слышал!
Теперь обязательно буду смотреть, может чего и высмотрю...
Спасибо.
24 сен 12, 16:51    [13214132]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить