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

b2b网站建设开发品牌策划案

b2b网站建设开发,品牌策划案,的网站建设公司那个好,免费什么是MVCC? MVCC全称多版本并发控制,是在并发访问数据库时对操作数据做多版本管理,避免因为写数据时要加写锁而阻塞读取数据的请求问题。 Innodb对mvcc的实现 1、事务版本号 每次事务开启前都会从数据库获得一个自增长的事务ID,可以从事…

什么是MVCC?

MVCC全称多版本并发控制,是在并发访问数据库时对操作数据做多版本管理,避免因为写数据时要加写锁而阻塞读取数据的请求问题。

Innodb对mvcc的实现

1、事务版本号

每次事务开启前都会从数据库获得一个自增长的事务ID,可以从事务ID判断事务的执行先后顺序。

2、表格的隐藏列
DB_TRX_ID记录操作该数据事务的事务ID;
DB_ROLL_PTR指向上一个版本数据在undo log 里的位置指针;
DB_ROW_ID:隐藏ID ,当创建表没有合适的索引作为聚集索引时,会用该隐藏ID创建聚集索引;
3、Undo log

Undo log 主要用于记录数据被修改之前的日志,在表信息修改之前先会把数据拷贝到undo log 里,当事务进行回滚时可以通过undo log 里的日志进行数据还原。

主要用途:

(1)保证事务进行rollback时的原子性和一致性,当事务进行回滚的时候可以用undo log的数据进行恢复。

(2)用于MVCC快照读的数据,在MVCC多版本控制中,通过读取undo log的历史版本数据可以实现不同事务版本号都拥有自己独立的快照数据版本。

4、Read view

在innodb 中每个事务开启后都会得到一个read_view。副本主要保存了当前数据库系统中正处于活跃(没有commit)的事务的ID号,保存的是系统中当前不应该被本事务看到的其他事务id列表。

Read view 的几个重要属性:
trx_ids: 当前系统活跃(未提交)事务版本号集合。
max_limit_id: 创建当前read view 时“当前系统最大事务版本号+1”。
min_limit_id: 创建当前read view 时“系统正处于活跃事务最小版本号”
creator_trx_id: 创建当前read view的事务版本号;
Read view 匹配条件规则
  1. 如果数据事务ID trx_id < min_limit_id,表明生成该版本的事务在生成Read View前,已经提交(因为事务ID是递增的),所以该版本可以被当前事务访问。
  2. 如果trx_id>= max_limit_id,表明生成该版本的事务在生成ReadView后才生成,所以该版本不可以被当前事务访问。
  3. 如果 min_limit_id =<trx_id< max_limit_id,需要分3种情况讨论
  • (1).如果m_ids包含trx_id,则代表Read View生成时刻,这个事务还未提交,但是如果数据的trx_id等于creator_trx_id的话,表明数据是自己生成的,因此是可见的。
  • (2)如果m_ids包含trx_id,并且trx_id不等于creator_trx_id,则Read View生成时,事务未提交,并且不是自己生产的,所以当前事务也是看不见的;
  • (3).如果m_ids不包含trx_id,则说明你这个事务在Read View生成之前就已经提交了,修改的结果,当前事务是能看见的。

READ_UNCOMMITTED 级别的事务不会获取read view 副本;

RC(read commit) 级别下同一个事务里面的每一次查询都会获得一个新的read view副本;

RR(重复读)级别下的一个事务里只会获取一次read view副本,从而保证每次查询的数据都是一样的。

MVCC+Next-key-Lock 防止幻读

InnoDB存储引擎在 RR 级别下通过 MVCCNext-key Lock 来解决幻读问题:

1、执行普通 select,此时会以 MVCC 快照读的方式读取数据

在快照读的情况下,RR 隔离级别只会在事务开启后的第一次查询生成 Read View ,并使用至事务提交。所以在生成 Read View 之后其它事务所做的更新、插入记录版本对当前事务并不可见,实现了可重复读和防止快照读下的 “幻读”

快照读是指读取数据时不是读取最新版本的数据,而是基于历史版本读取的一个快照信息(mysql读取undo log历史版本)

2、执行 select...for update/lock in share mode、insert、update、delete 等当前读

在当前读下,读取的都是最新的数据,如果其它事务有插入新的记录,并且刚好在当前事务查询范围内,就会产生幻读!InnoDB 使用 Next-key Lock 来防止这种情况。当执行当前读时,会锁定读取到的记录的同时,锁定它们的间隙,防止其它事务在查询范围内插入数据。只要我不让你插入,就不会发生幻读

当前读是读取的数据库最新的数据,当前读和快照读不同,因为要读取最新的数据而且要保证事务的隔离性,所以当前读是需要对数据进行加锁的

参考链接

https://zhuanlan.zhihu.com/p/52977862

https://juejin.cn/post/7016165148020703246?searchId=202502251734394A3BD7309987040F14B9#heading-20

http://www.dtcms.com/wzjs/84911.html

相关文章:

  • 市场营销策略国内外研究现状靠谱seo整站优化外包
  • 外国专门做魔兽世界邪恶补丁网站今日小说搜索风云榜
  • 阿里云上怎么做网页网站厦门seo培训学校
  • 关于汽车的网站百度竞价推广联系方式
  • 宠物网站建设费用2024年重启核酸
  • 网站建设论文选题表朋友圈网络营销
  • 加强政府网站信息建设工作通知线上广告推广平台
  • 厦门网站制作推广电商运营
  • 网站建设便宜的公司哪家好百度sem推广
  • 网站开发工作量及预算计算cba目前排行
  • 怎么做电脑端网站设计稿seo必备软件
  • 免费编程软件下载百度seo自然优化
  • 如何申请网站域名百度网页版入口
  • 网站开发数据库技术全球疫情今天最新消息
  • 长沙企业做网站哪家好品牌推广的作用
  • 网站制作苏州企业seo排名软件
  • 营销型网站定义专业做网站
  • 广西建设科技与建筑节能协会网站seo免费入门教程
  • 信阳市人民政府电话号码贵州seo技术培训
  • 徐州h5建站百度投诉中心电话24个小时
  • 武汉做网站的公司怎么搜不到中企动力网络平台推广运营有哪些平台
  • 高端医疗网站建设深圳百度快速排名提升
  • wordpress dux-plus东莞seo外包公司哪家好
  • 原创手做网站智能建站平台
  • 研究生做家教什么网站网络营销策划的流程
  • 建网站带支付链接软文范例大全800字
  • 开公司 专做网站网络媒体推广报价
  • 俱乐部手机网站模板网络宣传的方法渠道
  • 点击图片是网站怎么做的活动营销方案
  • 网站权重优化方式怎么办网站平台