关键词:innodb锁,mysql锁

概要:

1、事务的隔离级别

2、InnoDB锁争用

3、innodb锁

【3.1】innodb的行锁模式及加锁方法 

 其实,默认情况下,mysql 的 select 查询是不会加任何锁的,其他的CDU,都会先IX,再加上X锁

【3.2】innodb行锁实现方式

  mysql的行锁是针对索引来加锁的~!

  (1)在不通过索引条件查询时,走全表扫了,则innodb会锁定表中的所有记录

  (2)mysql是通过索引加锁的,不是针对记录,如果索引值相同有多条记录,那么会被一并锁住。

  (3)当表有多个索引的时候,不同的事务可以通过不同索引锁定不同的行,无论是使用主键索引、唯一索引或普通索引,innodb都会使用行锁对数据加锁。

  (4)即使在条件中加了索引,但如果执行计划没有走索引,走的是全表扫,还是会全部上锁。

4、锁与恢复、复制的关系(基于binlog)

【4.1】binlog的恢复复制模式

【4.2】在做create table tab1 select * from source_tab 与 insert into tab1 select ...from source_tab时   会加共享锁。

      如果有范围性判断,该select操作还会加netx-key锁,以便保证数据恢复和复制的正确性

【4.3】innodb_locks_unsafe_for_binlog 设置为on(默认off) 导致主从不一致

innodb_locks_unsafe_for_binlog 设置为on 之后,【4.2】中事务图就不会加共享锁。但因为binlog是串行执行,可能会导致主从不一致。

【4.4】不同隔离级别下的锁

  加共享锁: select  ........for update

    加排它锁: select  ........LOCK IN SHARE MODE

5、什么时候使用表锁

6、MyISAM与innodb锁总结

  

详细内容:

  1、事务的隔离级别

  

2、InnoDB锁争用

【2.1】行锁查看:show status like 'innodb_row_lock'

  

  如果锁争用比较高,比如 Innodb_row_lock_time 与 Innodb_row_lock_time_avg 比较高,可以查看【2.2】

【2.2】查看当前锁情况:select * from information_schema.innodb_locks \G

      查看当前锁等待情况:select * from information_schema.innodb_lock_waits \G

【2.3】使用innodb_monitors来查看innodb情况

  show engine innodb status \G

  

3、innodb锁

【3.1】innodb的行锁模式及加锁方法 

 其实,默认情况下,mysql 的 select 查询是不会加任何锁的,其他的CDU,都会先IX,再加上X锁

  

    

【3.2】innodb行锁实现方式

  mysql的行锁是针对索引来加锁的~!

  

  (1)在不通过索引条件查询时,走全表扫了,则innodb会锁定表中的所有记录

    

  (2)mysql是通过索引加锁的,不是针对记录,如果索引值相同有多条记录,那么会被一并锁住。

    比如id列有索引,name列没有索引。

    

  (3)当表有多个索引的时候,不同的事务可以通过不同索引锁定不同的行,无论是使用主键索引、唯一索引或普通索引,innodb都会使用行锁对数据加锁。

  (4)即使在条件中加了索引,但如果执行计划没有走索引,走的是全表扫,还是会全部上锁。

【3.3】next-key锁

  

  

  

4、锁与恢复、复制的关系(基于binlog)

【4.1】binlog的恢复复制模式

  

【4.2】在做create table tab1 select * from source_tab 与 insert into tab1 select ...from source_tab时   会加共享锁。

      如果有范围性判断,该select操作还会加netx-key锁,以便保证数据恢复和复制的正确性

    

    

【4.3】innodb_locks_unsafe_for_binlog 设置为on(默认off) 导致主从不一致

innodb_locks_unsafe_for_binlog 设置为on 之后,【4.2】中事务图就不会加共享锁。

那么;

  假如 session2先提交(也就是update先提交),session1后提交(也就是插入操作后提交)。

  主库不会受到影响,但是从库会有影响,具体如下:

    binlog是串行化执行的,谁先提交先执行谁。本来是要插入1的,因为并行update事务先提交,索引会先update,再插入,就导致主从数据不一致。最后插入的数据变成8了。

【4.4】innodb存储引擎中不同SQL在不同隔离级别下锁比较

  

5、什么时候使用表锁

  

6、MyISAM与innodb锁总结

  

  

(1.15)mysql锁问题之InnoDB锁的更多相关文章

  1. MySQL锁:02.InnoDB锁

    目录 InnoDB锁 InnoDB行锁实现机制 InnoDB隐式.显式锁 InnoDB锁类型 共享锁 排他锁 意向锁 InnoDB锁兼容性 InnoDB行锁范围.粒度 InnoDB行锁粒度一览 意向插 ...

  2. Mysql技术内幕之InnoDB锁探究

    自7月份换工作以来,期间一直在学习MySQL的相关知识,听了一些视频课,但是一直好奇那些讲师的知识是从哪里学习的.于是想着从书籍中找答案.毕竟一直 看视频也不是办法,不能形成自己的知识.于是想着看书汲 ...

  3. MySQL优化篇系列文章(二)——MyISAM表锁与InnoDB锁问题

    我可以和面试官多聊几句吗?只是想... MySQL优化篇系列文章(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. 面试官:咦,小伙子,又来啦 ...

  4. [转]关于MYSQL Innodb 锁行还是锁表

    关于mysql的锁行还是锁表,这个问题,今天算是有了一点头绪,mysql 中 innodb是锁行的,但是项目中居然出现了死锁,锁表的情况.为什么呢?先看一下这篇文章. 目时由于业务逻辑的需要,必须对数 ...

  5. MySQL- InnoDB锁机制

    InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题.下面我们先介绍一点背景知识 ...

  6. MySQL锁和事务(一):InnoDB锁(MySQL 官方文档粗翻)

    // 写在前面,实际上,数据库加锁的类型和范围受到多种因素的影响,例如数据库隔离等级,SQL语句,是否使用主键.索引等等.可以查看博文: http://www.cnblogs.com/zhaoyl/p ...

  7. MySQL锁:03.InnoDB行锁

    目录 InnoDB 行锁 锁排查可以用的视图和数据字典 InnoDB 行锁兼容性 InnoDB行锁之共享锁 共享锁: 查看InnoDB锁 InnoDB行锁实现机制 对普通索引上锁 InnoDB隐式.显 ...

  8. MySQL数据恢复和复制对InnoDB锁机制的影响

    MySQL通过BINLOG记录执行成功的INSERT,UPDATE,DELETE等DML语句.并由此实现数据库的恢复(point-in-time)和复制(其原理与恢复类似,通过复制和执行二进制日志使一 ...

  9. mysql innodb锁简析(2)

    继续昨天的innodb锁的分析: 注:此博文参考一下地址,那里讲的也很详细.http://xm-king.iteye.com/blog/770721 mysql事务的隔离级别分为四种,隔离级别越高,数 ...

随机推荐

  1. 原生App切图的那些事儿

    如何切图? 了解iphone界面的尺寸 最小的分辨率是320x480,我们把这个尺寸定为基准界面尺寸(baseline),基准尺寸所用的图标定为1倍图(1x). 在实际设计过程中,为了降低设计成本,一 ...

  2. [JS] Topic - why "strict mode" here

    Ref: Javascript 严格模式详解 使得Javascript在更严格的条件下运行: - 消除Javascript语法的一些不合理.不严谨之处,减少一些怪异行为; - 消除代码运行的一些不安全 ...

  3. Jmeter-安装配置

    一.安装JDK 1 [步骤一]安装jdk 1.下载jdk,到官网下载jdk,地址:http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  4. M0 M4时钟控制(一)

    时钟控制器为整个芯片提供时钟源,包括系统时钟和所有外围设备时钟.该控制器还通过单独时钟的开或关,时钟源选择和分频器来进行功耗控制.在CPU使能低功耗PDEN(CLK_PWRCTL[7]) 位和Cort ...

  5. 【win10】显示窗口标题栏颜色

    win10默认窗口标题栏是白色的,看起来不习惯. 修改方法如下. 1.按win+X,[设置]->[个性化]->[颜色],勾选如图所示[标题栏]即可.

  6. 使用jenkins pipeline,并发selenium测试 --- 你值得了解

    一.契机 相信很多使用selenium进行UI测试,再对接jenkins时,都是简单的在jenkins上将命令输入就完事了. 但是,相信你一定会遇到以下问题: 1.你需要同时跑不同文件或不同类的用例, ...

  7. 通过USB转TTL串口下载stm32程序

    目录: 1.硬件及其接线 2.驱动及软件 3.下载程序测试 1.硬件及其接线 1.1 USB转TTL刷机板(CH340模块升级小板) 1.2 主芯片STM32F103C8T6开发板 1.3接线 1.3 ...

  8. AngularJS基础02 神奇的数据绑定(Binding)

    作者:arccosxy  转载请注明出处:http://www.cnblogs.com/arccosxy/ 上一节,我们在JS中声明一个scope变量然后在HTML直接访问它,这非常的酷.但是Angu ...

  9. 【react】---styled-components的基本使用---【巷子】

    一.官网地址 https://www.styled-components.com/ 二.styled-components 1.styled-components 样式化组件,主要作用是它可以编写实际 ...

  10. thinkphp 无限极 评论

    郑创 今天用啦一天的时间用了各种方法终于把评论成无限极了,随便评论,有判断自己不能评论自己,下面先说前台源代码! 要实现的视图 前台源代码html模板 <div class="wen_ ...