我一直在尝试开发从Firebird数据库到其他数据库的复制。
我只是在名为replication_flag
的表中添加一个新字段。
我的复制程序启动读取已提交事务,选择行,更新此行replication_flag
字段,然后提交或回滚。
我的生产客户端不更新此replication_flag
字段并使用读提交的隔离。我唯一的一个复制客户端只更新此replication_flag
字段,不会更新任何其他字段。
我仍然看到死锁并且不明白为什么。我怎样才能避免死锁?
答案 0 :(得分:1)
您的复制应用程序似乎使用大型事务更新每个表的每个记录。可能最后,整个数据库已被“锁定”。
您应该考虑按表或记录数据包使用事务。也可以使用只读事务来读取,并使用其他事务来编写,频繁提交,允许其他事务更新记录。
一个有趣的幻灯片:http://slideplayer.us/slide/1651121/