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

建设外贸b2c网站东莞网站建设排名

建设外贸b2c网站,东莞网站建设排名,个人网站源码html,企业网上购物系统什么是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/293932.html

相关文章:

  • 技术社区网站开发独立站搭建要多少钱
  • 凡科网站 怎么开支付白酒最有效的推广方式
  • 秦皇岛 网站百度推广是什么意思
  • 淄博网站建设多少钱秦皇岛seo排名
  • 网页qq直接登陆驻马店网站seo
  • 做哪一类网站容易有排名大数据分析网站
  • 石家庄微网站建设公司哪家好百度友情链接
  • 新网站注册产品推广朋友圈文案
  • 沈阳网站建设沈阳搜索引擎营销的优缺点及案例
  • 织梦网站怎么做伪静态页面seo手机搜索快速排名
  • wordpress 视频站模板百度网站链接
  • 做威客上什么网站比较好苏州seo关键词优化方法
  • 宋朝网站应该怎么做网络推广怎么学
  • 中学院新校区建设专题网站西安官网seo
  • 佛山模板建站代理新东方雅思培训机构官网
  • 杭州网站建设 网络服务百度竞价排名怎么靠前
  • 怎么建设网站商城如何制作网页最简单的方法
  • 英文网站案例属于seo网站优化
  • 优美女人女性网站模版临沂seo顾问
  • 合肥网站建设博客虎门今日头条新闻
  • 武昌网站建设公司企业网络营销案例分析
  • 怎么查看网站空间大小厦门seo起梦网络科技
  • 免费邯郸网站建设精准客户软件
  • 网站制作测试范围怎么制作公司网页
  • wordpress文件储存seo推广需要多少钱
  • 网站单页在线制作国家最新新闻
  • 营销型网站建设案例杭州seo外包服务
  • 做微信首图的网站域名注册信息查询whois
  • 天津小型企业网站设计b站视频推广的方法有哪些
  • 网站建设公司哪有给网站做seo的价格