mysql行级锁升级_mysql innodb 行级锁升级
创建数据表test,表定义如下所示:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
创建测试数据集,插入SQL语句如下所示:
insert into test value(null,'aaa'), (null,'aaa'), (null,'aaa'), (null,'aaa'), (null,'aaa'), (null,'aaa');
insert into test value(null,'bbb'), (null,'ccc'), (null,'ddd'), (null,'eee'), (null,'fff'), (null,'ggg'), (null,'hhh'), (null,'iii'), (null,'jjj'), (null,'kkk'), (null,'lll'), (null,'mmm');
测试
测试过程从三个方面测试:首先测试行锁的有效性,即测试索引项的行锁操作;其次测试行锁的升级,测试索引项操作的锁等待;最后,减少操作索引项数据,查看行锁升级的临界值。
测试前,首先建立两个mysql连接,并且将mysql的autocommit设置为0,然后进行一下各个测试。执行的sql语句为:
set autocommit=0;
1、行锁测试
在mysql客户端1上执行以下操作:
delete from test where name='ccc';
在mysql客户端2上执行以下操作:
insert into test values(null,’nnn’);
在客户端1没有提交和回滚操作之前,在客户端2上执行插入操作成功。由此可见,mysql在操作时的确是使用了行级锁。
验证结束之后,回滚操作,分别在两个客户端上执行回滚操作:
rollback;
2、行锁升级测试
在mysql客户端1上执行以下操作:
delete from test where name='aaa';
在mysql客户端2上执行以下操作:
insert into test values(null,’nnn’);
客户端1没有提交和回滚的情况下,客户端2始终处于锁等待状态。只有当在客户端1上执行回滚操作或者提交操作后,客户端2上的操作才能执行。从行锁的理论来看,这是不符的。但是当操作的数据占整个数据的比例较大时,行锁将会升级,导致其他操作处于锁等待状态。
3、行锁升级临界测试
经测试,当删除数据为5条时有锁等待4条时没有。而如果name字段上没有索引则为表锁。
mysql行级锁升级_mysql innodb 行级锁升级相关推荐
- mysql innodb禁用事务_MySQL InnoDB事务中锁问题(三)
试想,事务如果都是串行的,那么就不需要锁了,但是性能肯定没法接受.加锁只是为了提高事务并行度,并且解决并发事务执行过程中引起的脏写.脏读.不可重复读.幻读这些问题的一种解决方案(MVCC算是一种解决脏 ...
- mysql锁级别_MySql三种级别锁的介绍及解锁命令
MySql三种级别锁的介绍及解锁命令 (2014-04-29 11:59:37) 标签: 那末 用以 便能 页级的典型代表引擎为BDB. 表级的典型代表引擎为MyISAM,MEMORY和很久之前的IS ...
- mysql排他锁实例_mysql共享锁与排他锁用法实例分析
本文实例讲述了mysql共享锁与排他锁用法.分享给大家供大家参考,具体如下: mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流. 共享锁又称 ...
- mysql锁表更新_Mysql InnoDB 数据更新导致锁表
一.数据表结构 CREATE TABLE `jx_attach` ( `attach_id` int(11) NOT NULL AUTO_INCREMENT, `feed_id` int(11) DE ...
- mysql命令行批量添加数据_mysql命令行批量插入100条数据命令
先介绍一个关键字的使用: delimiter 定好结束符为"$$",(定义的时候需要加上一个空格) 然后最后又定义为";", MYSQL的默认结束符为" ...
- mysql命令导入导出数据_mysql命令行导入和导出数据
MySQL中导出CSV格式数据的SQL语句样本如下: select * from test_info into outfile '/tmp/test.csv' fields terminated by ...
- mysql 设置字段自动增长值_mysql命令行脚本
命令行连接 在工作中主要使用命令操作方式,要求熟练编写 打开终端,运行命令 mysql -uroot -p回车后输入密码,当前设置的密码为mysql 连接成功后如下图 退出登录 quit 和 exit ...
- mysql命令导入导出数据库_MYSQL命令行导入导出数据库详解
Mysql命令行导入数据库: 1,将要导入的.sql文件移至bin文件下,这样的路径比较方便 2,同上面导出的第1步 3,进入MySQL:mysql -u 用户名 -p 如我输入的命令行:mysql ...
- mysql修改客户端编码命令_mysql命令行修改字符编码
1.修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2.创建数据库时,指定数据库的字符编码 mysql> create ...
最新文章
- 使用微软WPF技术开发产品优势究竟在那里
- 蓝牙小电池图标_方寸间、掌握中,omthing小方盒开箱测评
- 【CodeForces - 705C】Thor(模拟,STLset优化链表)
- antd radio设置默认选中_单选框radio总结(获取值、设置默认选中值、样式)
- Intellj IDEA 注册码 2018
- Java Generics示例教程 - 通用方法,类,接口
- 原生JS、jQuery 遍历方法总结
- 透过“简书钻”来探究简书的商业模式转变
- 日期范围选择类日历(增强版)
- USBVIEW(带已分配带宽显示功能)-电脑圈圈
- 城市智能交通指挥中心系统方案
- 什么是索引?索引有哪几种?什么时候使用索引比较好?
- 应付模块的R12 TRACE 和 FND Debug 文件 / FND 日志 调试
- 实用!7个强大的Python机器学习库!⛵
- 光束法空三的计算问题,误差方程的多余观测数,未知数个数、多余观测值的计算
- 栅格矩阵转换成邻接矩阵G2D函数
- 【渝粤教育】电大中专电子商务网站建设与维护 (4)作业 题库
- [VB程序设计创新实验教程]Chap1---VB中游戏基本要素的实现方式[1]
- 接口自动化测试怎么做?该怎么学习
- CSP登机牌条码202112-3
热门文章
- 【远程沟通】“云答辩”“云招聘”双管齐下,解救“最难毕业生”
- 重构技术架构首先解决组织架构
- 如何给女朋友解释什么是撞库、脱库和洗库?
- 微信几亿人在线的点赞、取消点赞系统,用Redis如何实现?
- 互联网大佬马老师于昨日教师节正式卸任,让位现任CEO张勇;华为发布新一代CloudLink视讯解决方案,普惠4K+AI;联通……...
- 5G精华问答 | 5G的关键无线技术是啥?
- axios.post提交的三种请求方式
- hook 循环点击事件用哪个_JS 事件循环 event loop,看完你可以答对 90% 的事件循环题...
- python相对引用_Python 模块相对引用
- linux 分割pdf,PDFBox分割PDF文档