MySQL insert语句锁分析
最近对insert的锁操作比较费解,所以自己动手,一看究竟。主要是通过一下三个sql来看一下执行中的sql的到底使用了什么锁。
select * from information_schema.INNODB_TRX\G; //记录当前正在执行的事务,以及事务的一些状态
select * from information_schema.INNODB_LOCKS\G; //包含了InnoDB事务锁的具体情况,包括事务正在申请加的锁和事务加上的锁。
select * from information_schema.INNODB_LOCK_WAITS; //包含了blocked的事务的锁等待的状态
mysql的版本:5.6.25-73.1-log 使用了innodb,隔离级别是 REPEATABLE-READ
首先看下表结构: 表中有唯一键
分别在俩个事务中执行同样的insert操作:
insert into room_poi_cut_result (poi_id,poi_orgunit_id,old_bd,new_bd,cut_reason,is_execute) values(12345,22,12,12,0,0);
首先看下 INNODB_TRX 表的数据:可以看到 事务10722584462处于执行状态,事务10722584486处于阻塞状态
然后再看下锁的状态:可以看到,事务10722584462和事务10722584486都是在获取行锁,一个是S锁,一个是X锁
最后我们看下 INNODB_LOCK_WAITS 这个表中的数据:可以看到事务10722584486正在被阻塞在10722584486:29178:10:638 这个锁上,而这个锁的持有者是事务10722584462
所以,这里可以得到结论,首先会在唯一键加上行锁,其次insert语句会有一个锁升级的过程,从S锁升级到X锁。
接下来做第二个实验,在inser中加入 on update语句。
分别在俩个事务中执行同样的insert操作:
insert into room_poi_cut_result (poi_id,poi_orgunit_id,old_bd,new_bd,cut_reason,is_execute) values(12345,22,12,12,0,0) on duplicate key update poi_id=12345;
然后再看下INNODB_TRX,INNODB_LOCKS,INNODB_LOCK_WAITS 这三个表的数据:
结论,首先会在唯一键加上行锁,其次和第一次实验不同的是,直接是在唯一键上加X锁。
接下来做第三个实验,把表的唯一键去掉,然后执行insert操作:
表结构:
然后在俩个事务中执行以下insert语句:
insert into room_poi_cut_result2 (poi_id,poi_orgunit_id,old_bd,new_bd,cut_reason,is_execute) values(12345,22,12,12,0,0);
结果没有发生阻塞,看下INNODB_TRX 这个表中的数据:可以看到俩个事务都是在running状态,而且trx_rows_locked 都是0
MySQL insert语句锁分析的更多相关文章
- 使用 xlrd 模块实现对excel 的读取、excel转json 、excel 转 mysql insert 语句
#-*- coding:utf-8 -*- # 处理 excel 中的 area 为 Mysql insert 语句 import xlrd, json, codecs, os # data = xl ...
- mysql INSERT语句 语法
mysql INSERT语句 语法 作用:用于向表格中插入新的行. 语法:INSERT INTO 表名称 VALUES (值1, 值2,....)或者INSERT INTO table_name (列 ...
- MySQL INSERT语句
insert的语法 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] ...
- Mysql insert语句的优化
1) 如果你同时从同一客户插入很多行,使用多个值表的INSERT语句.这比使用分开INSERT语句快(在一些情况中几倍). Insert into test values(1,2),(1,3), ...
- MySQL Insert语句单个批次数量过多导致的CPU性能问题分析
[问题] 最近有台服务器比较频繁的CPU报警,表现的特征有CPU sys占比偏高,大量慢查询,大量并发线程堆积.后面开发对insert的相关业务限流后,服务器性能恢复正常. [异常期间线程处理情况] ...
- 简例 一次执行多条mysql insert语句
package com.demo.kafka;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Prep ...
- mysql insert语句错误问题解决
好久没有复习数据库了,竟然忘记了mysql中的关键字(保留字),导致今天一晚上都在查找sql语句错误,特此记录此错误,教训啊. 我在mysql数据库中有一个名为order 的表,啊啊啊啊啊,为啥我给他 ...
- excel 里面拼接 MySQL insert 语句
="('"&A2&"',"&" '"&B2&"','"&C2&& ...
- MySQL update语句和insert插入语句写法完全不一样啊,不要搞混
1.mysql update 语句: update user set name = 'xiaoming',age = 18 where uid = 3000; 更新记录时update操作也不需要写ta ...
随机推荐
- 一致性hash算法及java实现
一致性hash算法是分布式中一个常用且好用的分片算法.或者数据库分库分表算法.现在的互联网服务架构中,为避免单点故障.提升处理效率.横向扩展等原因,分布式系统已经成为了居家旅行必备的部署模式,所以也产 ...
- android 开发 ScrollView 控件的一些api描述与自定义ScrollView接口回调方法
1.正常使用ScrollView控件的一些api详解. package com.example.lenovo.mydemoapp.scrollViewDemo; import android.supp ...
- [UnityAPI]SerializedObject类 & SerializedProperty类
以Image类为例 1.MyImage.cs using UnityEngine; using UnityEngine.UI; public class MyImage : Image { ; pro ...
- flex兼容性之Webpack3+postcss+sass+css
1:⚠️⚠️ 首先安装依赖 npm install --save-dev webpack style-loader css-loader postcss-loader sass-loader auto ...
- Java 字符串拼接5种方式性能比较
https://www.cnblogs.com/twzheng/p/5923642.html
- linux 机器之间 zssh, rz, sz互相传输
zssh的全名叫ZMODEM SSH.看名字就知道,使用的zmodem,我们习惯了SecureCRT,直接就可以用来发送文件,比使用scp方便很多. zmodem协议方便主要表示在以下点 其一,不需要 ...
- A bean with that name has already been defined in DataSourceConfiguration$Hikari.class
A bean with that name has already been defined in DataSourceConfiguration$Hikari.class 构建springcloud ...
- test case VS test scenario
---恢复内容开始--- 1. test case: how to test --如何测试 test scenario: what to be tested --测试什么 2. test scen ...
- P1880 [NOI1995]石子合并-(环形区间dp)
https://www.luogu.org/problemnew/show/P1880 解题过程:本次的题目把石子围成一个环,与排成一列的版本有些不一样,可以在后面数组后面再接上n个元素,表示连续n个 ...
- 移动端过禁止输入emoji表情实现方案
最近手头上的项目有一个需求就是输入框不能输入表情,然后就各种在网上找资料,网上好多人给的方案是: str = str.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uD ...