2010-12-10 81 views
3

我有一组两个查询,我偶尔会看到死锁。innodb的Mysql low_priority:选择哪个查询应回滚到死锁

一种是只需偶尔运行的离线查询。我希望某种方式让innodb更喜欢在发生死锁时将此查询返回,而不是其他方式,比如low_priority关键字为myisam工作的方式。

有没有什么办法可以告诉innodb在发生死锁的情况下回滚给定的查询是相对好的?

回答

1

回答你的问题:不,没有办法。

只要前台进程不会使前台进程死锁,您可以尝试提前获取所有的锁? (SELECT ... FOR UPDATE)。

另一种选择是更改后台进程以按照与前台进程相同的顺序获取锁。

2

There's a work-around解决方案来自MySQL论坛,通过更新(更多)虚拟行来赋予事务更高的优先级。

InnoDB使用事务已插入,更新或删除的行数作为事务的“大小”度量,并回滚较小的行。