数据库

MySQL锁等待与死锁问题分析

时间:2010-12-5 17:23:32  作者:人工智能   来源:IT科技  查看:  评论:0
内容摘要:本文转载自微信公众号「MySQL技术」,作者MySQL技术。转载本文请联系MySQL技术公众号。前言:在 MySQL 运维过程中,锁等待和死锁问题是令各位 DBA 及开发同学非常头痛的事。出现此类问题

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

前言:

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

1.了解锁等待与死锁

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

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

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

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

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

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

2.现象复现及处理

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

mysql> show create table test_tb\G 
copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap