Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免数据库死锁_Java_Concurrency_Db2_Deadlock - Fatal编程技术网

Java 如何避免数据库死锁

Java 如何避免数据库死锁,java,concurrency,db2,deadlock,Java,Concurrency,Db2,Deadlock,我有一个集群应用程序正遭受数据库死锁的困扰 它是一个使用JPA和hibernate的j2ee应用程序。数据库是DB28.1onz/OS,设置为页面锁定(这是公司的要求) 问题是,主键是作为序列生成的,如果系统有任何重大负载,在尝试插入记录时通常会死锁 是否有减少死锁概率的“最佳实践”?“是否有减少死锁概率的“最佳实践” 死锁意味着2个(或更多)进程、2个(或更多)资源和两个不同的访问顺序 过程1必须得到A和B 进程2必须得到B并等待A 如果每个进程都能获得第一个,死锁的发生率就会降低 由于您在整

我有一个集群应用程序正遭受数据库死锁的困扰

它是一个使用JPA和hibernate的j2ee应用程序。数据库是DB28.1onz/OS,设置为页面锁定(这是公司的要求)

问题是,主键是作为序列生成的,如果系统有任何重大负载,在尝试插入记录时通常会死锁

是否有减少死锁概率的“最佳实践”?

“是否有减少死锁概率的“最佳实践”

死锁意味着2个(或更多)进程、2个(或更多)资源和两个不同的访问顺序

过程1必须得到A和B

进程2必须得到B并等待A

如果每个进程都能获得第一个,死锁的发生率就会降低

由于您在整个页面上处于死锁状态,因此很难确保每个人都获得相同的页面来启动他们的事务

您可以通过确保页面中的行被广泛地扰乱来减少冲突


您可以尝试通过引入“您必须先获取此行”来减少冲突,该行将有效地支持单线程应用程序。

是否有办法确保这些行将被分发?我不确定数据库如何确定将行粘贴到哪个页面(我假设它基于键)。向键中添加另一个随机数(或UUID)字段是否有助于分布行?@Jesse:UUID可能足够随机。你有非常随机的随机数生成器。您还可以通过某个属性进行索引,该属性是一个与导致冲突的分布不同的良好分布。跟进:在实施随机数建议后,死锁大大减少。感谢所有帮助过我的人。