分区会防止数据库死锁,当它们是由否则会进入两个分区的行引起的?
Posted
技术标签:
【中文标题】分区会防止数据库死锁,当它们是由否则会进入两个分区的行引起的?【英文标题】:Would partitioning prevent database deadlocks, when they are caused by rows that would otherwise be into two partitions? 【发布时间】:2011-09-11 21:58:18 【问题描述】:我正在与甚至不应该出现的死锁作斗争,因为我正在对表的互斥子集运行批量删除和插入。 然而,在多个线程(每个线程访问可能位于不同分区上的数据)上运行查询时,死锁似乎是不可避免的。
有关此问题的更多详细信息,另请参阅this question,但我想更笼统地说,是否建议使用分区来处理死锁。
【问题讨论】:
【参考方案1】:恕我直言,分区不会解决任何问题。死锁情况的事件链基本上是:
T1: get lock L1;
get lock L2;
T2: get lock L2;
get lock L1;
如果 T1 和 t2 都在中途,就会发生死锁,每个人都拥有一个锁。 如果 L1 和 L2 锁引用不同表中的对象,则不会发生任何变化;只有事件的顺序会导致死锁。
【讨论】:
如果分区使得我们有四个不同的锁而不是两个(这应该是为每个“子集”手动创建表的情况),那么它会起作用。以上是关于分区会防止数据库死锁,当它们是由否则会进入两个分区的行引起的?的主要内容,如果未能解决你的问题,请参考以下文章