返回顶部
首页 > 资讯 > 数据库 >MySQL的并发控制MVCC知识点有哪些
  • 255
分享到

MySQL的并发控制MVCC知识点有哪些

2023-06-21 21:06:58 255人浏览 独家记忆
摘要

本篇内容介绍了“MySQL的并发控制mvcC知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MVCCMVCC(Multi-Vers

本篇内容介绍了“MySQL并发控制mvcC知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

MVCC

MVCC(Multi-Version Concurrency Control),即多版本并发控制。是 innodb 实现事务并发与回滚的重要功能。机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销.

具体实现是在数据库的每一行中,额外添加三个字段:

  1. DB_TRX_ID  : 记录插入或更新该行的最后一个事务的事务ID

  2. DB_ROLL_PTR : 指向改行对应undolog 的指针

  3. DB_ROW_ID :  单调递增的ID,他就是AUTO_INCREMENT的主键ID

MySQL的并发控制MVCC知识点有哪些

快照读

像不加锁的select操作就是快照读,快照读的出现是基于提高并发性能的考虑,快照读的实现是基于多版本并发控制,即MVCC。可以认为 MVCC 是行锁的一个变种,在很多情况下,避免了加锁操作,降低了开销;既然是基于多版本,即快照读可能读到的并不一定是数据的最新版本,而有可能是之前的历史版本

当前读

读取的是当前的数据,不需要通过undo log回溯到事务开启前的状态。读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。

数据库并发场景有三种,分别为:

  • 读-读:不存在任何问题,也不需要并发控制

  • 读-写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读

  • 写-写:有线程安全问题,可能会存在更新丢失问题,比如第一类更新丢失,第二类更新丢失

说白了 MVCC 就是为了实现读-写冲突不加锁,而这个读指的就是快照读, 而非当前读,当前读实际上是一种加锁的操作,是悲观锁的实现

MVCC的出现就是大佬们不满意用悲观锁去解决读-写冲突问题,所以有两个方案:

  • MVCC + 悲观锁
    MVCC解决读写冲突,悲观锁解决写写冲突

  • MVCC + 乐观锁
    MVCC 解决读写冲突,乐观锁解决写写冲突

MVCC实现原理

三个隐藏字段

  • DB_TRX_ID
    6 字节,最近修改(修改/插入)事务 ID:记录创建这条记录/最后一次修改该记录的事务 ID

  • DB_ROLL_PTR
    7 字节,回滚指针,指向这条记录的上一个版本(存储于 rollback segment 里)

  • DB_ROW_ID
    6 字节,隐含的自增 ID(隐藏主键),如果数据表没有主键,InnoDB 会自动以DB_ROW_ID产生一个聚簇索引

版本链 / undo log

因为undo log会记录事务前老版本数据,然后行记录中回滚指针会指向老版本位置,如此形成一条版本链。Read View 会一直遍历链表的DB_TRX_ID,直到找到满足特定条件的 DB_TRX_ID。那么这个DB_TRX_ID所在的旧记录就是当前事务能看见的最新”老版本“

Read View

是事务开启时,当前所有活跃事务(还未提交的事务)的一个集合。或者说Read View 就是事务进行快照读操作的时候生产的读视图 (Read View),在该事务执行的快照读的那一刻,会生成数据库系统当前的一个快照,记录并维护系统当前活跃事务的 ID

三个Read View重要结构:

  • trx_list(名称我随意取的)
    一个数值列表
    用于维护 Read View 生成时刻系统 正活跃的事务 ID 列表

  • up_limit_id
    是 trx_list 列表中事务 ID 最小的 ID

  • low_limit_id

ReadView 生成时刻系统尚未分配的下一个事务 ID ,也就是 目前已出现过的事务 ID 的最大值 + 1

为什么是 low_limit ? 因为它也是系统此刻可分配的事务 ID 的最小值

MVCC实现的整体流程:

MySQL的并发控制MVCC知识点有哪些

Mysql的并发控制MVCC知识点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL的并发控制MVCC知识点有哪些

本文链接: https://lsjlt.com/news/300750.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL的并发控制MVCC知识点有哪些
    本篇内容介绍了“MySQL的并发控制MVCC知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MVCCMVCC(Multi-Vers...
    99+
    2023-06-21
  • Mysql MVCC多版本并发控制的知识点有哪些
    这篇文章主要介绍了Mysql MVCC多版本并发控制的知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Mysql MVCC多版本并发控制的知识点有哪些文章都会有所收获,下面我们一起...
    99+
    2023-06-30
  • MySQL事务与并发控制的知识点有哪些
    这篇文章主要介绍了MySQL事务与并发控制的知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL事务与并发控制的知识点有哪些文章都会有所收获,下面我们一起来看看吧。事务概念一个事务可以理解为一组...
    99+
    2023-07-05
  • Java并发知识点有哪些
    本篇内容主要讲解“Java并发知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java并发知识点有哪些”吧!1.并行跟并发有什么区别?从操作系统的角度来看,线程是CPU分配的最小单位。...
    99+
    2023-06-29
  • python控制流有哪些知识点
    这篇文章主要介绍“python控制流有哪些知识点”,在日常操作中,相信很多人在python控制流有哪些知识点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python控制流有哪些知识点”的疑惑有所帮助!接下来...
    99+
    2023-06-02
  • Git版本控制的知识点有哪些
    这篇“Git版本控制的知识点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Git版本控制的知识点有哪些”文章吧。版本控...
    99+
    2023-06-29
  • MySQL MVCC的知识点总结
    本篇内容介绍了“MySQL MVCC的知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1).Mul...
    99+
    2024-04-02
  • MySQL的知识点有哪些
    本篇内容主要讲解“MySQL的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL的知识点有哪些”吧! 1.在Ce...
    99+
    2024-04-02
  • Java高并发的相关知识点有哪些
    本文小编为大家详细介绍“Java高并发的相关知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java高并发的相关知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。读到这里,这篇“Java高并发...
    99+
    2023-06-17
  • mysql知识点有哪些
    本篇内容主要讲解“mysql知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql知识点有哪些”吧! 1、同步方式 binlog和pos同步、...
    99+
    2024-04-02
  • ASP.NET控件开发基础知识点有哪些
    这篇文章主要介绍ASP.NET控件开发基础知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!ASP.NET控件开发基础的总结1.1何处继承自定义控件一般从以下几个基类(此处不包含数据控件)一.Control类...
    99+
    2023-06-18
  • MySQL锁的知识点有哪些
    小编给大家分享一下MySQL锁的知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!锁的概念①、锁,在现实生活中是为我们想...
    99+
    2024-04-02
  • mysql多版本并发控制MVCC的实现
    事务隔离级别设置 set global transaction isolation level read committed; //全局的 set session transaction isolat...
    99+
    2024-04-02
  • MySQL多版本并发控制MVCC详解
    目录1.什么是MVCC2快照读与当前读2.1 快照读2.2当前读3.复习3.1 再谈隔离级别3.2 隐藏字段、Undo Log版本链4、MVCC实现原理之ReadView4.1什么是ReadView4.2 设计思路4.3...
    99+
    2022-07-25
    MySQL多版本并发控制MVCC MySQL MVCC
  • Node.js开发的知识点有哪些
    这篇文章主要介绍“Node.js开发的知识点有哪些”,在日常操作中,相信很多人在Node.js开发的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node.js开发的知识点有哪些”的疑惑有所帮助!...
    99+
    2023-06-17
  • mysql的MVCC多版本并发控制的实现
    1 什么是MVCC MVCC全称是: Multiversion concurrency control,多版本并发控制,提供并发访问数据库时,对事务内读取的到的内存做处理,用来避免写操作堵塞读操作的并发问题。 举个...
    99+
    2022-05-31
    mysql MVCC多版本并发控制 mysql 多版本并发控制
  • MySQL的多版本并发控制MVCC的实现
    目录什么是MVCC MVCC的实现 MVCC 有没有解决幻读? 什么是MVCC MVCC就是多版本并发控制。 MySQL的事务型存储引擎通过多版本并发控制(MVCC)来提升并发性...
    99+
    2024-04-02
  • MySQL多版本并发控制——MVCC机制分析
    原文:https://www.cnblogs.com/buptleida/p/14283943.html...
    99+
    2019-04-27
    MySQL多版本并发控制——MVCC机制分析 数据库入门 数据库基础教程
  • Java并发和线程安全的知识点有哪些
    这篇“Java并发和线程安全的知识点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java并发和线程安全的知识点有哪些...
    99+
    2023-06-02
  • MySQL日志的知识点有哪些
    本篇内容主要讲解“MySQL日志的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL日志的知识点有哪些”吧!Mysql的日志系统是Mysql保...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作