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

荔湾网站建设公司网络运营培训课程

荔湾网站建设公司,网络运营培训课程,可以做用户画像的网站,营销网址大全由于事务的隔离性是由MVCC和锁(排他锁)来保证的,所以MVCC也尤为重要 MVCC全称Multi-Version Concurrency Control,多版本并发控制,事务的无锁的实现方式,指维护一个数据的多个版本,使得读写操作没有冲突 MVCC允许多个…

由于事务的隔离性是由MVCC和锁(排他锁)来保证的,所以MVCC也尤为重要

MVCC全称Multi-Version Concurrency Control,多版本并发控制,事务的无锁的实现方式,指维护一个数据的多个版本,使得读写操作没有冲突

MVCC允许多个事务同时读取同一行数据,而不会彼此阻塞,每个事务看到的数据版本是该事务开始时的数据版本。这意味着,如果其他事务在此期间修改了数据,正在运行的事务仍然看到的是它开始时的数据状态,从而实现了非阻塞读操作。

对于「读提交」和「可重复读」隔离级别的事务来说,它们是通过 Read View 来实现的,它们的区别在于创建 Read View 的时机不同,大家可以把 Read View 理解成一个数据快照,就像相机拍照那样,定格某一时刻的风景。

  • ReadView 是快照读SQL执行时MVCC提取数据的依据,记录并维护系统当前活跃的事务(未提交的)id

同时,读的概念又分为两种,一种是当前读,一种是快照读

  • 当前读

读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如select...lock in share mode(共享锁),select ...for update update insert delete(排它锁)都是一种当前读

  • 快照读

简单的select(不加锁)就是快照读,读取的是记录数据的可见版本,有可能是历史数据.不加锁,是非阻塞读

  • Read Committed:每次select,都生成一个快照读
  • Repeatable Read:开启事务后第一个select语句才是快照读的地方

如下:

MVCC有两个不同的隔离级别,生成的ReadView的实际不同

1.READ COMMITTED (读提交):在事务中每一次执行快照读时生成ReadView

2.REPEATABLE READ(可重复读): 仅在事务中第一次执行快照读时生成ReadView 后续复用该ReadView

  • 「读提交」隔离级别是在「每个select语句执行前」都会重新生成一个 Read View;
  • 「可重复读」隔离级别是执行第一条select时,生成一个 Read View,然后整个事务期间都在用这个 Read View。

就是在每次操作数据后,会将事务的由undolog进行保存,然后形成版本链表

对于使用 InnoDB 存储引擎的数据库表,它的聚簇索引记录中都包含下面两个隐藏列:

图片

  • trx_id,当一个事务对某条聚簇索引记录进行改动时,就会把该事务的事务 id 记录在 trx_id 隐藏列里
  • roll_pointer,每次对某条聚簇索引记录进行改动时,都会把旧版本的记录写入到 undo 日志中,然后这个隐藏列是个指针,指向每一个旧版本记录,于是就可以通过它找到修改前的记录。

Read View 有四个重要的字段:

trx_id表示的是当前MVCC读的事务id

img

  • m_ids :指的是在创建 Read View 时,当前数据库中「活跃事务」的事务 id 列表,注意是一个列表,“活跃事务”指的就是,启动了但还没提交的事务
  • min_trx_id :指的是在创建 Read View 时,当前数据库中「活跃事务」中事务 id 最小的事务,也就是 m_ids 的最小值。
  • max_trx_id :这个并不是 m_ids 的最大值,而是创建 Read View 时当前数据库中应该给下一个事务的 id 值,也就是全局事务中最大的事务 id 值 + 1;
  • creator_trx_id :指的是创建该 Read View 的事务的事务 id

在创建 Read View 后,我们可以将记录中的 trx_id 划分这三种情况:

一个事务去访问记录的时候,除了自己的更新记录总是可见之外,还有这几种情况:

  • 如果记录的 trx_id 值小于 Read View 中的 min_trx_id 值,表示这个版本的记录是在创建 Read View 已经提交的事务生成的,所以该版本的记录对当前事务可见

  • 如果记录的 trx_id 值大于等于 Read View 中的 max_trx_id 值,表示这个版本的记录是在创建 Read View 才启动的事务生成的,所以该版本的记录对当前事务不可见

  • 如果记录的 trx_id 值在 Read View 的 min_trx_id 和 max_trx_id 之间,需要判断 trx_id 是否在 m_ids 列表中:

  • 如果记录的 trx_id  m_ids 列表中,表示生成该版本记录的活跃事务依然活跃着(还没提交事务),所以该版本的记录对当前事务不可见

  • 如果记录的 trx_id 不在 m_ids列表中,表示生成该版本记录的活跃事务已经被提交,所以该版本的记录对当前事务可见

这种通过「版本链」来控制并发事务访问同一个记录时的行为就叫 MVCC(多版本并发控制)

例如在RC级别下

如图,当我们是事务5

可以访问的事务如下规则:

然后我们结合版本链

如图,我们的事务5可以的两条查询记录,可以根据他们的版本链来逐个分析,最后确定能够访问的版本,如第一个查询可以访问的是2,第二个是3

这样一来,当多个事务同时对表数据进行修改时,我们就可以知道哪个事务对应的修改的数据是哪个,同时也不会造成阻塞以及读写冲突问题

在RR级别下

由于仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView

所以每次的ReadView都是相同的

后面每次查询时使用的ReadView都是第一次的ReadView

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

相关文章:

  • 广告设计用的软件广州seo网站
  • 国外真人做爰直播聊天平台网站网站是怎么做的
  • 免费装修设计图福州百度推广优化排名
  • 衢州市住房建设局 网站seo标题优化的心得总结
  • 用前端框架做自适应网站优化关键词排名工具
  • 贵州易广建设集团网站哪家网络公司比较好
  • 做网站商城的目的是什么地推拉新app推广接单平台
  • 绵阳市建设局网站成都seo招聘
  • 有多少网站可以推广业务实时热搜榜榜单
  • 宁波英文网站建设网络策划书范文
  • 专业做网站的公司有哪些自动app优化
  • 免费做网站公司哪家好站长统计网站
  • 湖南门户网站建设google本地搜索
  • 建设响应式网站有哪些好处海外发布新闻
  • 各种颜色做网站给人的心里暗示代运营公司可靠吗
  • 深圳行业网站建设一站式营销推广
  • 传奇手游最新下载沈阳网络seo公司
  • 网站建设使用虚拟主机的优点与缺点百度seo找哪里
  • 大型网站怎么做优化郑州网站运营
  • 新开的网站怎么做seo优化企业管理培训免费课程
  • 外贸网站推广怎么样抖音seo
  • 遵义营销型网站建设谷歌sem推广
  • 电子商务网站的建设包含哪些流程网络营销成功案例分析其成功原因
  • 织梦做分类信息网站百度手机助手
  • ssh jsp做网站51趣优化网络seo工程师教程
  • 学做网站论坛插件视频广告
  • 恩施做网站百度小说搜索排行榜
  • changer网站建设广州网站维护
  • c++可以做网站吗站长全网指数查询
  • 广东网站制作公司排名系统优化大师