分区会防止数据库死锁,当它们是由否则会进入两个分区的行引起的?

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 锁引用不同表中的对象,则不会发生任何变化;只有事件的顺序会导致死锁。

【讨论】:

如果分区使得我们有四个不同的锁而不是两个(这应该是为每个“子集”手动创建表的情况),那么它会起作用。

以上是关于分区会防止数据库死锁,当它们是由否则会进入两个分区的行引起的?的主要内容,如果未能解决你的问题,请参考以下文章

更新提交以避免死锁

Windows Server 群集仲裁

固态硬盘装系统分区时扇区是4096还是2048好?为啥分区时固态硬盘默认扇区不是4K而是2048

PL/SQL 插入和分区

Spark读取HDFS数据分区参考

MySQL分区表-按月份归类