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

Откуда:
Сообщений: 47
Здравствуйте,
проблема в следующем:
запрос вида insert...Select виснет по 20..1000 секунд при каждом выполнении. select отрабатывает менее секунды.
на таблицу в которую вставляются данные периодически выставляются блокировки из разных сервисов запросом:
LOCK TABLE Имя_таблицы IN EXCLUSIVE MODE NOWAIT
Более опытные коллеги сказали, что эта блокировка не вызывает зависания. Я не знаю уже куда копать помогите пожалуйста.
6 фев 12, 09:05    [12038147]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
LZTMEvg
...
Более опытные коллеги сказали, что эта блокировка не вызывает зависания. Я не знаю уже куда копать помогите пожалуйста.
Вызывает.
6 фев 12, 09:08    [12038159]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
LZTMEvg
Member

Откуда:
Сообщений: 47
Ого!!!! блин тут вся система на этих блокировках...
т.е. получается если во время insert таблица залочена то запрос в аут на неопределенный срок?
6 фев 12, 09:11    [12038164]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
LZTMEvg
Ого!!!! блин тут вся система на этих блокировках...
т.е. получается если во время insert таблица залочена то запрос в аут на неопределенный срок?
Но ведь для того и лочится, чтобы больше никто не мог ничего сделать.
6 фев 12, 09:18    [12038193]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
Bfink
Member

Откуда: Москва
Сообщений: 2797
LZTMEvg,

Может просто нет индексов на внешних ключах?
6 фев 12, 09:22    [12038214]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
LZTMEvg
Member

Откуда:
Сообщений: 47
а разве NOWAIT не указывает на то, чтобы отпустить таблицу при следующем обращении к ней.
и Bfink (простите за глупый вопрос просто я новичек а путью помочь никто не хочет) как проверить есть ли индексы на внешних ключах и как они могут помочь при блокировках.
6 фев 12, 09:36    [12038274]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
N.Ivankin
Member

Откуда: Извините, но всё-таки СПб
Сообщений: 969
LZTMEvg
а разве NOWAIT не указывает на то, чтобы отпустить таблицу при следующем обращении к ней.
и Bfink (простите за глупый вопрос просто я новичек а путью помочь никто не хочет) как проверить есть ли индексы на внешних ключах и как они могут помочь при блокировках.


NOWAIT указывает, что не надо ждать блокировки, если таблица уже заблокирована.
LOCK ... NOWAIT отсохнет, если LOCK уже выполнился и не снят.
6 фев 12, 09:38    [12038285]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
Не, ну можно поcмотреть blocking_session из v$session для твоей сессии и посмотреть, кого ты ждешь. v$lock опять же все покажет. Но если вся система построена на LOCK TABLE, то у авторов системы явные проблемы в мозге.
6 фев 12, 09:47    [12038353]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
LZTMEvg
Member

Откуда:
Сообщений: 47
согласен, сейчас дорылся в коде до того что:
допустим есть таблица Т1 и два сервиса С1 и С2
сервисы работают на основании событий от оборудования.

приходит событие 1 С1 блокирует Т1 и делает insert
приходит событие 2 С2 пытается заблокировать T1 у него это не получается и так как NOWAIT продолжает работать.

И самое интересное в том, что в процедуре обработки события в С2 написан следующий код:

procedure ....
begin
proc_lock(Т1); -- процедура выставляющая блокировку на таблицу (в данной случае она не выставилась)
......
запрос на insert в Т1 который виснет
......
end;

т.е. в коде нигде, блин вообще нигде нет проверки залочена таблица или нет и никак это не обрабатывается.
6 фев 12, 10:03    [12038464]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
Осталось узнать, а зачем собственно блокировка вешается.
6 фев 12, 10:07    [12038486]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
grey_narn
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 178
LZTMEvg
procedure ....
begin
proc_lock(Т1); -- процедура выставляющая блокировку на таблицу (в данной случае она не выставилась)
......
запрос на insert в Т1 который виснет
......
end;

т.е. в коде нигде, блин вообще нигде нет проверки залочена таблица или нет и никак это не обрабатывается.

На всякий случай --- если там LOCK NOWAIT и она не выставилась, то в proc_lock возникнет EXCEPTION ORA-00054 Resource busy and acquire with NOWAIT specified. То есть, чтобы _не проверять_ результат блокировки, надо явно тушить это исключение. Если кляузы exception when ... там нет, то это и есть "проверка" --- блокировка отвалилась, дальнейший код не выполняется.
6 фев 12, 10:10    [12038499]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
-2-
Member

Откуда:
Сообщений: 15330
LZTMEvg
нигде нет проверки залочена таблица или нет и никак это не обрабатывается.
если не обрабатывается, то и проверять незачем.

Сообщение было отредактировано: 6 фев 12, 10:13
6 фев 12, 10:11    [12038503]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
Mumytroll
Member

Откуда:
Сообщений: 224
wurdu
Осталось узнать, а зачем собственно блокировка вешается.


Знакомый мед :) Знакомый код :)

Обычная идея, давайте заболотим таблицу, обработаем пришедшие события, а потом отпустим и все ради того что бы гарантированно отработать все пришедшие события. А новые потом обработаем.
6 фев 12, 10:15    [12038528]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
grey_narn
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 178
Mumytroll
Обычная идея, давайте заболотим таблицу, обработаем пришедшие события, а потом отпустим и все ради того что бы гарантированно отработать все пришедшие события. А новые потом обработаем.

Так блокируется-то у ТС именно та таблица (Т1), в которую результаты обработки пишутся, если я правильно понимаю. То есть мне пока все равно не понятно - на кой?
6 фев 12, 10:19    [12038554]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
N.Ivankin
Member

Откуда: Извините, но всё-таки СПб
Сообщений: 969
grey_narn,

ну очень пессимистические блокировки
6 фев 12, 10:21    [12038563]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
grey_narn
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 178
grey_narn
То есть мне пока все равно не понятно - на кой?

А, я тупой. Понял, да.
6 фев 12, 10:22    [12038569]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
-2-
Member

Откуда:
Сообщений: 15330
grey_narn
не понятно - на кой?
непрерывная нумерация?
6 фев 12, 10:32    [12038619]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
LZTMEvg
Member

Откуда:
Сообщений: 47
grey_narn - дело в том, что подпроцедуре это исключение обрабатывается и транзакция отстреливается но дальше управление передается основной процедуре, которая ничего не знает о блокировке и спокойно продолжает выполняться....
6 фев 12, 12:55    [12039599]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
LZTMEvg
Member

Откуда:
Сообщений: 47
Всем спасибо за ответы, теперь есть куда работать.
6 фев 12, 13:35    [12040043]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
йхаха
Guest
Bfink
LZTMEvg,
Может просто нет индексов на внешних ключах?


это - пять. Ты долго думал, наверно :)
7 фев 12, 10:43    [12045233]     Ответить | Цитировать Сообщить модератору
 Re: Требуется срочная помощь. Блокировки. Зависание  [new]
Bfink
Member

Откуда: Москва
Сообщений: 2797
йхаха
Bfink
LZTMEvg,
Может просто нет индексов на внешних ключах?


это - пять. Ты долго думал, наверно :)


Это чаще бывает, чем эксклюзивные блокировки с переключениями сессий
7 фев 12, 16:25    [12048256]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить