[[389778]]
本文转载自微信公众号「MySQL技术」,锁死锁作者MySQL技术。等待转载本文请联系MySQL技术公众号。问题
前言:
在 MySQL 运维过程中,分析锁等待和死锁问题是锁死锁令各位 DBA 及开发同学非常头痛的事。出现此类问题会造成业务回滚、等待卡顿等故障,问题特别是分析业务繁忙的系统,出现死锁问题后影响会更严重。锁死锁本篇文章我们一起来学习下什么是等待锁等待及死锁,出现此类问题又应该如何分析处理呢?问题
出现锁等待或死锁的原因是访问数据库需要加锁,那你可能要问了,为啥要加锁呢?原因是为了确保并发更新场景下的数据正确性,保证数据库事务的隔离性。
试想一个场景,如果你要去图书馆借一本《高性能MySQL》,为了防止有人提前把这本书借走,你可以提前进行预约(加锁),这把锁可以怎么加?
锁的粒度越细,并发级别越高,实现也更复杂。
锁等待也可称为事务等待,后执行的事务等待前面处理的事务释放锁,但是等待时间超过了 MySQL 的锁等待时间,就会引发这个异常。等待超时后的报错为“Lock wait timeout exceeded...”。
死锁发生的原因是两个事务互相等待对方释放相同资源的锁,从而造成的死循环。产生死锁后会立即报错“Deadlock found when trying to get lock...”。
下面我们以 MySQL 5.7.23 版本为例(隔离级别是 RR ),来复现下上述两种异常现象。
- mysql> show create table test_tb\G
(责任编辑:时尚)
银保监会:前10个月房地产合理贷款需求得到满足 信贷结构持续优化
快,极致性能!深度剖析IBM FlashSystem全闪存阵列
力合微(688589.SH)2020年归母净利2782.05万元 基本每股收益0.33元
身在网络时代你知道你的WiFi怎么来的吗?看WiFi模块四种工作模式