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

Откуда: Из северных лесов
Сообщений: 192
Здравствуйте. Недавно столкнулся с проблемой блокирования (blocking locks). Пользовательские сеансы подвисают, EM четко показывает что есть множество блокировок(blocking locks). Вижу операторы, которые ожидают своей очереди чтобы установить блокировку (lock). Самое удивительное, что этот оператор - insert (несколько вставок в 2 таблицы, мастер и деталь, если быть точным).

Все то о чем пришет гуру Том Кайт не подходит (значения первичного ключа генерируются последовательностями, на всех внешних ключах есть индексы).

Создаю тестовый пример, повторяющий оператор, приведший к блокированию (blocking locks), и проверяю v$locked_object и оттуда узнаю что данный пример, вставляющий данные в 2 таблицы, расставляет блокировки аж на 10 таблиц. На те 2 таблицы куда идет непосредственно вставка он ставит блокировки с типом 3 (не могу найти, что это означает) и на остальные 8 - тип 2. Оставшиеся 8 таблиц - это таблицы, на которые у 2-х основных есть внешние ключи.

Пробовал запускать до 4-х тестовых примеров одновременно - все 4 отрабатывали без проблем. Вообще заставить тестовый пример зависнуть удалось только когда полностью заблокировал одну из 8 родительских таблиц в эксклюзивном режиме до его выполнения.

Проверял на тестовых схемах оракла, все точно также, вставка в employees порождает блокировку в departments.

Собственно вопросы:
1) что это за блокировки в родительских таблицах, я о них слышу впервые и в литературе не встречал?
2) Есть ли у кого-нибудь мысли о том, как поймать оператор, лежащий в основе проблемы, то есть с которого все начинается.

OS: Windows 2003 Server SP1, Oracle: 10gR2(10.2.0.1)
17 дек 07, 08:44    [5056107]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о блокировках  [new]
sendal
Guest
Dr_Notterberg

....
Собственно вопросы:
1) что это за блокировки в родительских таблицах, я о них слышу впервые и в литературе не встречал?
....

OS: Windows 2003 Server SP1, Oracle: 10gR2(10.2.0.1)


Ну, IMHO,лучше по первому вопросу внимательно почитать в документации в главе "Concurrency Control, Indexes, and Foreign Keys" .
17 дек 07, 09:02    [5056133]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о блокировках  [new]
Dr_Notterberg
Member

Откуда: Из северных лесов
Сообщений: 192
Спасибо, первый вопрос снят. Остается второй
17 дек 07, 10:13    [5056337]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о блокировках  [new]
Fyodor Zevako
Member

Откуда:
Сообщений: 570
А вы посмотрите какие у вас висят. Думаю все они могут вызвать такую ситуацию.

Другой вариант - пристально смотреть в курсоры сессии которая блокирует.
17 дек 07, 18:44    [5059774]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о блокировках  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
v$session, группа полей %WAIT% выведет на блокирующую сессию.
Далее смотрим кто там выполняется (либо program в v$session, либо вычисляем по курсорам сессии) и идем этого кого-то исследовать под микроскопом (например, включив трассировку).
17 дек 07, 18:47    [5059789]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить