《 MySQL性能优化--锁》首发牧码人博客转发请加此提示

MySQL基本概念--锁

介绍下对于MySQL锁机制的理解

从基本概念开始:

共享锁

共享锁的代号是S,是Share的缩写,共享锁的锁粒度是行或者元组(多个行)。一个事务获取了共享锁之后,可以对锁定范围内的数据执行读操作。

排它锁

排它锁的代号是X,是eXclusive的缩写,排它锁的粒度与共享锁相同,也是行或者元组。一个事务获取了排它锁之后,可以对锁定范围内的数据执行写操作。

假设有两个事务t1和t2

如果事务t1获取了一个元组的共享锁,事务t2还可以立即获取这个元组的共享锁,但不能立即获取这个元组的排它锁(必须等到t1释放共享锁之后)。

如果事务t1获取了一个元组的排它锁,事务t2不能立即获取这个元组的共享锁,也不能立即获取这个元组的排它锁(必须等到t1释放排它锁之后)

意向锁

意向锁是一种表锁,锁定的粒度是整张表,分为意向共享锁(IS)和意向排它锁(IX)两类。意向共享锁表示一个事务有意对数据上共享锁或者排它锁。“有意”这两个字表达的意思比较微妙,说的明白点就是指事务想干这个事但还没真去干。举例说明下意向共享锁,比如一个事务t执行了这样一个语句:select * from table lock in share model ,如果这个语句执行成功,就对表table上了一个意向共享锁。lock in share model就是说事务t1在接下来要执行的语句中要获取S锁。如果t1的select * from table lock in share model执行成功,那么接下来t1应该可以畅通无阻的去执行只需要共享锁的语句了。意向排它锁的含义同理可知,上例中要获取意向排它锁,可以使用select * from table for update****。

lock in share model 和 for update这两个东西在数据率理论中还有个学名叫悲观锁,与悲观锁相对的当然还有乐观锁。大家可以看到各种锁都是成双成对出现的。关于悲观锁和乐观锁的问题暂且不表,下文再来详述。

锁的互斥与兼容关系

锁和锁之间的关系,要么是相容的,要么是互斥的。

锁a和锁b相容是指:操作同样一组数据时,如果事务t1获取了锁a,另一个事务t2还可以获取锁b;

锁a和锁b互斥是指:操作同样一组数据时,如果事务t1获取了锁a,另一个事务t2在t1释放锁a之前无法获取锁b。

上面提到的共享锁、排它锁、意向共享锁、意向排它锁相互之前都是有兼容/互斥关系的,可以用一个兼容性矩阵表示(y表示兼容,n表示不兼容):

X S IX IS

X n n n n

S n y n y

IX n n y y

IS n y y y

兼容性矩阵为什么是这个样子的?

X和S的相互关系在上文中解释过了,IX和IS的相互关系全部是兼容,这也很好理解,因为它们都只是“有意”,还处于YY阶段,没有真干,所以是可以兼容的;

剩下的就是X和IX,X和IS, S和IX, S和IS的关系了,我们可以由X和S的关系推导出这四组关系。

简单的说:X和IX的=X和X的关系。为什么呢?因为事务在获取IX锁后,接下来就有权利获取X锁。如果X和IX兼容的话,就会出现两个事务都获取了X锁的情况,这与我们已知的X与X互斥是矛盾的,所以X与IX只能是互斥关系。其余的三组关系同理,可用同样的方式推导出来。

对于 UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);对于普通SELECT语句,InnoDB不会加任何锁; 事务可以通过显式给记录集加共享锁或排他锁。

其它:

一致性非阻塞读

select... lock in share mode和select ... for update的区别

索引记录锁

间隙锁

后码锁

各种语句对应的锁类型

在有索引的情况下是以后码锁为基础的行级锁,在固定索引键查找的情况下是索引记录锁,在没有可用索引的情况下上升到表锁

有索引的情况:

select ... from 一致性非阻塞读,不上锁。在serializable隔离级别下例外,在这个隔离级别下上共享后码锁

select ... from ... lock in share mode 共享后码锁

select ... from ... for update 排它后码锁

update .... where 排它后码锁

delete from .... where 排它后码锁

insert ... 排它索引记录锁,如果发生键值唯一性冲突则转成共享锁

insert ... on duplicate key update ,一直都是排它锁

replace ... 一直都是排它锁

注意:本文归作者所有,未经作者允许,不得转载

mysql锁与性能_MySQL性能优化--锁(概念)相关推荐

  1. mysql 悲观锁 性能_mysql的乐观锁和悲观锁

    悲观锁与乐观锁是两种常见的资源并发锁设计思路,也是并发编程中一个非常基础的概念.本文将对这两种常见的锁机制在数据库数据上的实现进行比较系统的介绍. 悲观锁(Pessimistic Lock) 悲观锁的 ...

  2. mysql+date+范围+性能_MySQL性能优化的最佳20+条经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...

  3. mysql 嵌套查询性能_mysql SQL优化之嵌套查询-遁地龙卷风

    (-1) 写在前面 这篇随笔的数据使用的是http://blog.csdn.net/friendan/article/details/8072668#comments里的,里面有一些常见的select ...

  4. mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

  5. mysql数据库老是被锁怎么解决_Mysql数据库全局锁是如何引起的,如何解决?

    2019-01-08 回答 乐观锁与悲观锁不同的是,它是一种逻辑上的锁,而不需要数据库提供锁机制来支持 当数据很重要,回滚或重试一次需要很大的开销时,需要保证操作的acid性质,此时应该采用悲观锁 而 ...

  6. mysql中的锁的指令_mysql中的锁

    MYSQL不同的存储引擎支持不同的锁的机制 MyISAM 支持表锁,InnoDB支持表锁和行锁 表锁,行锁比较 表锁:开销小,加锁快:不会出现死锁:锁定力度大,发生锁冲突概率高,并发度最低 行锁:开销 ...

  7. MySQL并发 共享锁目的_mysql并发与锁机制

    在InnoDB中,锁是逐步获得的,因此发生死锁是可能的.发生死锁后,InnoDB一般都能自动检测到,并使一个事务释放锁并回退,另外一个事务获得锁,并继续完成事务.但在涉及外部锁,或涉及表锁的情况下,I ...

  8. mysql工具使用意义_MySQL性能分析、及调优工具使用详解

    本文汇总了MySQL DBA日常工作中用到的些工具,方便初学者,也便于自己查阅. 先介绍下基础设施(CPU.IO.网络等)检查的工具: vmstat.sar(sysstat工具包).mpstat.op ...

  9. mysql锁表查询_Mysql upate 更新锁表还是锁行测试

    mysql 学习 主题: -- 查询是否自动提交事务select @@autocommit;--关闭自动提交事务set autocommit = 0;--开启--执行--结束 事务start tran ...

最新文章

  1. Linux_Samba详解
  2. CTF C#逆向Reverse
  3. 联想计算机CDROM启动,联想电脑光驱启动问题?
  4. Lua虚拟机中的数据结构与栈
  5. 算法 查找子节点_掌握着十大编程算法助你走上高手之路
  6. Java、JavaScript、C/C++、Python分别用来开发什么?
  7. db2查最新值的前一天值_2019年1月珠海最新房价出炉!看看你家房子值多少钱!...
  8. Java 内部类、局部内部类、静态内部类使用
  9. 变量和算术运算之变量(三)
  10. JAVA基础--JAVA语言组成01
  11. tdav_converter_video.cxx:49:9: error: ‘uint8’ does not name a type; did you mean ‘uint’?
  12. Node.js与Golang使用感受与小结【二】
  13. 产品配件类目税目分类_商品及税收分类编码选择技巧
  14. ssh关闭终端切断SSH连接
  15. autorunner 测试java_AutoRunner|AutoRunner 自动化测试工具 4.2.5 正式版下载_太平洋下载中心...
  16. 百度数据挖掘实习生面试经验
  17. 多分类学习(OvO、OVR、MVM 原理区别)
  18. 简单十步创建个人博客网站
  19. my read_exchange rate
  20. 实时云渲染有哪些优势?

热门文章

  1. 【渝粤题库】陕西师范大学165107工作分析与设计作业(高起专)
  2. 【渝粤题库】国家开放大学2021春2634推销策略与艺术题目
  3. 多家大厂接连停产,半导体“最后一里路”面临“瘫痪”?
  4. 数字基带传输学习笔记00引言
  5. oracle账户解锁28000,oracle 下载 账号密码ORA-28000账户被锁和解锁
  6. mysql ssd tps 上不去_转【案例分享】压测TPS上不去
  7. 屏幕方向读取与锁定:Screen Orientation API(转)
  8. 关于数据可视化页面制作
  9. 乐观锁的两种实现方式
  10. nessus重置密码