MySQL学习笔记-死锁和死锁检测

简介: MySQL学习笔记-死锁和死锁检测

InnoDB 引擎相比于 MyISAM 引擎,有一个优点就是 InnoDB 引擎支持行锁,而 MyISAM 引擎在做并发控制时只能使用表锁,这篇文章学习一下 InnoDB 引擎中死锁是如何产生的。

1.笔记图

2.行锁说明


  • 行锁就是针对数据表中行记录的锁
  • MySQL 行锁是在引擎层自己实现的
  • InnoDB 支持行锁,MyISAM 引擎不支持行锁,这也是 MyISAMInnoDB 区别之一

3.两阶段锁协议

Tips:事务 Bupdate 语句会被阻塞,直到事务 A 执行 commit 之后,事务 B 才能继续执行。

  • InnoDB 事务中,行锁是在需要的时候才加上的,要等到事务结束时才释放,这个就是两阶段锁协议
  • 如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放,可以最大程度地减少了事务之间的锁等待,提升了并发度

4.死锁和死锁检测

  • 死锁

  • 并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态,称为死锁
  • 事务 A 在等待事务 B 释放 id=2 的行锁,而事务 B 在等待事务 A 释放 id=1 的行锁
  • 事务 A 和事务 B 在互相等待对方的资源释放,就是进入了死锁状态
  • 死锁检测
  • innodb_deadlock_detect:默认是 on
  • 并发场景每个新来的被堵住的线程,都要判断会不会由于自己的加入导致了死锁,要消耗大量的 CPU 资源,但是每秒执行的事务数很少

5.死锁检测优化思路

  • 如果能确保业务一定不会出现死锁,可以临时把死锁检测关掉
  • 数据库服务端做并发控制,可以考虑在中间件实现,也可以修改 MySQL 源码在数据进入引擎之前排队,这样在 InnoDB 中就不会有大量的死锁检测消耗 CPU
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
464 6
|
关系型数据库 MySQL Java
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
|
SQL 关系型数据库 MySQL
MySQL死锁及源码分析!
MySQL死锁及源码分析!
336 0
MySQL死锁及源码分析!
|
SQL 关系型数据库 MySQL
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
1322 0
案例剖析:MySQL唯一索引并发插入导致死锁!
|
存储 关系型数据库 MySQL
MySQL索引学习笔记
本文深入探讨了MySQL数据库中慢查询分析的关键概念和技术手段。
979 81
|
SQL 关系型数据库 MySQL
案例剖析,MySQL共享锁引发的死锁问题!
案例剖析,MySQL共享锁引发的死锁问题!
316 0
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
645 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
397 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
存储 关系型数据库 MySQL
从新手到高手:彻底掌握MySQL表死锁
通过本文的介绍,希望你能深入理解MySQL表死锁的概念、原因、检测方法及解决方案,并在实际开发中灵活应用这些知识,提升系统的稳定性和性能。
1259 9
|
SQL 算法 关系型数据库
面试:什么是死锁,如何避免或解决死锁;MySQL中的死锁现象,MySQL死锁如何解决
面试:什么是死锁,死锁产生的四个必要条件,如何避免或解决死锁;数据库锁,锁分类,控制事务;MySQL中的死锁现象,MySQL死锁如何解决

推荐镜像

更多