一 在分析innodb中锁阻塞时,几种方法的对比情况:

1.使用show processlist查看不靠谱

2.直接使用show engine innodb status查看,无法判断到问题的根因

3.使用mysqladmin debug查看,能看到所有产生锁的线程,但无法判断哪个才是根因

# mysqladmin -uroot -p debug

4.开启innodb_lock_monitor后,再使用show engine innodb status查看,能够找到锁阻塞的根因

# 随便在一个数据库中创建这个表,就会打开lock monitor。创建表后innodb会每过15秒输出一次innodb状态信息到error log,通过删除表停止该monitor功能

MySQL> create table innodb_monitor(a int) engine=innodb;

二 查看事务和锁的相关视图

select * from INFORMATION_SCHEMA.innodb_trx;

select * from INFORMATION_SCHEMA.innodb_locks;

select * from INFORMATION_SCHEMA.innodb_lock_waits;

三 案例

创建测试表并填充数据

root@localhost:mysql.sock 02:30:59 [school]>CREATE TABLE t_gap( a INT, b INT, PRIMARY KEY (a), KEY(b));

root@localhost:mysql.sock 02:31:19 [school]>insert into t_gap values(1,1), (3,1), (5,3), (7,6),(10,8);

root@localhost:mysql.sock 22:45:13 [school]>select * from t_gap;

+----+------+

| a | b |

+----+------+

| 1 | 1 |

| 3 | 1 |

| 5 | 3 |

| 7 | 6 |

| 10 | 8 |

+----+------+

5 rows in set (0.00 sec)

session1:

T1:begin;SELECT  *  FROM  t_gap WHERE b =3 FOR UPDATE;

session2:

T2:begin;SELECT * FROM t_gap WHERE a=5 LOCK IN SHARE MODE;(等待)

注意:

在辅助索引上加的锁,最终会回溯到主键上再加一把锁.如上T1,在索引列b上加了锁,会回溯到主键a=5上再加一把锁

root@localhost:mysql.sock  03:08:12 [school]>show engine  innodb status \G;

------------

TRANSACTIONS

------------

Trx id counter 44387

Purge done for trx's n:o < 44376 undo n:o < 0 state: running but idle

History list length 2206

LIST OF TRANSACTIONS FOR EACH SESSION:

---TRANSACTION 0, not started

MySQL thread id 31, OS thread handle 0x7f80f5cc6700, query id 260 localhost root init

show engine innodb status

---TRANSACTION 44386, ACTIVE 3 sec starting index read

mysql tables in use 1, locked 1

LOCK WAIT 2 lock struct(s), heap size 360, 1 row lock(s)

MySQL thread id 32, OS thread handle 0x7f80f5cf7700, query id 259 localhost root statistics

SELECT * FROM t_gap WHERE A=5 LOCK IN SHARE MODE

------- TRX HAS BEEN WAITING 3 SEC FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 28 page no 3 n bits 72 index `PRIMARY` of table `school`.`t_gap` trx id 44386 lock mode S locks rec but not gap waiting

Record lock, heap no 4 PHYSICAL RECORD: n_fields 4; compact format; info bits 0

0: len 4; hex 80000005; asc ;;

1: len 6; hex 00000000ad4e; asc N;;

2: len 7; hex b7000002330128; asc 3 (;;

3: len 4; hex 80000003; asc ;;

------------------

---TRANSACTION 44385, ACTIVE 15 sec

4 lock struct(s), heap size 1184, 3 row lock(s)

MySQL thread id 33, OS thread handle 0x7f80f5d28700, query id 257 localhost root cleaning up

mysql写入时判断锁_MySQL 锁检查相关推荐

  1. mysql平均锁_MySQL锁情况分析

    TIPS 本文基于MySQL 8.0.22 分析锁的三种方式 方式1: show status like '%innodb_row_lock%'; 可查看行锁相关的统计信息 方式2: SHOW ENG ...

  2. mysql怎么加全局锁_MySQL锁机制/管理(并发锁,行锁,表锁,预加锁,全局锁等等)

    MySQL实验室 1.?MySQL 中并发和隔离控制机制 Meta-data元数据锁:在table cache缓存里实现的,为DDL(Data Definition Language)提供隔离操作.一 ...

  3. 用命令行连接mysql文件时出现错误_MySQL使用cmd命令窗口安装错误信息提示的解决方法...

    作者:二龙_01 转载自https://blog.csdn.net/ 近期学习使用mysql数据库遇到了一些安装上的问题,自己也上网百度了各种解决方法,其中有适合自己的,也发现了一些人云亦云的解决方法 ...

  4. mysql mdl锁_MySQL锁系列3 MDL锁

    MySQL为了保护数据字典元数据,使用了metadata lock,即MDL锁,保证在并发的情况下,结构变更的一致性. MDL锁的加锁模式和源码上的组织上和上一篇blog中MySQL表锁的实现方式一致 ...

  5. mysql mdl 锁_MySQL锁系列3 MDL锁

    MySQL为了保护数据字典元数据,使用了metadata lock,即MDL锁,保证在并发的情况下,结构变更的一致性. MDL锁的加锁模式和源码上的组织上和上一篇blog中MySQL表锁的实现方式一致 ...

  6. mysql 不让读的锁_MySQL锁问题(脏读、不可重复读、幻读)

    锁问题 通过锁定机制可以实现事务的隔离性要求,使得事务可以并发地工作.锁提高了并发,但是却会带来潜在地问题.不过好在因为事务隔离性地要求.锁只会带来三种问题,如果可以防止这三种情况地发生,那将不会产生 ...

  7. mysql查询语句判断日期_mysql语句查询时间检测

    MySQL explain功能展示的各种信息的解释如下: id: MySQL Query Optimizer 选定的执行计划中查询的序列号. select_type: 所使用的查询类型,主要有以下这几 ...

  8. mysql安装时1045错误_MySql 安装时的1045错误

    解决方案一:卸载MySQL,重新安装 1, 卸载MySQL 2, 删除目录 C:\Documents and Settings\All Users\Application Data\MySQL,还要删 ...

  9. mysql重装时没有权限_MySQL系列--1.安装卸载与用户权限管理

    MySQL安装 1.Ubuntu18下安装MySQL sudo apt-get install mysql-server MySQL的版本为5.7.25 2.登录MySQL 采用mysql-serve ...

最新文章

  1. 写算子单元测试Writing Unit Tests
  2. 每个 JavaScript 开发者都该懂的 Unicode
  3. 全栈 - 20 Web 基础 网页的血肉 CSS
  4. AI企业下一个使命:让生物特征数据使用走向阳光透明
  5. python graph_python graph什么意思
  6. 常用DOS命令全面收藏
  7. 代理类和被代理类的解释及案例
  8. 程序员学习网站备份(小众+不定时更新ing...)建议收藏
  9. kotlin学习笔记——枚举、封闭类
  10. windows下xmllib2使用简介 64位
  11. (转)Arcgis for Js之鼠标经过显示对象名的实现
  12. python实现模糊搜索_Python 代码实现模糊查询
  13. java做文件显示器_JavaWeb显示器
  14. elasticsearch体验(一.初识elasticsearch)
  15. theano 编程技巧
  16. 怎么在Linux中telnet服务器,Linux系统下Telnet服务器配置
  17. 【React Router 6 快速上手一】重定向Navigate / useRoutes路由表 / 嵌套路由Outlet
  18. 遗传算法入门(连载之十) 神经网络入门(连载预告)
  19. Photoshop支持ICO图片格式
  20. 用PayPal在eBay上撸货加哪种卡可以长期用?

热门文章

  1. php无线分类函数,php 无限级分类函数
  2. tensorflow 转 numpy 转 tensorflow
  3. tensorflow教程 一元线性回归
  4. 3.对角线遍历(LeetCode第498题)
  5. linux下bash脚本常用的十个技巧:显示执行脚本花费的时间,在脚本退出时杀死后台运行的程序,在脚本退出时跳出循环,读取命令行参数来决定循环次数
  6. File `listings.sty' not found. usepackage
  7. java 摘要算法_Java实现消息摘要算法加密
  8. Nginx 真实的 IP
  9. CALayer(二)
  10. python入门第一课练习题_老男孩教育Python 9期第一课练习题答案