死锁是否会导致延迟执行时间等性能问题?
答案 0 :(得分:1)
由于资源冲突,死锁会阻止查询运行。数据库引擎处理死锁的唯一常用方法是终止死锁中的一个进程,如果可能,重新运行它。
所以,是的,死锁会导致性能问题,因为引擎必须检测死锁然后处理它。通常,尽可能避免死锁是一种很好的做法。
这里有很多信息http://dev.mysql.com/doc/refman/5.0/en/innodb-deadlocks.html
答案 1 :(得分:1)
当你遇到死锁时,其中一个交易会被回滚。回滚事务对于服务器而言相对昂贵,并且消耗其在实际工作上花费的精力;而且,原始交易需要再次完成。
但是,您的目标应该是在应用程序中出现非常少量的死锁。如果1%的交易死锁,可能会太多。
幸运的是,InnoDB的设计者知道死锁是一个潜在的性能问题,并试图让InnoDB回滚那些做“少工作”的交易。无论哪一项交易自开始以来所做的工作较少,都会被回滚。因此,如果一个事务已经完成了一百万次插入,而另一个事务只完成了一次,则一次插入事务可能会被回滚。
InnoDB在回滚大型交易方面效率不高。在一个系统中,我看到一个事务需要45分钟才能回滚。
一般来说,如果您发现自己遇到了很多死锁,可能是因为应用程序设计问题。例如,如果您定期执行大量更新查询,则可能表示您的数据库未正确规范化(例如)。