Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Транзакция, 2 таблицы и мертвая блокировка, Мертвая блокировка 
V
    Опции темы
interv
  Дата 6.10.2014, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 24.1.2012

Репутация: нет
Всего: 4



Дано: Таблица 1 (Т1), Таблица 2 (Т2), Хранимка 1 (Х1), Хранимка 2 (Х2)
Задача: избежать взаимных блокировок.

Решение: 
Х1:
Код

  SET TRANSACTION ISOLATION LEVEL REPEATABLE READ 
  BEGIN TRAN
  SELECT TOP(1) Т1.id, Т2.id FROM Т1 FULL OUTER JOIN Т2 ON Т1.id=Т2.id;

    [[[Something]]]

  COMMIT TRAN


Х2:
Код

  SET TRANSACTION ISOLATION LEVEL REPEATABLE READ 
  BEGIN TRAN
  SELECT TOP(1) Т1.id, Т2.id FROM Т1 FULL OUTER JOIN Т2 ON Т1.id=Т2.id;

    [[[Something]]]

  COMMIT TRAN


Говнокод форева, но! Избегаю ли я мертвых блокировок?

И как можно избежать их(блокировок), если Х1 лочит сначала T1 а потом Т2, а Х2 наоборот Т2 а потом Т1
PM MAIL   Вверх
Zloxa
Дата 6.10.2014, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



Цитата(interv @  6.10.2014,  16:17 Найти цитируемый пост)
Задача: избежать взаимных блокировок.

По существу ответить не могу, могу лишь хинтануть.
Для того, чтобы избегать взаимных блокировок, необходимо захватывающим процессам обеспечить одинаковую последовательность захвата сущностей.

На сколько я могу оценить приведенный вами псевдокод, для обеспечения репитабл рид необходимо удержание шаред лока на разделяемом ресурсе. Шаред лок же не блокирует другие шаред локи. В связи с этим, полагаю, описанные вами процедуры, хоть и будут удерживать какую-то блокировку, но не должны друг друга блокировать в принципе. Тем более уж намертво. То, что приводит к блокировке и дедлоку, скорее всего, скрыто за "[[[Something]]]", потому никак не подлежит оценке

Это сообщение отредактировал(а) Zloxa - 6.10.2014, 16:56


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
interv
Дата 7.10.2014, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 24.1.2012

Репутация: нет
Всего: 4



Цитата(Zloxa @ 6.10.2014,  16:42)

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

Да... я тоже решил как-то прийти к этому решению... буду переписывать часть кода =)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.