Mysql事务和锁_第1页
Mysql事务和锁_第2页
Mysql事务和锁_第3页
Mysql事务和锁_第4页
Mysql事务和锁_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MySQL事务和锁事务和锁张方雪张方雪大纲大纲 事务 隔离级别 MVCC 加锁 死锁 解决死锁Transaction 集中类型的事务: 扁平事务 带有保存点的扁平事务 链事务 嵌套事务 分布式事务ACIDIsolation Level StandardIsolation的各种实现的各种实现 MyISAM 不支持事务 在 PostgreSQL 里,只有两种独立的隔离级别,RC和Serializable, 默认RC. Oracle 跟PG差不多. Innodb 实现上完全支持者4个隔离级别, 默认RR.设置隔离级别设置隔离级别select global.tx_isolation, tx_isola

2、tion;set global | session tx_isolation=read-commited;如果带有global, 那么从当前时间往后, 创建的session都使用设置的级别, 如果是session关键字, 那么当有当前session被影响.Innodb MVCC InnoDB中每行隐含2个字段:更新或修改版本号和删除版本号(可以为空),每一个事务开始也有自己的版本号且是递增 MVCC的意义: 读写不冲突, 实现了可重复读, 提高了性能.Innodb MVCC1. select 同时满足2个条件的行,才能被返回:*行的被修改版本号当前事务的版本号,说明该行的是被该事务的后面启动事

3、务删除过(接着看下去.)2. insert 对新插入的行,行的更新版本被修改为该事务的版本号3. delete 对于删除,innodb直接把该行的被删除版本号设置为当前事务版本号,相当于标记删除,不是实际删除4.update 在更新行的时候,innodb会把原来的行复制一份到回滚端的表空间中,若成功,并把当前事务的版本号作为该行的更新版本号,否则rollbackMVCC在在RC和和RR的区别的区别 RR下面, select 一直使用当前事务最开始读到的版本 RC下面, 每次select , 为了督导最新提交, 都会去读最新的版本.Record lock A lock on an index r

4、ecord. For example, SELECT c1 FOR UPDATE FROM t WHERE c1 = 10; prevents any other transaction from inserting, updating, or deleting rows where the value of t.c1 is 10.Gap lock A lock on a gap between index records, or a lock on the gap before the first or after the last index record. Gap locks are p

5、art of the tradeoff between performance and concurrency, and are used in some transaction isolation levels and not others.Next-key lock A combination of a record lock on the index record and a gap lock on the gap before the index record 与之对应的其实还有个Previous-key lock, Innodb使用Next-key lockIntension loc

6、k A kind of lock that applies to the table level, used to indicate what kind of lock the transaction intends to acquire on rows in the table. Different transactions can acquire different kinds of intention locks on the same table, but the first transaction to acquire an intention exclusive (IX) lock

7、 on a table prevents other transactions from acquiring any S or X locks on the table. Conversely, the first transaction to acquire an intention shared (IS) lock on a table prevents other transactions from acquiring any X locks on the table. 锁之间的兼容关系锁之间的兼容关系一致性非锁定读一致性非锁定读加锁加锁 基于MVCC机制, select操作是在读取un

8、do中历史数据, 因为历史数据不需要修改, 所以不需要加任何锁.Locking reads 一致性锁定读, 不会使用undo日志, 会直接对当前记录加锁. select for update 会加x锁, select lock in share mode 回家s锁. 其他的都相同.提问提问 什么场景下, 需要使用select for update 而不是select in share mode?加锁信息解读加锁信息解读insert加锁加锁 Insert不会自己加锁,而在插入之后,如果还没有提交,此时正好有其它事务做更新或者删除操作了,则这个操作会为这个插入操作加一把锁,然后自己再加一把锁 In

9、sert acts as if locked by itself. Update by primary key 如果要更新的记录存在, 加一把 record lock. 如果记录不存在, 加gap lock. 如果整张表是空的, gap lock锁住(-INF, INF)Update by unique key 如果要更新的记录存在, 在唯一键上有一把行锁, 在主键上有一把行锁 如果记录不存在, 加gap lock.limit 对锁的影响对锁的影响 update limit 1, 只会对一条记录加锁Update by secondary key 如果记录存在, 那么就对索引加next-key lock, 同时对所有更新的记录加record lock 如果不存在, 那么就是一把gap lock range condition, 多把next-key lock.更多可以分析的例子更多可以分析的例子 联合索引 join like .Deadlock处理死锁处理死锁 遇到死锁直接回滚 超时机制(FIFO) Wait-for-graph(回滚undo量最小的)避免死锁避免死锁 R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论