Предотвратит ли секционирование взаимоблокировки базы данных, когда они вызваны строками, которые в противном случае были бы разделены на две секции?

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

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


person Erwin Mayer    schedule 11.09.2011    source источник


Ответы (1)


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

T1: get lock L1;
    get lock L2;

T2: get lock L2;
    get lock L1;

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

person wildplasser    schedule 11.09.2011
comment
Если разделение сделает так, что у нас будет четыре разных блокировки вместо 2 (что должно быть в случае с таблицами, созданными вручную для каждого подмножества), тогда это сработает. - person Erwin Mayer; 12.09.2011