202109-16 详解MySQL多版本并发控制机制(MVCC)源码 目录一、前言二、MVCC(多版本并发控制机制)2.1、RepeatableRead2.2、ReadCommit2.3、MVCC的优势三、MVCC(实现机制)3.1、select运行栈3.2、read_view的创建过程3.3、行版本可见性3.4、undolog搜索可见版本的过程3.5、read_view创建时机再讨论四、MVCC和锁的同时作用导致的一些现象五、总结一、前言作为一个数据库爱好者,自己动手写过简单的SQL解析器以及存储引擎,但感觉还是不够过瘾。<<事务处理-概念与技术>>诚然讲的非常透彻... 继续阅读 >
202105-20 详解MySQL事务的隔离级别与MVCC 事务隔离级别事务并发执行遇到的问题脏写如果一个事务修改了另一个未提交事务修改过的数据,那就意味着发生了脏写脏读如果一个事务读到了另一个未提交事务修改过的数据,那就意味着发生了脏读不可重复读如果一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询到最新值,那就意味着... 继续阅读 >
202105-15 Mysql MVCC机制原理详解 什么是MVCCMVCC,全称Multi-VersionConcurrencyControl,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。我们知道,一般情况下我们使用mysql数据库的时候使用的是Innodb存储引擎,Innodb存储引擎是支持事务的,那么当多线程同时执行事务的时候,可能会出现并发问题。这个时候需要一个能够控制并发的方法,MVCC就起到了这个作用。Mysql的锁和事务隔离... 继续阅读 >
202103-24 详解MySQL 数据库隔离级别与MVCC Mysql是我们日常生产与学习中最常接触到的数据库之一,今天讲一讲在Mysql(或者说其他类似的数据库)中存在的隔离级别以及用来提高效率的多版本并发控制(MVCC)。一、隔离级别首先我们需要提到一个概念:事务。什么是事务?事务就是完成一个基础操作的一系列操作语句的一个集合。例如我要将200元从账户A转移到账户B,那么我可能会进行一下的操作:a.验证账户A中的余额是否大于200元。b.将账户A中的余额减200元。c.将账户B中的余额... 继续阅读 >
202101-29 MySQL中的乐观锁,悲观锁和MVCC全面解析 前言在数据库的实际使用过程中,我们常常会遇到不希望数据被同时写或者读的情景,例如秒杀场景下,两个请求同时读到系统还有库存1个,然后又先后把库存更新为0,这时候就会出现超卖的情况,这时候货物的实际库存和我们的记录就会对应不上了。为了解决这种资源竞争导致的数据不一致等问题,我们需要有一种机制来进行保证数据的正确访问和修改,而在数据库中,这种机制就是数据库的并发控制。其中乐观并发控制,悲观并发控制和多版本... 继续阅读 >
202012-02 浅析MySQL - MVCC 版本链在InnoDB引擎表中,他们的聚簇索引记录中有两个隐藏列:trx_id:用来存储对数据进行修改时的事务idroll_pointer:每次对哪条聚簇索引记录有修改的时候,就会把老版本写入undo日志中。这个roll_pointer就是存了一个指针,它指向这条聚簇索引记录的上一个版本的位置,通过它来获得上一个版本的记录信息。idnametrx_idroll_pointer1小明500x00af... 继续阅读 >