一、mysql 行锁模拟

1、mysql锁简单说明

Mysql InnoDB行锁有2种,2者不能共存:

  • 共享锁Shared(S) lock,用于读取行记录
  • 互斥锁或叫排它锁Exclusive Lock (X),用于更新、删除行记录

2、先模拟一个行锁。

先用mysql命令框,开启一个事务并执行一条更新语句,但是不提交,如下:

mysql> use saas_tst;
mysql> begin;
mysql> update base_goods set sale_price = 46 where sid = 214;

然后用sqlyog客户端,依然执行上述更新语句,如下:

mysql> update base_goods set sale_price = 47 where sid = 214;

更新操作被阻塞,等很久后,会报ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction.

2、再来模拟一个死锁情况

模拟步骤:
1)用户A开启事务,read一行

mysql> begin;
mysql> select * from base_goods where sid = 214 lock in share mode;

说明: lock in share mode是为了加共享锁,其它事务仍然可以读取,如果是for update则变成互斥锁了,其它事务不能读取。

2)换个客户端,用户B更新该记录

mysql> begin;
mysql> update base_goods set sale_price = 42 where sid = 214;

执行结果:

  • 等很久时:会报ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
  • 不等立马执行用户A的更新指令:会报ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

3)用户A更新该记录

mysql> update base_goods set sale_price = 43 where sid = 214;

说明: 假设用户B执行更新操作后,仍在阻塞等待时间内(innodb_lock_wait_timeout),用户A立马执行更新操作,这时数据库系统会检测到死锁:

  • 客户B:拿着锁X,请求客户A释放锁S;
  • 客户A:拿着锁S,请求客户B释放锁X;

死锁发生后,系统会通知客户B产生死锁,并释放锁,客户A可以正常执行事务。

二、mysql锁查看的相关指令

1、show processlist

查看数据库哪些线程正在运行,根据processlist其实很难看出哪些线程被死锁,看下图:

比如线程[2019]就是用户B更新被锁时执行processlist看到的信息,异常的是通常一个简单的updte操作毫秒级就可执行完,而我们发现processlist中看到的线程[2019]sleep和query间差了64,也就是query指令updating状态时间比较长,有经验的可以据此判断出来期间有可能锁表了。
注: processlist在查看jdbc链接是否泄漏(没及时回收、关闭)倒是特别有用,比如eclipse jetty插件启动web项目时,假设有热部署功能的话,一旦修改了静态类,插件会提示你是否终止或继续等操作?一旦执行的是终止操作,项目停止,此时我们发现jdbc链接没有正常被回收,存在链接泄漏问题,至少阿里开源链接池(druid-1.1.5)是这样的。

2、查看正在被锁定的的表

show OPEN TABLES where In_use > 0;

用户B执行更新操作,被阻塞时,查看结果如下:

3、查看INFORMATION_SCHEMA系统库锁相关数据表

  • INFORMATION_SCHEMA.INNODB_LOCKS
  • INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
  • INFORMATION_SCHEMA.INNODB_TRX;

三、解决mysql锁简单、暴力方法

1、使用INNODB_TRX查看事务锁的情况

select * from INFORMATION_SCHEMA.INNODB_TRX;

假设有锁的话,截图如下:

注意:trx_mysql_thread_id字段,对应show processlist的线程ID.

2、kill 线程

如上图kill 2026;kill 2027即可。

mysql> kill 2027;
mysql> kill 2026;

mysql 行锁模拟、锁查看及排除相关推荐

  1. [精选]MySQL的各种锁(表锁,行锁,悲观锁,乐观锁,间隙锁,死锁)

    不少人在开发的时候,应该很少会注意到这些锁的问题,也很少会给程序加锁(除了库存这些对数量准确性要求极高的情况下),即使我们不会这些锁知识,我们的程序在一般情况下还是可以跑得好好的.因为数据库隐式帮我们 ...

  2. mysql 表级别的锁和行级别的_MySQL 表锁和行锁机制

    案例分析 目前,MySQL常用的存储引擎是InnoDB,相对于MyISAM而言.InnoDB更适合高并发场景,同时也支持事务处理.我们通过下面这个案例(坑),来了解行锁和表锁. 业务:因为订单重复导入 ...

  3. MySQL死锁问题如何分析锁表后查看死锁和去除死锁快速解决方法

    (1) 遇到锁表快速解决办法 依次执行1-6步,运行第6步生成的语句即可. 如果特别着急,运行 1 2 6 步 以及第6步生成的kill语句 即可. 1.  第1步 查看表是否在使用. show op ...

  4. mysql和oracle的锁_关于数据库行锁与表锁的认识

    MySQL MySQL(InnoDB存储引擎)默认是自动提交事务的,所以这个测试,需要先将MySQL的autocommit设置为0,关闭自动提交,需要自己手动提交事务 -- 关闭自动提交 set au ...

  5. mysql行锁同索引键问题_mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)

    1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...

  6. mysql 查看锁_SQL-mysql锁等待与死锁

    一 前言 本篇是MYSQL高级进阶篇内容第二篇,学习本篇的基础是知识追寻者之前发布过的文章,尤其是<MYSQL架构入门篇>重中之重: <SQL-你真的了解什么SQL么?> &l ...

  7. 【转】【MySQL】事务与锁(四):行锁到底锁住的是什么?记录?字段?索引?

    首先我们有三张表t1,t2,t3,它们都是只有两个字段, int类型的id和varchar类型的name:区别是t1没有索引,t2有主键索引,t3有唯一索引. 再强调一次,在实验前必须提前关闭自动提交 ...

  8. mysql innodb 全表锁,Mysql InnoDB行锁及表锁分享

    一. 背景知识 二. 步入正题:表锁和行锁 1.1. 表锁 vs 行锁 在 MySQL 中锁的种类有很多,但是最基本的还是表锁和行锁:表锁指的是对一整张表加锁,一般是 DDL 处理时使用,也可以自己在 ...

  9. mysql某个表被行锁了_一文搞懂MySQL行锁、表锁、间隙锁详解

    准备工作 创建表 tb_innodb_lock drop table if exists test_innodb_lock; CREATE TABLE test_innodb_lock ( a INT ...

最新文章

  1. 上映 10 天,票房就突破 10 亿的《海王》真的有那么好看?
  2. 'datetime.datetime' object is not callable
  3. git查看stash内容
  4. ansible之setup模块常用的信息
  5. tensorflow学习(6.Alexnet实现及猫狗分类)
  6. 转: 三大WEB服务器对比分析(apache ,lighttpd,nginx) (2008年的旧文,仅供参考之用)...
  7. Chrome开发者工具详解(4)-Profiles面板
  8. 【qduoj】C语言课程设计_约瑟夫问题
  9. Linux下如何安装软件
  10. 就业技术书文件表格_就业申请书
  11. slim 搭建rnn_使用Keras搭建cnn+rnn, BRNN,DRNN等模型
  12. iPhone ARC 宏定义
  13. 赠票福利 | 2018人工智能计算大会报名开启:算力爆燃,AI进化
  14. 浅谈技术管理之个体能力建设
  15. 深入浅出之正则表达式(一)(转)
  16. TP LINK交换机 console 超级终端链接设置
  17. 代数拓扑笔记-圆的基本群
  18. C#:实现读取网卡信息
  19. 电路与电子4.3.5隔离放大器和音频功率放大器
  20. Android WIFI密码查看器实例(在获取Root权限下查看系统文件)

热门文章

  1. 电磁波传播相位是否会变化,关于电磁波的相位不变性和多普勒效应的讨论
  2. 虚幻4渲染编程(图元汇编篇)【第四卷:自定义模型资源管线】
  3. 红米note3 android go,离完美只差一步:MI 小米 红米Note5 智能手机 体验评测(含高通骁龙636性能测试)...
  4. Rust 的优点是什么?
  5. 让你不再害怕指针——C指针详解(经典,非常详细)
  6. 计算机应用类专业综合知识试题
  7. 2018ACM暑期多校联合训练参(bao)赛(zha)记
  8. Flex中的帧频和帧事件
  9. OPPO A7X 刷机小结
  10. mac 微信客户端破解版下载地址