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

农产品网站建设姓名查询

农产品网站建设,姓名查询,知识库管理系统软件,万户 网站建设文章目录前言一、MVCC以及MVCC的缺点1.1 MVCC可以为数据库解决什么问题1.2 MVCC的基本思想1.3 版本号1.4 Undo日志1.5 ReadView1.6 快照读和当前读1.6.1 快照读1.6.2 当前读二、记录锁三、间隙锁四、邻键锁总结前言 一、MVCC以及MVCC的缺点 MVCC,即多版本并发控制…

文章目录

  • 前言
  • 一、MVCC以及MVCC的缺点
    • 1.1 MVCC可以为数据库解决什么问题
    • 1.2 MVCC的基本思想
    • 1.3 版本号
    • 1.4 Undo日志
    • 1.5 ReadView
    • 1.6 快照读和当前读
      • 1.6.1 快照读
      • 1.6.2 当前读
  • 二、记录锁
  • 三、间隙锁
  • 四、邻键锁
  • 总结


前言

一、MVCC以及MVCC的缺点

MVCC,即多版本并发控制,是InnoDB机制中的一种用来解决读写冲突的无锁并发机制。

我们可以简单认为MVCC式行锁的变种。在表锁中我们的读写是阻塞的,基于提升并发性能的考虑,MVCC一般读写是不阻塞的(很多情况避免了加锁的操作)。

MVCC解决了脏读和不可重复读的问题,但是在某些情况仍然没有解决幻影读的问题。这就是为什么我们要引入接下来的邻键锁Next-Key Locks。

1.1 MVCC可以为数据库解决什么问题

在并发读写数据库的时候,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能。

同时可以解决脏读和不可重复读的问题。

1.2 MVCC的基本思想

之前我们介绍了行锁和表锁,我们知道在操作数据库中的索引的时候会加上行锁,在操作数据库中的非索引字段的时候会加上表锁。然而在实际场景中读操作往往多于写操作,因此我们又引入了读写锁来避免不必要的加锁操作,例如读和读之间没有互斥关系。 读写锁中读和写操作仍然是互斥的。

MVCC中的基本思想就是写操作更新最新的版本快照,而读操作去读旧版本的快照,两者没有互斥关系。

MVCC的核心组成部分可以分为版本号,undo日志以及readview。

1.3 版本号

  1. 系统版本号 SYS_ID:是一个递增的数字,每开始一个新的事务,系统版本号就会自动递增。
  2. 事务版本号 TRX_ID :事务开始时的系统版本号。

1.4 Undo日志

MVCC 的多版本指的是多个版本的快照,快照存储在 Undo 日志中,该日志通过回滚指针 ROLL_PTR 把一个数据行的所有快照连接起来。

例如在 MySQL 创建一个表 t,包含主键 id 和一个字段 x。我们先插入一个数据行,然后对该数据行执行两次更新操作。

INSERT INTO t(id, x) VALUES(1, "a");
UPDATE t SET x="b" WHERE id=1;
UPDATE t SET x="c" WHERE id=1;

因为没有使用 START TRANSACTION 将上面的操作当成一个事务来执行,根据 MySQL 的 AUTOCOMMIT 机制,每个操作都会被当成一个事务来执行,所以上面的操作总共涉及到三个事务。快照中除了记录事务版本号 TRX_ID 和操作之外,还记录了一个 bit 的 DEL 字段,用于标记是否被删除。
请添加图片描述
INSERT、UPDATE、DELETE 操作会创建一个日志,并将事务版本号 TRX_ID 写入。DELETE 可以看成是一个特殊的 UPDATE,还会额外将 DEL 字段设置为 1。

1.5 ReadView

MVCC 维护了一个 ReadView 结构,主要包含了当前系统未提交的事务列表 TRX_IDs {TRX_ID_1, TRX_ID_2, …},还有该列表的最小值 TRX_ID_MIN 和 TRX_ID_MAX。

请添加图片描述
在进行 SELECT 操作时,根据数据行快照的 TRX_ID 与 TRX_ID_MIN 和 TRX_ID_MAX 之间的关系,从而判断数据行快照是否可以使用:

  1. TRX_ID < TRX_ID_MIN,表示该数据行快照时在当前所有未提交事务之前进行更改的,因此可以使用。

  2. TRX_ID > TRX_ID_MAX,表示该数据行快照是在事务启动之后被更改的,因此不可使用。

  3. TRX_ID_MIN <= TRX_ID <= TRX_ID_MAX,需要根据隔离级别再进行判断:
    3.1. 提交读:如果 TRX_ID 在 TRX_IDs 列表中,表示该数据行快照对应的事务还未提交,则该快照不可使用。否则表示已经提交,可以使用。
    3.2. 可重复读:都不可以使用。因为如果可以使用的话,那么其它事务也可以读到这个数据行快照并进行修改,那么当前事务再去读这个数据行得到的值就会发生改变,也就是出现了不可重复读问题。

在数据行快照不可使用的情况下,需要沿着 Undo Log 的回滚指针 ROLL_PTR 找到下一个快照,再进行上面的判断。

1.6 快照读和当前读

1.6.1 快照读

MVCC中的select操作是快照中的数据,不需要进行加锁操作。

1.6.2 当前读

MVCC 其它会对数据库进行修改的操作(INSERT、UPDATE、DELETE)需要进行加锁操作,从而读取最新的数据。可以看到 MVCC 并不是完全不用加锁,而只是避免了 SELECT 的加锁操作。

在进行 SELECT 操作时,可以强制指定进行加锁操作。以下第一个语句需要加 S 锁,第二个需要加 X 锁。

SELECT * FROM table WHERE ? lock in share mode;
SELECT * FROM table WHERE ? for update;

二、记录锁

三、间隙锁

四、邻键锁


总结

http://www.tj-hxxt.cn/news/8882.html

相关文章:

  • 保定投递网站建设seo好seo
  • 网站用什么软件做败sp企业短视频推广
  • 宁波网站建站的公司网站建站哪家公司好
  • 视频网站开发步骤新品牌进入市场的推广方案
  • 网站都是哪里找的网站优化排名哪家性价比高
  • wordpress国产网校百度seo优化技巧
  • 金坛网站建设公司重庆seo标准
  • 两学一做 山西答题网站百度搜索关键词统计
  • 温州专业手机网站制作哪家便宜各平台推广费用
  • 做网站背景图片怎么放网络游戏营销策略
  • 做pc和移动网站的适配深圳网站维护
  • 女孩做网站工作辛苦吗美橙互联建站
  • 基于cms的网站设计与实现毕业论文西安专业网络推广平台
  • 岳阳设计网站推荐品牌营销战略
  • 分类网站开发2022最近比较火的热点话题
  • 建材建设行业网站体育热点新闻
  • 广东省建设安全监督站的网站深圳英文网站推广
  • 建设项目网站谷歌账号注册
  • 上海哪家公司做网站郑州seo顾问外包
  • 网站手机版怎么做的百度快速排名化
  • 南京做企业网站的公司在线注册免费域名
  • 小程序平台服务协议宁波seo优化外包公司
  • 图片模板 网站源码培训管理平台
  • 德国室内设计网站网站页面设计模板
  • 手机餐饮网站开发免费发帖推广平台
  • 企业做网站的好处千秋网络广州专做优化的科技公司
  • 市场监督管理局官网查询系统石家庄高级seo经理
  • 网站代备案流程图完整企业网站模板
  • 用织梦做网站快吗北京seo公司司
  • 网站搭建前景微信小程序排名关键词优化