mysql中MVCC--多版本并发控制

news2024/11/19 6:44:25

读读:不存在任何安全问题,不需要并发控制 读写:有线程安全问题,脏读、幻读、不可重复读 写写:有线程安全问题,更新丢失

为了解决读写的并发问题

什么是MVCC

只有InnoDB引擎支持mvcc,mysql默认支持可重复读,就是依赖mvcc实现的。

多版本并发控制,主要是为了提高数据库的并发性能,在多事务、高并发的情况下数据不会错乱。

同一行数据平时发生读写请求时,会上锁阻塞住。

但mvcc用更好的方式去处理读一写请求,做到在发生读-写请求冲突时 不用加锁。不会有锁竞争

这个读是指的快照读,就是单纯的selectMVCC保障写者写操作造成的变化在写操作完成之前(或者数据库事务提交之前)对于其他的读者来说是不可见的。

当前读,当前读是一种加锁操作,是悲观锁。比如insert、delete、update

事务的隔离性就是通过加锁或者MVCC实现的

隔离级别中的读已提交RC和可重复读RR的快照读都是基于MVCC实现的

MVCC如何实现读已提交和可重复读

读已提交(read committed) Oracle默认的隔离级别 允许读取已经提交的数据。只有在同一个事务第一个快照读才会创建readview,之后的每次快照读都使用的同一个readview,所以每次的查询结果都是一样的。可能会导致幻读和不可重复读

可重复读(repeatable read)MySQL默认的隔离级别,安全性较好,性能一般 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,

因为可重复度会在第一次select的时候产生readview,只有在同一个事务第一个快照读才会创建readview,之后的每次快照读都使用的同一个readview,所以另一个事务进行update或者insert操作后,第一个事务select查询的结果不会变

但可能会产生幻读,如果事务中全部都是快照读的话,那么是不会产生幻读问题的,但是快照读和当前读一起使用的时候就会产生幻读问题

解决幻读的问题 就是加锁

mvcc的实现

基于undolog、版本链、readview。

在我们能看到的字段后面有三个隐藏字段

  • trx_id:事务id,每进行一次事务操作,就会自增1。

  • roll_pointer:回滚指针,用于找到上一个版本的数据,结合undolog进行回滚。

  • row_id 隐藏主键,如果数据表没有设置主键,会有一个6字节的rowid

undolog:回滚日志,在insert、delete、update操作的时候方便回滚日志的信息

什么是readview视图呢?

readview叫做读视图,是事务在进行快照读操作的时候产“生的视图,此视图保存的并不是实际的数据,而是事务相关的信息,主要的用途是来进行可见性判断

当我们用select读取数据时,这一时刻的数据会有很多个版本(例如上图有四个版本),但我们并不知道读取哪个版本,这时就靠readview来对我们进行读取版本的限制,通过readview我们才知道自己能够读取哪个版本。

在一个readview快照中主要包括以下这些字段:

m_ids:活跃的事务就是指还没有commit的事务。

max_trx_id:例如m_ids中的事务id为(1,2,3),那么下一个应该分配的事务id就是4,max_trx_id就是4。

creator_trx_id:执行select读这个操作的事务的id。

 

readview如何判断版本链中哪个版本可用?

trx_id表示要读取的事务id

(1)如果要读取的事务id等于进行读操作的事务id,说明是我读取我自己创建的记录,所以可以访问这个版本

(2)如果要读取的事务id小于最小的活跃事务id,说明要读取的事务已经提交,那么可以读取。

(3)max_trx_id表示生成readview时,分配给下一个事务的id,如果要读取的事务id大于max_trx_id,说明该id已经不在该readview版本链中了,故无法访问。

(4)m_ids中存储的是活跃事务的id,如果要读取的事务id不在活跃列表,那么就可以读取,反之不行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常用数据库之mysql的搭建与使用

1. 简介 mysql为关系型数据库,是由瑞典的MySQLAB公司开发的,但是几经辗转,现在是Oracle产品。它是以“客户/服务器”模式实现的,是一个多用户、多线程的小型数据库服务器。而且MySQL是开源数据的,任何人都可…

Qt 模型视图编程之自定义只读数据模型

背景 Qt 中的模型视图架构是用来实现大量数据的存储、处理及其显示的,主要原理是将数据的存储与显示分离:模型定义了标准接口对数据进行访问;视图通过标准接口获取数据并定义显示方式;模型使用信号与槽机制通知视图数据变化。 Q…

基于Java Web技术的动车购票系统

毕 业 设 计 中文题目基于Java Web技术的动车购票系统英文题目Train ticket system based on Web JavaTechnology毕业设计诚信声明书 本人郑重声明:在毕业设计工作中严格遵守学校有关规定,恪守学术规范;我所提交的毕业设计是本人在 指导教师…

零入门容器云网络-7:基于golang编程实现给ns网络命名空间添加额外的网卡

已发表的技术专栏(订阅即可观看所有专栏) 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

“美亚杯”第三届中国电子数据取证大赛答案解析(个人赛)

试题 1 Gary的笔记本电脑已成功取证并制作成镜像 (Forensic Image),下列哪个是其MD5哈希值。 A. 0CFB3A0BB016165F1BDEB87EE9F710C9 B. 5F1BDEB87EE9F710C90CFB3A0BB01616 C. A0BB016160CFB3A0BB0161661670CFB3 D. 16160CFB3A0BB016166A0BB0161661…

独立产品灵感周刊 DecoHack #041 - 那些独立开发者是怎么养活自己的

本周刊记录有趣好玩的独立产品设计开发相关内容,每周发布,往期内容同样精彩,感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到,建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。 💻 产品推荐 1. SOCCER STREAM…

分布式的设计思想

一、分布式设计基础 传统架构问题 ① 单机资源不足 存储:3台机器,每台机器都有2T的硬盘空间,但是现在有1个3T的文件要存储计算:3台机器,每台机器都有8核CPU和8GB内存,但是现在有1个程序需要12核CPU和24G…

启明智显分享| Sigmastar SSD212 SPI+RGB点屏示例(2.1寸 480*480圆屏,可应用于旋钮)

SSD20X 点SPIRGB屏和SSD212 类似,区别在于对应文件名不同、SSD20X没有config.ini文件。 SSD20X SPI初始化文件:vi boot/common/cmd_customer_init.c SSD20X由于没有config.ini 可以用jpeg2disp 中.h 屏参头文件的方式实现显示logo。 这里以SSD212 点屏为…

Java——AVL树

平衡二叉树 在之前的blog中讲到,平衡二叉树是一棵树,任意一个节点的左树的所有节点都小于这个节点,右树的所有节点都大于这个节点 因此,可以利用这个性质来中序遍历,就可以得到一个有序的序列,而如果我们要…

谷歌地图商家抓取工具 G-Business Extractor 7.5

G 业务提取器 | 谷歌地图抓取工具 G-Business Extractor是一款功能强大的工具,可帮助您从 Google 地图中寻找商机。它是最好的Google Maps Scraper工具,能够从最重要的企业目录中提取数据。 Google 地图是一个来源,您可以在其中找到按类别和位…

“美亚杯”第三届中国电子数据取证大赛答案解析(团体赛)

Questions Gary被逮捕后,其计算机被没收并送至计算机取证实验室。经调查后,执法机关再逮捕一名疑犯Eric,并检取其家中计算机(window 8), 并而根据其家中计算机纪录, 执法机关再于其他地方取得一台与案有关的服务器,而该服务器内含四个硬盘。该服务器是运…

跨端开发浪潮中的变与不变

自 90 年代初开启 PC 时代以来,随着移动网络的快速普及,在 2010 年左右,进入移动时代、IOT 时代,各种移动互联设备不断涌现,除了最常见的 PC、Pad、智能手机外,它还可能是小小的一块智能手表,也…

NKOJ P9492 【USACO】视频共享

题目分析 这道题其实最容易想到的方法是离线枚举,但是其时间复杂度为,很明显会超时(这题数据连离线化都救不了) 那该如何办? 并查集;因为他说有一个推荐列表,而这个推荐列表中i号视频推荐了j号视频&#…

SpringSecurity+OAuth2.0+JWT实现单点登录应用

SpringSecurityOAuth2.0JWT实现单点登录应用 gitee项目练习地址:https://gitee.com/xzq25_com/springsecurity.oauth2 OAuth2.0单点登录实践一、搭建OAuth授权服务器,采用授权码模式JWT令牌二、创建服务client:SSOA、SSOB 并进行测试一、搭建…

【云计算与大数据技术】大数据系统总体架构概述(Hadoop+MapReduce )

一、总体架构设计原则 企业级大数据应用框架需要满足业务的需求,一是要求能够满足基于数据容量大,数据类型多,数据流通快的大数据基本处理需求,能够支持大数据的采集,存储,处理和分析,二是要能…

openGauss数据库的使用

目录前言1. 启动/停止/重启数据库(1)极简版启动/停止/重启命令(2)企业版启动/停止/重启命令2. 登录数据库(1)登录数据库时的基本连接参数(2)登录数据库时的常用连接参数(…

如何使用轻量应用服务器搭建高颜值的YesPlayMusic网易云播放器

本文介绍了如何使用腾讯云的Lighthouse轻量应用服务器来搭建一个高颜值的第三方网易云播放器。 ​ 项目简介 本文使用的是YesPlayMusic项目,这是一款高颜值的第三方网易云播放器,它完全可以作为网易云官方应用的替代品。而且还拥有一些网易云官方应用没…

react-dnd 拖拽能力教程

前言 近几年来,低代码、零代码的热度在国内逐年递增。“复杂度同力一样不会消失,也不会凭空产生,它总是从一个物体转移到另一个物体或一种形式转为另一种形式”。用户在使用低零代码构建应用程序时,这些能力只是被平台研发人员提…

SQL SERVER 2019卸载和安装

卸载过程删除SQL Server2019包括sql server这个数据库和它的管理工具SQLServer Management Studio以及他们的注册表信息和安装的目录,以上,最重要的是一定要有耐心,一步一步慢慢来。 首先打开一定要把SQL的服务都关掉,这个很重要…

压缩包文件如何设置加密、删除加密?

压缩包是将文件压缩成RAR、ZIP格式文件,将文件压缩成压缩包之后,就更方便转发以及保存,而且压缩包文件可以进行加密,这样也能够起到对文件的保护作用,今天和大家分享如何对压缩包进行加密以及如何删除压缩包密码。 压…