MySQL—死锁

什么是死锁?

好比是两个事务都在等待对方释放锁,之后进行下一步操作,但是最后双方都没有释放资源,所以导致一直处于等待的状态。

但是服务器不会让死锁的状态一直持续,会关闭其中一个影响较小的事务(右边的事务关闭),

参考链接:死锁面试题(什么是死锁,产生死锁的原因及必要条件)-CSDN博客

怎么查看有没有发生死锁呢?

查询是否锁表

复制代码
show OPEN TABLES where In_use > 0;

查看当前的事务

复制代码
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

查看当前锁定的事务

复制代码
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

查看当前等锁的事务

复制代码
ELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

减少死锁:

  1. 使用事务,不使用 lock tables 。
  2. 保证没有长事务。
  3. 尽量基于primary或unique key更新数据
  4. 操作完之后立即提交事务,特别是在交互式命令行中。
  5. 如果在用 (SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE),尝试降低隔离级别。注意:select ... for update (表级锁)、select ... lock in share mode(行级锁)
  6. 修改多个表或者多个行的时候,将修改的顺序保持一致。
  7. 创建索引,可以使创建的锁更少。
  8. 最好不要用 (SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE)。
  9. 如果上述都无法解决问题,那么尝试使用 lock tables t1, t2, t3 锁多张表
  10. 使用乐观锁和减少锁的粒度,保证一致的锁定顺序,合计设计索引,避免大事务。
  11. 等待超时时,回滚事务或者结束进程。

MySQL死锁的解决方案

彻底搞懂MySQL死锁_mysql deadlock-CSDN博客

面试必问!MySQL死锁是什么,如何解决?史上最全!-CSDN博客

彻底搞懂MySQL死锁_mysql deadlock-CSDN博客

mysql查看死锁和解除锁_查mysql死锁-CSDN博客

相关推荐
Dragon~Snow5 分钟前
Centos Stream10 安装 MySQL-9.7.2-linux-glibc2.28-x86_64.tar
linux·mysql·centos
skywalk816344 分钟前
不用 SSH、不装数据库:我用 1 个 Python 脚本 + Git,把 15 个 AI Agent 串成了一条流水线
数据库·人工智能·python·ssh·集群
Decay__1 小时前
19_MySQL 告警与自动化运维 —— 告警分级收敛 / Webhook / 定时巡检 / 脚本库
运维·数据库·sql·mysql·架构
代码不停1 小时前
Spring Aop
java·数据库·spring
keyipatience1 小时前
MySQL 学习(4)常用数据类型
数据库·mysql
达梦产品与服务1 小时前
SQLark V4.2 更新 | 新增TiDB、SSL安全连接、数据字典、清空/截断表等40+项功能已上线!
数据库·安全·tidb·ssl
码农阿豪2 小时前
SQL Server数据迁移完成后,凌晨的数据库告警该怎么查?
数据库·sqlserver
bjzhang752 小时前
sqlsugar入门
数据库·sqlsugar
全栈陈序员4 小时前
【Git】从入门到精通(十)—— 撤销与恢复:git checkout与git restore
运维·网络·数据库·git
ss27311 小时前
为什么PostgreSQL适合AI场景?
数据库·人工智能·postgresql