即使在不同字段上更新也会发生死锁

时间:2014-04-18 22:12:46

标签: firebird database-deadlocks

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

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

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

我仍然看到死锁并且不明白为什么。我怎样才能避免死锁?

1 个答案:

答案 0 :(得分:1)

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

您应该考虑按表或记录数据包使用事务。也可以使用只读事务来读取,并使用其他事务来编写,频繁提交,允许其他事务更新记录。

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