当前位置: 首页 > news >正文

徐州手机建站模板合肥优化

徐州手机建站模板,合肥优化,上海弘韬建设发展有限公司网站,考试报名费悦生活建设银行网站文章目录 当前读#xff08;加锁#xff09;快照读#xff08;不加锁#xff09;MVCC隐藏字段undo-log版本链A. 第一步B.第二步C. 第三步 readview MVCC原理分析RCA. 先来看第一次快照读具体的读取过程#xff1a;B. 再来看第二次快照读具体的读取过程: RR隔离级别 当前读… 文章目录 当前读加锁快照读不加锁MVCC隐藏字段undo-log版本链A. 第一步B.第二步C. 第三步 readview MVCC原理分析RCA. 先来看第一次快照读具体的读取过程B. 再来看第二次快照读具体的读取过程: RR隔离级别 当前读加锁 读取的是记录的最新版本读取时还要保证其他并发事务不能修改当前记录会对读取的记录进行加锁。对于我们日常的操作如select … lock in share mode(共享锁)select …for update、update、insert、delete(排他锁)都是一种当前读. 在测试中我们可以看到即使是在默认的RR隔离级别下事务A中依然可以读取到事务B最新提交的内容因为在查询语句后面加上了 lock in share mode 共享锁此时是当前读操作。当然当我们加排他锁的时候FOR UPDATE也是当前读操作。 快照读不加锁 简单的select不加锁就是快照读快照读读取的是记录数据的可见版本有可能是历史数据不加锁是非阻塞读。 Read Committed每次select都生成一个快照读。每次都生成ReadViewRepeatable Read开启事务后第一个select语句才是快照读的地方。第一次select才生成ReadViewSerializable快照读会退化为当前读。 在测试中,我们看到即使事务B提交了数据,事务A中也查询不到。 原因就是因为普通的select是快照读而在当前默认的RR隔离级别下开启事务后第一个select语句才是快照读可能是历史记录的地方后面执行相同的select语句都是从快照可能是历史记录中获取数据可能不是当前的最新数据这样也就保证了可重复读。 每次复用前面的ReadView除非本事务自己修改否则其他事务的修改本事务无法知道的 MVCC 全称 Multi-Version Concurrency Control多版本并发控制。指维护一个数据的多个版本使得读写操作没有冲突快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现还需要依赖于数据库记录中的三个隐式字段、undo log日志、readView。 接下来我们再来介绍一下InnoDB引擎的表中涉及到的隐藏字段 、undolog 以及 readview从而来介绍一下MVCC的原理。 隐藏字段 当我们创建了上面的这张表我们在查看表结构的时候就可以显式的看到这三个字段。 实际上除了这三个字段以外InnoDB还会自动的给我们添加三个隐藏字段及其含义分别是 字段名称含义DB_TRX_ID最近修改事务ID记录插入这条记录或最后一次修改该记录的事务ID。DB_ROLL_PTR回滚指针指向这条记录的上一个版本用于配合undo log指向上一个版本。DB_ROW_ID隐藏主键如果表结构没有指定主键将会生成该隐藏字段用于唯一标识每一行记录。 而上述的前两个字段是肯定会添加的 是否添加最后一个字段DB_ROW_ID得看当前表有没有主键 如果有主键则不会添加该隐藏字段 undo-log 回滚日志在insert、update、delete的时候产生的便于数据回滚的日志。当insert的时候产生的undo log日志只在回滚时需要在事务提交后可被立即删除。而update、delete的时候产生的undo log日志不仅在回滚时需要在快照读时也需要不会立即被删除。 版本链 有一张表原始数据为有一张表原始数据为 idagenameDB_TRX_IDDB_ROLL_PTR3030A301null DB_TRX_ID : 代表最近修改事务ID记录插入这条记录或最后一次修改该记录的事务ID是自增的。 DB_ROLL_PTR 由于这条数据是才插入的没有被更新过所以该字段值为null。 然后有四个并发事务同时在访问这张表。 A. 第一步 当事务2执行第一条修改语句时会记录undo log日志记录数据变更之前的样子; 然后更新记录并且记录本次操作的事务ID回滚指针回滚指针用来指定如果发生回滚回滚到哪一个版本。 B.第二步 当事务3执行第一条修改语句时也会记录undo log日志记录数据变更之前的样子; 然后更新记录并且记录本次操作的事务ID回滚指针回滚指针用来指定如果发生回滚回滚到哪一个版本 C. 第三步 当事务4执行第一条修改语句时也会记录undo log日志记录数据变更之前的样子; 然后更新记录并且记录本次操作的事务ID回滚指针回滚指针用来指定如果发生回滚回滚到哪一个版本 最终我们发现不同事务或相同事务对同一条记录进行修改会导致该记录的undolog生成一条记录版本链表链表的头部是最新的旧记录链表尾部是最早的旧记录。 readview ReadView读视图是 快照读 SQL执行时MVCC提取数据的依据记录并维护系统当前活跃的事务未提交的id(注意是维护未提交事务id,m_ids ReadView中包含了四个核心字段 字段名称含义m_ids当前活跃的事务ID集合。min_trx_id最小活跃事务ID。max_trx_id预分配事务ID当前最大事务ID1因为事务ID是自增的。creator_trx_idReadView创建者的事务ID。 而在readview中就规定了版本链数据的访问规则 trx_id 代表当前undolog版本链对应事务ID 条件是否可以访问说明trx_id creator_trx_id可以访问该版本成立说明数据是当前这个事务更改的。trx_id min_trx_id可以访问该版本成立说明数据已经提交了。trx_id max_trx_id不可以访问该版本成立说明该事务是在ReadView生成后才开启。这里应该是异常情况想了很久始终想不通什么情况会导致这种情况min_trx_id trx_id max_trx_id如果trx_id不在m_ids中是可以访问该版本成立说明数据已经提交。因为m_ids是未提交的事务如果未提交则不能访问提交了则可以访问 不同的隔离级别生成ReadView的时机不同 READ COMMITTEDRC读已提交 在事务中每一次执行快照读时生成ReadView。REPEATABLE READRR,可重复读仅在事务中第一次执行快照读时生成ReadView后续复用该ReadView MVCC原理分析 RC RC隔离级别下在事务中每一次执行快照读时生成ReadView。 我们就来分析事务5中两次快照读读取数据是如何获取数据的? 在事务5中查询了两次id为30的记录由于隔离级别为Read Committed所以每一次进行快照读都会生成一个ReadView那么两次生成的ReadView如下。 那么这两次快照读在获取数据时就需要根据所生成的ReadView以及ReadView的版本链访问规则到undolog版本链中匹配数据最终决定此次快照读返回的数据 A. 先来看第一次快照读具体的读取过程 在进行匹配时会从undo log的版本链从上到下进行挨个匹配拿记录undo log里面每个版本的数挨行往ReadView里面去套公式就是记录0x000030x000020x00001 先匹配 idagenameDB_TRX_IDDB_ROLL_PTR3010A340x00003 trx_id 代表当前undolog版本链对应事务ID m_ids是未提交的事务id的集合 这条记录这条记录对应的trx_id为4也就是将4带入右侧的匹配规则中。 ①不满足 ②不满足 ③不满足 ④也不满足 都不满足则继续匹配undo log版本链的下一条 B. 再来看第二次快照读具体的读取过程: RR隔离级别 RR隔离级别下仅在事务中第一次执行快照读时生成ReadView后续复用该ReadView。 因此一个事务中执行两次相同的select语句查询到的结果是一样的 那MySQL是如何做到可重复读的呢? 我们简单分析一下就知道了 所以呢MVCC的实现原理就是通过 InnoDB表的隐藏字段、UndoLog 版本链、ReadView来实现的。 而MVCC 锁则实现了事务的隔离性。 而一致性则是由redolog 与 undolog保证。 m_ids是未提交的事务 creator trx id是当前Select语句读取产生的事务id生成ReadView 当前事务id是DB trx id
http://www.zqtcl.cn/news/705170/

相关文章:

  • 网站建设教程百度网盘网站报价明细
  • 网站建设杭州哪家好ui设计学校
  • 门户网站做等级保护测评成都企业建站系统
  • 网站建设需求确认表网站建设需求材料
  • 定制型网站制作价格北京网站建设费用
  • 与女鬼做的网站上海有限公司
  • ytwzjs烟台网站建设c 做的网站又哪些
  • 做网站就是做app中国包装创意设计网
  • 淄博做网站宿迁房产网丫丫找房
  • 苏州专业做网站比较好的公司杭州好的公司网站设计
  • 做百度网站要多少钱帮做网站一般多少钱
  • 云南网站备案查询山西做网站费用
  • 北京建站管理系统开发网站高转化页面
  • 南充网站制作不会做网站能做网络销售吗
  • 这2个代码 找做网站的 安装一下搜索引擎排行榜
  • 百度收录收费 重大网站网络空间设计说明怎么写
  • 网站开发 php模板图书馆网站建设的项目报告
  • 保定模板建站定制网站wordpress 收集
  • 万网 网站模板软件开发三个主要阶段
  • 网站首页psd格式怎么做seo关键词有哪些类型
  • 做部队网站技术vue做购物网站
  • 品牌网站建设服务机构wordpress英文改中文
  • 系统开发费外链优化方法
  • 网站建设公司起名网站构建的友情链接怎么做
  • 网站建设湖南wordpress 缓存时间
  • 木藕设计网站大全福州网络营销推广产品优化
  • 建设银行网上官方网站怎么批量修改wordpress文章内容
  • 多肉建设网站的目的及功能定位app网站开发成本
  • 如何保存网站上的图片不显示图片报纸网站建设
  • 网站营销的流程品牌推广方式有哪些