当前位置:当前位置:首页 >IT科技 >MySQL锁等待与死锁问题分析 正文

MySQL锁等待与死锁问题分析

[IT科技] 时间:2025-11-05 07:28:24 来源:益强IT技术网 作者:IT科技类资讯 点击:196次

本文转载自微信公众号「MySQL技术」,锁死锁作者MySQL技术。等待转载本文请联系MySQL技术公众号。问题

前言:

在 MySQL 运维过程中,分析锁等待和死锁问题是锁死锁令各位 DBA 及开发同学非常头痛的事。出现此类问题会造成业务回滚、等待卡顿等故障,问题特别是分析业务繁忙的系统,出现死锁问题后影响会更严重。锁死锁本篇文章我们一起来学习下什么是等待锁等待及死锁,出现此类问题又应该如何分析处理呢?问题

1.了解锁等待与死锁

出现锁等待或死锁的原因是访问数据库需要加锁,那你可能要问了,分析为啥要加锁呢?锁死锁原因是服务器托管为了确保并发更新场景下的数据正确性,保证数据库事务的等待隔离性。

试想一个场景,问题如果你要去图书馆借一本《高性能MySQL》,为了防止有人提前把这本书借走,你可以提前进行预约(加锁),这把锁可以怎么加?

封锁图书馆(数据库级别的锁) 把数据库相关的书都锁住(表级别的锁) 只锁 MySQL 相关的书(页级别的锁) 只锁《高性能MySQL》这本书(行级别的锁)

锁的粒度越细,并发级别越高,实现也更复杂。

锁等待也可称为事务等待,IT技术网后执行的事务等待前面处理的事务释放锁,但是等待时间超过了 MySQL 的锁等待时间,就会引发这个异常。等待超时后的报错为“Lock wait timeout exceeded...”。

死锁发生的原因是两个事务互相等待对方释放相同资源的锁,从而造成的死循环。产生死锁后会立即报错“Deadlock found when trying to get lock...”。

2.现象复现及处理

下面我们以 MySQL 5.7.23 版本为例(隔离级别是 RR ),来复现下上述两种异常现象。WordPress模板

mysql> show create table test_tb\G 

(责任编辑:应用开发)

    相关内容
    精彩推荐
    热门点击
    友情链接