10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国Ltr)- 41.6 mb
PDF (A4)- 41.7 mb
HTML下载(TGZ)- 9.3 mb
HTML下载(Zip)- 9.4 mb
手册(TGZ)- 262.1 kb
手册(Zip)- 372.2 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

15.7.5 InnoDB中的死锁

死锁是一种不同的事务无法进行的情况,因为每个事务都持有另一个事务需要的锁。因为两个事务都在等待资源可用,所以它们都不会释放所持有的锁。

当事务锁定多个表中的行(通过诸如更新选择……更新),但顺序相反。当这样的语句锁定索引记录和间隙的范围时,也会发生死锁,由于时间问题,每个事务获得一些锁,但没有获得其他锁。有关死锁示例,请参见第15.7.5.1节“一个InnoDB死锁的例子”

为了减少死锁的可能性,使用事务而不是锁表语句;保持插入或更新数据的事务足够小,使它们不会长时间保持打开状态;当不同的事务更新多个表或大范围的行时,使用相同的操作顺序(如选择……更新);中使用的列上创建索引选择……更新而且更新……在哪里语句。死锁的可能性不受隔离级别的影响,因为隔离级别更改了读操作的行为,而死锁则是由于写操作而发生的。有关避免死锁和从死锁中恢复的更多信息,请参见第15.7.5.3节“如何最小化和处理死锁”

当启用死锁检测(默认值)并且发生死锁时,InnoDB检测条件并回滚其中一个事务(受害者)。方法禁用死锁检测innodb_deadlock_detect变量,InnoDB依赖于innodb_lock_wait_timeout设置在发生死锁时回滚事务。因此,即使您的应用程序逻辑是正确的,您仍然必须处理必须重试事务的情况。控件中的最后一个死锁InnoDB用户事务,使用显示引擎innodb状态.如果频繁的死锁突出了事务结构或应用程序错误处理的问题,则启用innodb_print_all_deadlocks将有关所有死锁的信息打印到mysqld错误日志。有关如何自动检测和处理死锁的详细信息,请参见第15.7.5.2节,“死锁检测”