死锁甚至会在不同的字段上更新



我一直在尝试开发从Firebird数据库到其他数据库的复制。我只是在名为replication_flag的表中添加一个新字段。

我的复制程序启动一个读提交事务,选择行,更新行的replication_flag字段,然后提交或回滚。

我的生产客户端不更新此replication_flag字段,而是使用读提交隔离。我唯一的一个复制客户端只更新此replication_flag字段,不更新任何其他字段。

我仍然看到死锁,不明白为什么。如何避免死锁?

您的复制应用程序似乎使用了一个大型事务来更新每个表的每个记录。最后,可能整个数据库都被"锁定"了。

您应该考虑按表或记录数据包使用事务。还可以使用只读事务进行读取,并使用其他事务进行写入,同时频繁提交,从而允许其他事务更新记录。

一个有趣的幻灯片:http://slideplayer.us/slide/1651121/

相关内容

  • 没有找到相关文章

最新更新