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

江苏住房建设厅主办网站保定网站电话

江苏住房建设厅主办网站,保定网站电话,创造网站软件,金融网站织梦模板多版本并发控制#xff1a;MVCC的作用和基本原理 1、MVCC简介1.1 快照读与当前读的区别1.1.1 快照读1.1.2 当前读 1.2 数据库的读写问题1.3 MVCC的作用 2、MVCC实现原理之ReadView2.1 什么是ReadView2.2 ReadView的设计思路2.3 MVCC整体操作流程 1、MVCC简介 1.1 快照读与当前… 多版本并发控制MVCC的作用和基本原理 1、MVCC简介1.1 快照读与当前读的区别1.1.1 快照读1.1.2 当前读 1.2 数据库的读写问题1.3 MVCC的作用 2、MVCC实现原理之ReadView2.1 什么是ReadView2.2 ReadView的设计思路2.3 MVCC整体操作流程 1、MVCC简介 1.1 快照读与当前读的区别 mysql在读数据的场景下根据是否加锁分为了2种读的方式 1.1.1 快照读 不加锁的简单的select都属于快照读即不加锁的非阻塞读。比如 SELECT * FROM students WHERE ...之所以出现快照读的情况是基于提高并发性能的考虑快照读的实现是基于MVCC。他在很多情况下避免了加锁操作降低了开销。 1.1.2 当前读 当前读读取的是记录最新的数据。加锁的SELECT或者对数据进行增删改查都会进行当前读。比如 SELECT * FROM student LOCK IN SHARE MODE; # 共享锁 SELECT * FROM student FOR UPDATE; # 排他锁 INSERT INTO student VALUES ...; # 排他锁 DELETE FROM student WHERE ...; # 排他锁 UPDATE student SET ...; # 排他锁1.2 数据库的读写问题 数据库多事务场景下的读-读不会存在并发问题写-写场景存在并发问题因此一定需要加锁。 那读-写、或者写-读场景下如何处理 方案一读操作也采用加锁的方式。 比如在银行存款的事务中需要先读取账户余额然后再进行存/取操作最后写入数据库中。在这个过程中是不希望其他事务在该事务还未结束的情况下访问该余额。这种情况下在读取余额的时候就需要进行加锁操作了。这样就可以保证本次操作结束后的金额一定是和预期一致的。 1.3 MVCC的作用 数据库的读写问题除了采用加锁的方式解决还可以通过MVCC的方式解决。 MVCCMultiversion Concurrency Control多版本并发控制通过数据行的多个版本管理实现数据库的并发控制。即查询一些正在被另一个事务更新的数据行时可以看到他们被更新之前的值不用等待另一个事务释放锁。 所谓的MVCC就是生成一个ReadView通过ReadView找到符合条件的记录版本历史版本由undo日志构建。查询语句只能读到在生成ReadView之前已提交事务做的修改不影响其他事务进行写操作因此可以解决读写问题。相比于加锁的方式解决读写问题可以大幅提高并发性能。 2、MVCC实现原理之ReadView MVCC的实现依赖于隐藏字段、Undo Log、Read View undo日志版本链中索引记录都包含2个必要的隐藏列 trx_id每次一个事务对某条索引记录进行修改时都会把该事务的事务id赋值给trx_id隐藏列。roll_pointer每次对某条索引记录进行修改时都会把旧版本写入到undo日志中这个隐藏列相当于一个指针可以通过它来找到该记录修改前的信息。 以下图举例其中蓝色部分为页面的当前记录绿色部分为undo日志。 2.1 什么是ReadView 多个事务对同一行记录进行更新会产品多个历史快照这些历史快照保存在undo log里。如果一个事务想要查询这个行记录怎么判断读取哪个版本的记录呢这个时候就可以用上Readview了它解决了多事务场景下的可见性的问题。 Readview就是事务在使用MVCC机制进行快照读操作时产生的读视图。当事务启动时会生成数据库系统当前的一个快照Innodb为每个事务构造了一个数组用来记录并维护系统当前未提交事务的ID。 2.2 ReadView的设计思路 Readview要解决的核心问题是判断版本链中的哪个版本是当前事务可见的。 为此Readview设计了4个核心字段 creator_trx_id创建Readview的事务ID。只有对表做增删改操作时才会分配事务ID读操作的事务ID默认值为0。trx_ids表示生成Readview时当前系统中未提交事务的事务id列表。up_limit_id当前未提交事务列表中最小的事务id。low_limit_id生成Readview时系统应该分配给下一个事务的id值。 举例现在有id未123这3个事务然后id为3的事务提交了。此时一个新的读事务在生成Readview时trx_ids的值是[1,2]up_limit_id的值是1low_limit_id的值是4。 有了Readview在访问某条记录时根据以下步骤判断记录的某个版本是否可见 如果被访问版本的trx_id值与Readview中的creator_trx_id值相同表明当前呢事务在访问自己修改的记录所以该版本可以被当前事务访问。如果被访问版本的trx_id值小于Readview中的up_limit_id值表明生成该版本的事务在当前事务生成Readview之前就已经提交了所以该版本可以被当前事务访问。如果被访问版本的trx_id值大于等于Readview中的low_limit_id值表明生成该版本的事务在当前事务生成Readview之后才开启所以该版本不可以被当前事务访问。如果被访问版本的trx_id值在Readview中的up_limit_id值和low_limit_id值之间需要判断一下trx_id值是否在trx_ids列表中。 1如果在说明创建Readview时生成该版本的事务还未提交该版本不可以被访问。 2如果不在说明创建Readview时生成该版本的事务已被提交该版本可以被访问。 2.3 MVCC整体操作流程 查询记录时MVCC操作流程如下。如果某个版本的数据对当前事务不可见的话就顺着版本链找下一个版本的数据继续按照流程进行判断。 获取事务自己的版本号即事务ID生成Readview查询数据根据数据的版本号trx_id值按照2.2中的规则进行判断如果不符合2.2中Readview规则从undo log中获取历史快照循环执行最后返回符合2.2中Readview规则中的数据。
http://www.sczhlp.com/news/205046/

相关文章:

  • 网站备案主体是网易云音乐网页版
  • 网站服务器的功能wordpress的文件说明
  • 服装公司网站背景图东莞企业推广网络营销
  • 苏州品牌网站设计开发尚海整装官网门店电话
  • 黑龙江省建设安全监督网站锤子网站cms版本
  • 西安网站建设开发公司辽宁网站开发
  • 找个网站看看wordpress只能下载一个文件
  • 做网站和做阿里巴巴中国建设协会八大员
  • 易语言做检测网站更新金华建设工程网站
  • 做网站上凡科58同城房产信息
  • 华北冶建工程建设有限公司网站wordpress po修改
  • git做网站根目录需要证书的建筑公司网站
  • 最新的网站搭建工具建立网站的目的
  • ysyx学习:移植rt-thread
  • 综合性题目
  • 实用指南:从入门到精通:Django的深度探索之旅
  • UML中9中数据流图总结
  • seo整站优化价格发布页全部页面设计
  • 两种树状数组
  • 不用流量的地图导航软件南阳seo长尾关键词
  • h5制作网站 有哪些郑州哪里有做网站的
  • iis搭建网站教程win7网站开发建设流程
  • 山东网站推广有限公司广西麒铭建设有限公司网站
  • 潍坊网站建设方案推广大岭山东莞网站建设
  • 巩义网站推广广州网站优化推广公司
  • wordpress站点标题和副标题wordpress做cms网站
  • 企业网站模板 演示WordPress问答模板主题
  • 网站建设多少钱杭州河南宣传片制作公司
  • 华阳路街道网站建设2024免费网站推广大全
  • 公司网络推广网站就选火13星仁德浙江省信息港成绩查询