网站大量收购独家精品文档,联系QQ:2885784924

MySQL锁-厦门大学数据库室.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目录 学习目标 背景知识 简单SQL语句加锁分析 复杂SQL语句加锁分析 总结 复杂SQL语句加锁分析 4 加什么锁? SQL语句的三个阶段: Index key:pubtime 1 and puptime 20 Index Filter:userid = ‘hdc’ Table Filter:comment is not NULL 复杂SQL语句加锁分析 4 Index Condition Pushdown 是MySQL 5.6 开始支持的一种根据索引进行查询的 优化方式。之前的MySQL数据库版本 不支持Index Condition Pushdown,当 进行索引查询时,首先根据索引记录 来查找记录,然后再根据WHEREguol4 记录,在支持Index Condition Pushdown 后,MySQL数据库会在取出索引的同时, 判断是否可以进行WHERE条件的过滤, 也就是将WHERE的部分过滤操作放到 了存储引擎层。在某些查询下,可以 大大减少上层SQL层对记录的索取 (fetch),从而提高数据库的整体性 能。 目录 学习目标 背景知识 简单SQL语句加锁分析 复杂SQL语句加锁分析 总结 死锁分析与总结 5 死锁分析与总结 5 死锁分析与总结 5 结论:死锁的发生与否,并不在于事务中有多少条SQL语句,死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。 死锁分析与总结 5 总结: MVCC 事务隔离级别 加锁操作的考虑因素 加锁的详细过程 死锁分析 THANKS * * 为什么聚簇索引上的记录也要加锁?试想一下,如果并发的一个SQL,是通过主键索引来更新:update t1 set id = 100 where name = ‘d’; 此时,如果delete语句没有将主键索引上的记录加锁,那么并发的update就会感知不到delete语句的存在,违背了同一记录上的更新/删除需要串行执行的约束。 * 首先,id列索引上,满足id = 10查询条件的记录,均已加锁。同时,这些记录对应的主键索引上的记录也都加上了锁。与组合二唯一的区别在于,组合二最多只有一个满足等值查询的记录,而组合三会将所有满足查询条件的记录都加锁。 * Repeatable Read隔离级别下,id列上有一个非唯一索引,对应SQL:delete from t1 where id = 10; 首先,通过id索引定位到第一条满足查询条件的记录,加记录上的X锁,加GAP上的GAP锁,然后加主键聚簇索引上的记录X锁,然后返回;然后读取下一条,重复进行。直至进行到第一条不满足条件的记录[11,f],此时,不需要加记录X锁,但是仍旧需要加GAP锁,最后返回结束。 ? * 在Repeatable Read隔离级别下,如果进行全表扫描的当前读,那么会锁上表中的所有记录,同时会锁上聚簇索引内的所有GAP,杜绝所有的并发 更新/删除/插入 操作。当然,也可以通过触发semi-consistent read,来缓解加锁开销与并发影响,但是semi-consistent read本身也会带来其他问题,不建议使用。 * 1 厦门大学数据库实验室 赖明星 2014年5月17日 MySQL加锁处理分析 目录 学习目标 背景知识 简单SQL语句加锁分析 复杂SQL语句加锁分析 总结 学习目标 1 理解锁的概念与锁的类型 理解加锁操作涉及到的考虑因素 理解lock与latch的区别 能够分析简单的SQL语句的加锁情况 目录 学习目标 背景知识 简单SQL语句加锁分析 复杂SQL语句加锁分析 总结 背景知识 2 事务的ACID特性 事务的隔离级别 2PL MVCC 聚簇索引 锁类型与锁算法 背景知识 2.1 背景知识 2.1 事务的隔离级别 2.2 READ UNCOMMITTED(未提交读)事务在这个级别下,事务所做的修改,即使没有提交,对其他事务也是可见的。 READ COMMITTED(提交读)READ COMMITTED下,只能“看见”已提交事务所做的修改,但是RC会出现一个问题,即同一事务两次读可能得到不一样的结果,因此,READ COMMITTED又称为不可重复读。 REPEATABLE READ(可重复读)REPEATABLE READ级别保证在同一个事务中多次读取同样的记录结果是一致的。但是理论上,可重复读隔离级别还是无法解决另外一个幻读的问题。 SERIALIZABLE(可串行化)最高的隔离级别,强制事务串行执行。 提交读 解决不可重复读 未提交读 解决脏读 可重复读 解决幻读 可串行化 2PL协议 2.3 MVCC 2.4 MySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC,MVCC最大的好处是

文档评论(0)

jinchenl + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档