MySQL · 引擎新特性 · 可开关的InnoDB死锁检测

  1. 云栖社区>
  2. 阿里云数据库ApsaraDB>
  3. 博客>
  4. 正文

MySQL · 引擎新特性 · 可开关的InnoDB死锁检测

zhaiwx_yinfeng 2016-09-25 22:34:54 浏览8576
展开阅读全文

在数据库系统中,死锁问题几乎是不可避免的,一般要么是资源互相占用导致,或者是系统内部的锁升级(在innodb内尤其普遍),尤其是糟糕的未经审查的SQL设计通常是导致死锁的元凶。在MySQL InnoDB引擎中,死锁的检测是通过深度遍历进行的,每一个需要等待的行锁请求都需要去检测是否可能产生死锁。

关于InnoDB事务锁,可以参阅我之前的一篇博客,这里不展开讨论:MySQL · 引擎特性 · InnoDB 事务锁简介

死锁检测是一个成熟的数据库系统必不可少的功能,但是!如果我们的应用SQL经过了充分合理的设计和验证,能够杜绝绝大部分死锁场景,这样的开销是否是可以避免的呢?

一个典型的场景是秒杀,也就是大量更新落到同一行记录上,此时大量请求同一个记录的排他行锁,导致了很长的等待队列,而死锁检测会去查询整个队列,而在整个过程中,一些全局资源(

网友评论

登录后评论
0/500
评论
zhaiwx_yinfeng
+ 关注
所属云栖号: 阿里云数据库ApsaraDB