Будет ли разбиение предотвращать взаимные блокировки базы данных, если они вызваны строками, которые в противном случае были бы разделены на два раздела? - PullRequest
1 голос
/ 12 сентября 2011

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

См. Также этот вопрос для получения более подробной информации по этому вопросу, но мне интересно, если говорить в целом, рекомендуется ли разделение для устранения взаимоблокировок.

1 Ответ

0 голосов
/ 12 сентября 2011

ИМХО разделение не решило бы ничего.Цепочка событий для ситуации тупика в основном такова:

T1: get lock L1;
    get lock L2;

T2: get lock L2;
    get lock L1;

Замыкание происходит, если T1 и t2 находятся на полпути, каждый из которых владеет одной блокировкой.Ничего не изменится, если блокировки L1 и L2 ссылаются на объекты в разных таблицах;только упорядочение событий вызывает тупик.

...