美文网首页
InnoDB死锁3

InnoDB死锁3

作者: JunChow520 | 来源:发表于2020-07-06 10:50 被阅读0次

数据库错误:

[ error ] [10501]SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction

InnoDB的行锁和解锁都是针对主键索引的,如果查询(SELECT)时根据索引锁表,但更新(UPDATE)时却不是通过主键更新,那么等待解锁查询的进程将会报1213错误,程序可能返回一个NULL值。

错误排查,执行SHOW ENGINE INNODB STATUS命令已获取INNODB引擎当前状态信息,其中LAST DETECTED DEADLOCK记录着最近一次的死锁信息。

$ SHOW ENGINE INNODB STATUS;

同时可结合查询数据库内置表information_scheme库中的INNODB_TRXINNODB_LOCKSINNODB_LOCK_WAIT三张表,获取事务的状态信息。

死锁发生需要满足两个条件

  • 至少有两个请求同时在执行同一个事务
  • 请求1锁定某一行且未提交事务,与此同时请求2也需要update/delete这一行,此时请求2会进入锁等待(LOCK WAIT)状态,直到出现死锁(DEAD LOCK)。

死锁出现场景

事务A在等待事务B释放的行锁,而事务B在等待事务A释放的行锁,事务A和事务B在相互等待对方的资源释放就进入了死锁状态。

如何减少死锁的发生概率呢?

  • 事务操作锁定的行数要越少,以及更加精确的索引条件。
  • 保证事务具有较短的执行时间,执行完后立即提交。

相关文章

  • InnoDB死锁3

    数据库错误: InnoDB的行锁和解锁都是针对主键索引的,如果查询(SELECT)时根据索引锁表,但更新(UPDA...

  • mysql 死锁排查

    一、show ENGINE INNODB status查看死锁位置,分析。 二、首先解决死锁可以从死锁发生的条件入...

  • 死锁排查监控

    死锁监控 可以在任意库下创建innodb_lock_monitor表,这样innodb status信息会完整且每...

  • MySQL Innodb死锁

    UPDATE MERGE INDEX DEADLOCK INNODB UPDATE的原理,行级锁的前提条件是建立索...

  • InnoDB死锁2

    死锁的产生原因 死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源而导致的恶性循环,因争夺资源而...

  • 15.mysql锁问题(2)-InnoDB

    5. InnoDB 行锁 5.1 行锁介绍 行锁特点 :偏向InnoDB 存储引擎,开销大,加锁慢;会出现死锁;锁...

  • 数据库死锁排查

    1 数据库死锁排查 select*frominformation_schema.innodb_trx 2 kill...

  • InnoDB锁与死锁

    InnoDB 有哪些锁?其表现和意义是什么?增删改查分别加什么锁?死锁是怎么产生的?怎么分析和避免?本文对这些问题...

  • mysql性能优化方式

    explain查看执行计划 show engine innodb status查看最近一次的死锁状态 option...

  • 关于innodb中锁的讨论

    使用mysql的过程中经常会遇到死锁,语句show engine innodb status可以列出详细的inno...

网友评论

      本文标题:InnoDB死锁3

      本文链接:https://www.haomeiwen.com/subject/imjbqktx.html