mysql 行锁模拟、锁查看及排除
一、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 行锁模拟、锁查看及排除相关推荐
- [精选]MySQL的各种锁(表锁,行锁,悲观锁,乐观锁,间隙锁,死锁)
不少人在开发的时候,应该很少会注意到这些锁的问题,也很少会给程序加锁(除了库存这些对数量准确性要求极高的情况下),即使我们不会这些锁知识,我们的程序在一般情况下还是可以跑得好好的.因为数据库隐式帮我们 ...
- mysql 表级别的锁和行级别的_MySQL 表锁和行锁机制
案例分析 目前,MySQL常用的存储引擎是InnoDB,相对于MyISAM而言.InnoDB更适合高并发场景,同时也支持事务处理.我们通过下面这个案例(坑),来了解行锁和表锁. 业务:因为订单重复导入 ...
- MySQL死锁问题如何分析锁表后查看死锁和去除死锁快速解决方法
(1) 遇到锁表快速解决办法 依次执行1-6步,运行第6步生成的语句即可. 如果特别着急,运行 1 2 6 步 以及第6步生成的kill语句 即可. 1. 第1步 查看表是否在使用. show op ...
- mysql和oracle的锁_关于数据库行锁与表锁的认识
MySQL MySQL(InnoDB存储引擎)默认是自动提交事务的,所以这个测试,需要先将MySQL的autocommit设置为0,关闭自动提交,需要自己手动提交事务 -- 关闭自动提交 set au ...
- mysql行锁同索引键问题_mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)
1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...
- mysql 查看锁_SQL-mysql锁等待与死锁
一 前言 本篇是MYSQL高级进阶篇内容第二篇,学习本篇的基础是知识追寻者之前发布过的文章,尤其是<MYSQL架构入门篇>重中之重: <SQL-你真的了解什么SQL么?> &l ...
- 【转】【MySQL】事务与锁(四):行锁到底锁住的是什么?记录?字段?索引?
首先我们有三张表t1,t2,t3,它们都是只有两个字段, int类型的id和varchar类型的name:区别是t1没有索引,t2有主键索引,t3有唯一索引. 再强调一次,在实验前必须提前关闭自动提交 ...
- mysql innodb 全表锁,Mysql InnoDB行锁及表锁分享
一. 背景知识 二. 步入正题:表锁和行锁 1.1. 表锁 vs 行锁 在 MySQL 中锁的种类有很多,但是最基本的还是表锁和行锁:表锁指的是对一整张表加锁,一般是 DDL 处理时使用,也可以自己在 ...
- mysql某个表被行锁了_一文搞懂MySQL行锁、表锁、间隙锁详解
准备工作 创建表 tb_innodb_lock drop table if exists test_innodb_lock; CREATE TABLE test_innodb_lock ( a INT ...
最新文章
- 上映 10 天,票房就突破 10 亿的《海王》真的有那么好看?
- 'datetime.datetime' object is not callable
- git查看stash内容
- ansible之setup模块常用的信息
- tensorflow学习(6.Alexnet实现及猫狗分类)
- 转: 三大WEB服务器对比分析(apache ,lighttpd,nginx) (2008年的旧文,仅供参考之用)...
- Chrome开发者工具详解(4)-Profiles面板
- 【qduoj】C语言课程设计_约瑟夫问题
- Linux下如何安装软件
- 就业技术书文件表格_就业申请书
- slim 搭建rnn_使用Keras搭建cnn+rnn, BRNN,DRNN等模型
- iPhone ARC 宏定义
- 赠票福利 | 2018人工智能计算大会报名开启:算力爆燃,AI进化
- 浅谈技术管理之个体能力建设
- 深入浅出之正则表达式(一)(转)
- TP LINK交换机 console 超级终端链接设置
- 代数拓扑笔记-圆的基本群
- C#:实现读取网卡信息
- 电路与电子4.3.5隔离放大器和音频功率放大器
- Android WIFI密码查看器实例(在获取Root权限下查看系统文件)
热门文章
- 电磁波传播相位是否会变化,关于电磁波的相位不变性和多普勒效应的讨论
- 虚幻4渲染编程(图元汇编篇)【第四卷:自定义模型资源管线】
- 红米note3 android go,离完美只差一步:MI 小米 红米Note5 智能手机 体验评测(含高通骁龙636性能测试)...
- Rust 的优点是什么?
- 让你不再害怕指针——C指针详解(经典,非常详细)
- 计算机应用类专业综合知识试题
- 2018ACM暑期多校联合训练参(bao)赛(zha)记
- Flex中的帧频和帧事件
- OPPO A7X 刷机小结
- mac 微信客户端破解版下载地址