加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_镇江站长网 (https://www.0511zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

高性能的MySQL(1)锁和MVCC - MySQL教程

发布时间:2014-06-24 01:32:45 所属栏目:MySql教程 来源:站长网
导读:一、MySQL逻辑架构 二、锁 1、读写锁 读锁是共享的,是互相不阻塞的,多个客户在同一时间读取同一资源,互补干扰。写锁是排他的,会阻塞其他的写锁和读锁。 2、
一、MySQL逻辑架构

二、锁

1、读写锁

读锁是共享的,是互相不阻塞的,多个客户在同一时间读取同一资源,互补干扰。写锁是排他的,会阻塞其他的写锁和读锁。

2、隐式和显式锁定

隐式:InnoDB,在执行事务过程中会自动加锁,除非执行COMMIT或ROLLBACK时锁会自动释放。

显式:可以使用SELECT...LOCKINSHAREMODE||SELECT...FORUPDATE生成锁

查看本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/

三、InnoDB的MVCC(多版本并发控制)

通过在每行记录的最后保存2个隐藏的列来实现。一个保存行的创建时间,一个保存行的过期时间,其实存的系统版本号。每开始一个新的事务,系统版本号都会递增。事务开始时刻的系统版本号作为事务的版本号,用来和查询到的每行记录的版本号来比较。

SELECT:

InnoDB会根据以下2个条件检查每行记录:

a、只查找版本早于当前事务版本的数据行,也就是行的系统版本号小于或等于事务的系统版本号,这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插入或修改的。

b、行的删除版本要么未定义,要么大于当前事务版本号。这样可以确保事务读取到的行在事务开始之前未被删除。

INSERT:

InnoDB为新插入的每一行保存当前系统版本号为行版本号

DELETE:

InnoDB为删除的每一行保存当前系统版本号作为行的删除标示。

UPDATE:

InnoDB为插入一行新纪录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标示。

本文出自 “phper-每天一点点~” 博客,请务必保留此出处http://janephp.blog.51cto.com/4439680/1306411

(编辑:应用网_镇江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!