powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Event Monitor не ловит deadlock'и
8 сообщений из 8, страница 1 из 1
Event Monitor не ловит deadlock'и
    #35559890
Gnomov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!

Не могу никак с помощью Event Monitor'а отловить deadlock'и.

1. Создаю EVENT MONITOR FOR DEADLOCKS WITH DETAILS:
CREATE EVENT MONITOR DLOCK_DTL_EVT FOR DEADLOCKS WITH DETAILS
WRITE TO TABLE
CONNHEADER(TABLE CONNHEADER_DLOCK_DTL_EVT, IN TBS_EVMON),
DEADLOCK(TABLE DEADLOCK_DLOCK_DTL_EVT, IN TBS_EVMON),
DLCONN(TABLE DLCONN_DLOCK_DTL_EVT, IN TBS_EVMON),
DLLOCK(TABLE DLLOCK_DLOCK_DTL_EVT, IN TBS_EVMON),
CONTROL(TABLE CONTROL_DLOCK_DTL_EVT, IN TBS_EVMON)
BUFFERSIZE 512
NONBLOCKED;

2. Активирую монитор:
SET EVENT MONITOR DLOCK_DTL_EVT STATE = 1;

3. Создаю ситуацию с взаимной блокировкой так, чтобы одна из двух сессий отвалилась по таймауту

4. Дезактивирую монитор
SET EVENT MONITOR DLOCK_DTL_EVT STATE = 0;


В таблицах нет ни одного пойманного дедлока, хотя гарантировано они были.

Вопрос: как отловить-то? ;)
...
Рейтинг: 0 / 0
Event Monitor не ловит deadlock'и
    #35560001
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gnomov

В таблицах нет ни одного пойманного дедлока, хотя гарантировано они были.



Как вы это определили?

P.S. lock timeout != deadlock
...
Рейтинг: 0 / 0
Event Monitor не ловит deadlock'и
    #35560543
Gnomov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Делаем блокировку в первой сессии:

db2 +c
update w set w='a' where id = 1

2. Пытаемся в другой сессии тоже изменить эту запись:
db2 +c
update w set w='b' where id = 1

3. Через время таймаута получаем на второй сессии:
SQL0911N The current transaction has been rolled back because of a deadlock or timeout. Reason code "68". SQLSTATE=40001


Но монитор событий не ловит. Как быть?
...
Рейтинг: 0 / 0
Event Monitor не ловит deadlock'и
    #35560583
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это вы lock timeout вызвали (SQL0911, rc=68).
Чтоб deadlock вызвать (SQL0911, rc=2) - сделайте так:

Код: plaintext
1.
2.
3.
4.
5.
time | app1                                   | app2
_____|________________________________________|_______________________________________
1    | db2 +c update w set w='a' where id = 1 | 
2    |                                        | db2 +c update w set w='a' where id = 2
3    | db2 +c update w set w='a' where id = 2 |
4    |                                        | db2 +c update w set w='a' where id = 1
...
Рейтинг: 0 / 0
Event Monitor не ловит deadlock'и
    #35560621
Gnomov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. На первом этапе возникает эксклюзивная блокировка на запись
2. На втором этапе, несмотря на то, что изменяется другая запись, идет RC=68 (то есть не могу реализовать твой сценарий по генерации RC=68)

Кстати, а как RC=2 ловить?
...
Рейтинг: 0 / 0
Event Monitor не ловит deadlock'и
    #35560674
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gnomov1. На первом этапе возникает эксклюзивная блокировка на запись
2. На втором этапе, несмотря на то, что изменяется другая запись, идет RC=68 (то есть не могу реализовать твой сценарий по генерации RC=68)

Кстати, а как RC=2 ловить?
db2 alter table w add constraint w_pk primary key (id)
db2 alter table w volatile
Перезапустить мой тест.

Еще раз:
rc=68 - это locktimeout, ловится так .
rc=2 - deadlock, ловится этим вашим event monitor'ом.

Мой сценарий не мог реализоваться видимо из-за того, что оптимизатор выбирал табличное сканирование вместо индексного доступа.
Эти 2 команды должны это полечить.
...
Рейтинг: 0 / 0
Event Monitor не ловит deadlock'и
    #35566211
Gnomov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein
db2 alter table w add constraint w_pk primary key (id)
db2 alter table w volatile
Перезапустить мой тест.

Еще раз:
rc=68 - это locktimeout, ловится так .
rc=2 - deadlock, ловится этим вашим event monitor'ом.

Мой сценарий не мог реализоваться видимо из-за того, что оптимизатор выбирал табличное сканирование вместо индексного доступа.
Эти 2 команды должны это полечить.

Марк, спасибо!

1. RC=2 воспроизвелся и отловился монитором.
2. RC=68 для DB2 v8.2 отловить возможно? (по ссылки отличный способ, но только для 9ки)
...
Рейтинг: 0 / 0
Event Monitor не ловит deadlock'и
    #35569042
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gnomov2. RC=68 для DB2 v8.2 отловить возможно? (по ссылки отличный способ, но только для 9ки)То же самое поддерживается в v8.2.9 и выше.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Event Monitor не ловит deadlock'и
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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