当前位置:首页 >探索 >MySQL锁等待与死锁问题分析 保证数据库事务的分析隔离性

MySQL锁等待与死锁问题分析 保证数据库事务的分析隔离性

2024-06-30 19:08:01 [百科] 来源:避面尹邢网

MySQL锁等待与死锁问题分析

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

 [[389778]]

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

MySQL锁等待与死锁问题分析 保证数据库事务的分析隔离性

前言:

MySQL锁等待与死锁问题分析 保证数据库事务的分析隔离性

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

MySQL锁等待与死锁问题分析 保证数据库事务的分析隔离性

1.了解锁等待与死锁

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

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

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

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

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

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

2.现象复现及处理

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

  1. mysql> show create table test_tb\G 
  2. (责任编辑:时尚)

    推荐文章
    热点阅读