Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Типы блокировок  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
Верно ли я понимаю, что в документации неверно указано, что SELECT FOR UPDATE производит RS-блокировку?

Но, что странно, то же самое указано и в другом месте той же документации.

Делаю сначала SELECT x INTO a FROM t FOR UPDATE
Потом смотрю SELECT * FROM v$lock
И там для моей транзакции колонка LMODE имеет значение 3 (= RX)
15 окт 10, 15:38    [9615271]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
Думаю, не стоит создавать новый топик ради моей проблемы:
Trace
Deadlock graph:
---------Blocker(s)-------- ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
(000246e7 = PARENT_TABLE)
TM-000246e7-00000000 31 402 SX 24 445 SS
(000246f5 = CHILD_TABLE)
TM-000246f5-00000000 24 445 SX 22 404 X
(000246e7 = PARENT_TABLE)
TM-000246e7-00000000 22 404 SSX 31 402 SX

session 402: DID 0001-001F-0006359C session 445: DID 0001-0018-00006FC3
session 445: DID 0001-0018-00006FC3 session 404: DID 0001-0016-00046CDF
session 404: DID 0001-0016-00046CDF session 402: DID 0001-001F-0006359C

Rows waited on:
Session 445: obj - rowid = 000246F6 - AAAkb2AAuAAAD9+AAA
(dictionary objn - 149238, file - 46, block - 16254, slot - 0)
(149238 = IDX$CHILD_TABLE$PK_COLUMN)
Session 404: no row
Session 402: no row

Current SQL statement for this session:
SELECT ID FROM PARENT_TABLE FOR UPDATE

Information on the OTHER waiting sessions:
Session 445:
pid=24 serial=54189 audsid=12997553 user: 321/CORPORATE
Current SQL Statement:
DELETE FROM CHILD_TABLE WHERE PK_COLUMN = :B1
Session 404:
pid=22 serial=13628 audsid=12998607 user: 321/CORPORATE
Current SQL Statement:
LOCK TABLE CHILD_TABLE IN EXCLUSIVE MODE
End of information on OTHER waiting sessions.

CHILD_TABLE связана с PARENT_TABLE внешним ключем без индекса по нему

Похоже, последовательность такая:
1. 404 - LOCK TABLE PARENT_TABLE IN SHARE ROW EXCLUSIVE MODE
PARENT_TABLE/SSX - LOCK ACQUIRED
2. 445 - DELETE FROM CHILD_TABLE
CHILD_TABLE/SX - LOCK ACQUIRED
PARENT_TABLE/SS - WAITING
4. 404 - LOCK TABLE CHILD_TABLE IN EXCLUSIVE MODE
CHILD_TABLE/X - WAITING
5. 402 - SELECT ID FROM PARENT_TABLE FOR UPDATE
PARENT_TABLE/SX - WAITING
6. DEADLOCK DETECTED

Вопрос:
Почему на шаге 2 происходит ожидание PARENT_TABLE/SS, если режим SSX допускает блокирование SS другими транзакциями??
Или я что-то не понимаю в документации?

:(
15 окт 10, 17:48    [9616465]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
--Eugene--
Верно ли я понимаю, что в документации неверно указано, что SELECT FOR UPDATE производит RS-блокировку?

Но, что странно, то же самое указано и в другом месте той же документации.

Делаю сначала SELECT x INTO a FROM t FOR UPDATE
Потом смотрю SELECT * FROM v$lock
И там для моей транзакции колонка LMODE имеет значение 3 (= RX)

вы обратили внимание, на что накладывается RS-блокировка???
15 окт 10, 18:16    [9616679]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
pravednik
вы обратили внимание, на что накладывается RS-блокировка???
ну, (из второй таблицы) похоже, что на строку.
но что же тогда отображено в v$lock ?
15 окт 10, 18:31    [9616755]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
тоесть...


... ваще запутался
15 окт 10, 18:33    [9616761]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
--Eugene--
pravednik
вы обратили внимание, на что накладывается RS-блокировка???
ну, (из второй таблицы) похоже, что на строку.
но что же тогда отображено в v$lock ?

давайте вместе ))

столбец "Row Locks?"(блокировка строк) - значение Х, то есть эксклюзивная
столбец "Mode of Table Lock"(режим блокировки таблицы) - значение RS
15 окт 10, 18:36    [9616780]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
pravednik
столбец "Row Locks?"(блокировка строк) - значение Х, то есть эксклюзивная
столбец "Mode of Table Lock"(режим блокировки таблицы) - значение RS
а нафига они написали "Row Locks?" с вопросом на конце, а другую колонку назвали "Mode of Table Lock"?
я думал, что в первой колонке Х - это типа крестик, отвечающий "да" на вопрос "Row Locks?"
15 окт 10, 18:41    [9616811]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
--Eugene--
pravednik
столбец "Row Locks?"(блокировка строк) - значение Х, то есть эксклюзивная
столбец "Mode of Table Lock"(режим блокировки таблицы) - значение RS
а нафига они написали "Row Locks?" с вопросом на конце, а другую колонку назвали "Mode of Table Lock"?
я думал, что в первой колонке Х - это типа крестик, отвечающий "да" на вопрос "Row Locks?"

вы ниже таблички читали ?

PS: пятница.. грешно щас таким заниматься ;))
на пивасик лучше сходите ;)
15 окт 10, 18:43    [9616817]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
Василек Тюльпанович
Guest
--Eugene--
Верно ли я понимаю, что в документации неверно указано, что SELECT FOR UPDATE производит RS-блокировку?


https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=344765#3208654
15 окт 10, 19:33    [9617083]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
Василек Тюльпанович
https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=344765#3208654
Вон оно че, Тюльпаныч!
Вон оно че!

А в доке так и не подправили! Чтоб их!
15 окт 10, 19:43    [9617162]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
--Eugene--
Василек Тюльпанович
https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=344765#3208654
Вон оно че, Тюльпаныч!
Вон оно че!

А в доке так и не подправили! Чтоб их!

пиндец)))... вы понимаете, что такое баг ))))??
15 окт 10, 22:04    [9617783]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
pravednik
пиндец)))... вы понимаете, что такое баг ))))??
баги имеют свойство исправляться
17 окт 10, 15:46    [9622166]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
Герань Кактусовна
Guest
pravednik
пиндец)))... вы понимаете, что такое баг ))))??
Эээ... где пиндец?

Чтобы исправить Bug в 9.2.0.6 изменили режим блокирования при select for update на RX. А отразить этот факт удосужились только в доке по 11g, хотя на момент выхода доки по 10.2.0.1 с момента изменений в режиме блокирования прошла куча времени
17 окт 10, 16:28    [9622287]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
Новый вопрос (топик заводить не стал):

В результате чего на таблицу может быть наложена блокировка типа SHARE ROW EXCLUSIVE (SSX) кроме как путем явной блокировки (LOCK TABLE) ?

Проблема в том, что в трейсе по дедлоку написано следующее:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
TM-00025ab4-00000000 39 210 SX SSX 38 334 SX SSX
TM-00025ab4-00000000 38 334 SX SSX 39 210 SX SSX

Явным образом (с помощью LOCK TABLE) таблица нигде в коде не блокируется. Вот мне и интересно, чем это может быть вызвано?

Спасибо.
11 ноя 10, 15:58    [9762059]     Ответить | Цитировать Сообщить модератору
 Re: Типы блокировок  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
неиндексированные fk ваш случай тут Содержимое графа кардинально изменилось по сравнению с предыдущими сценариями взаимной блокировки
11 ноя 10, 16:02    [9762114]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить