MySQL InnoDB设置死锁检测的方法

  死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,可以认为如果一个资源被锁定,它总会在以后某个时间被释放。而死锁发生在当多个进程访问同一数据库时,其中每个进程拥有的锁都是其他进程所需的,由此造成每个进程都无法继续下去。
  InnoDB的并发写操作会触发死锁,InnoDB也提供了死锁检测机制,可以通过设置innodb_deadlock_detect参数可以打开或关闭死锁检测:
  
  
  innodb_deadlock_detect=上,打开死锁检测,数据库发生死锁时自动回滚(默认选项)
  innodb_deadlock_detect=关,关闭死锁检测,发生死锁的时候,用锁超时来处理,通过设置锁超时参数innodb_lock_wait_timeout可以在超时发生时回滚被阻塞的事务
  
  
  还可以通过设置InnDB监视器来进一步观察锁冲突详细信息
  设置InnoDB监控方法
  建立测试库
  mysql>创建数据库测试;
  查询好了,1行影响(0.20秒)
  mysql>使用测试
  完成阅读表信息表和列的名称
  你可以关掉这个功能一个更快的启动——
  
  
  数据库修改
  mysql>创建表innodb_monitor (INT)引擎=innodb;
  查询好,0行影响(1.04秒)
  
  
  mysql>创建表innodb_tablespace_monitor (INT)引擎=innodb;
  查询好,0行影响(0.70秒)
  
  
  mysql>创建表innodb_lock_monitor (INT)引擎=innodb;
  查询好,0行影响(0.36秒)
  
  
  mysql>创建表innodb_table_monitor (INT)引擎=innodb;
  查询好,0行影响(0.08秒)
  
  
  可以通过显示引擎innodb状态命令查看死锁信息
  mysql>显示引擎innodb状态\ G
  * * * * * * * * * * * * * * * * * * * * * * * * * * * 1。行* * * * * * * * * * * * * * * * * * * * * * * * * * *
  ,类型:InnoDB
  ,名称:
  状态:
=====================================
  2018-05-10 09:17:10 0 x7f1fbc21a700 INNODB监视器输出
=====================================
  每秒平均计算从过去46秒
  - - - - - - - - - - - - - - - - - -
  后台线程
  - - - - - - - - - - - - - - - - - -
  srv_master_thread循环:53 srv_active, 240099年0 srv_shutdown srv_idle
  srv_master_thread日志刷新和写道:0
  - - - - - - - - - - -
  信号量
  - - - - - - - - - - -
  数组操作系统等信息:预订数2007
  操作系统等信息数组:信号计数1987
  RW-shared旋转3878、5594轮,操作系统等1735
  91年RW-excl旋转3轮,操作系统等4
  RW-sx旋转1,30轮,操作系统等待1
  自旋轮每等:1.44 RW-shared, 30.33 RW-excl, 30.00 RW-sx
  - - - - - - - - - - - -
  交易
  - - - - - - - - - - - -
  Trx id计数器78405
  清洗完成硫氧还蛋白的n: o & lt;78404年撤销n: o & lt;10个状态:运行但闲置
  历史列表长度21
  每个会话的事务列表:
  ——交易421249967052640,没有开始
  0锁结构(s),堆大小1136,0行锁(s)
  - - - - - - - - - -
  文件I/O
  - - - - - - - - - -
  I/O的线程0状态:等待完成aio请求(插入缓冲线程)
  I/O的线程1状态:等待完成aio请求(日志线程)
  I/O的线程2状态:等待完成aio请求(读线程)
  .............................................................................
  .............................................................................
  .............................................................................
     

MySQL InnoDB设置死锁检测的方法