简单背景介绍

MySQL

MySQL是现在最流行的关系型数据库(RDB)的选择,为了应用程序提供可靠性数据存储,事务等功能。近些年来也成为了互联网公司的首选。在5.5版本后,默认使用InnoDB存储引擎。

MySQL架构

顶层是接入层,为不同语言实现接入,接入层负责权限校验,线程池管理,线程管理。接下来是MySQL服务层,有SQL解析器,SQL优化器,数据缓冲,缓存。再接下来是存储引擎。最后是系统文件层。

InnoDB与MVCC

MySQL中的InnoDB存储引擎的特性有,默认级别的Repeatable Read,行级锁,实现了MVCC,Consistent nonlocking read(默认读不加锁,一致性非锁定读),Insert Buffer,Adaptive Hash Index,Double Write,Cluster Index。
上面举了这么多例子,说明InnoDB有很多特性,并且很快。
InnoDB中通过Undo Log实现了数据的多版本,而并发控制通过锁来实现。
Undo Log除了实现了MVCC之外,还提供了回滚的功能。

Redo log,Undo log, Bin log

MySQL InnoDB有很多日志,除了错误日志,查询日志还有很多与持久化相关的日志。
bin log:由MySQL服务层产生的日志,通常用于数据恢复,数据库复制。比如常见的master-slave模式,就是通过binlog实现的,另外binlog还能实现mysql复制到其他数据源,比如:ElasticSearch。
redo log:记录了数据在物理层面到修改,MySQL中使用了大量到缓存,当缓存中的数据与磁盘中的数据不一致时,这是内存里的数据称为脏页(dirty page)。为了保证数据的安全性,事务中不断产生redo log,在事务提交的时候会进行一次flush操作,保存到磁盘,redolog是顺序写入,性能远大于随机读写。当MySQL故障恢复时,会加载redo log中的数据,如果redo log中有事务提交,则进行提交修改数据。这样保证了事务的一致性,原子性,持久性。
undo log:除了记录redo log之外,还会记录undo log,undo log记录数据的逆向操作,比如修改删除操作,记录的是数据修改前的值,用于回滚,以及版本回溯。可以根据undo log找到某个特定版本的值,这样就实现了MVCC。
redo log和bin log要具有一致性,为了实现一致性,MySQL采用了二阶段提交。

MVCC实现

undo log分为Insert和Update两种,Delete操作也被看做是一种特殊的Update,在记录上标记被删除。
对于Insert操作,插入时候生成Insert undo log,在事务提交后,即可删除undo log,因为没有其他的事务需要这个undo log。
在进行Update操作的时候,会生成新的undo log,将当前记录中的db_roll_ptr指向新的undo log。
RR级别下事务开始后的第一个snapshot read的时候,会将当前活动的事务id记录下来,记录到read view中。

InnoDB存储引擎MVCC实现原理相关推荐

  1. window.open 实现session隔离_InnoDB存储引擎MVCC实现原理

    简单背景介绍 MySQL MySQL是现在最流行的关系型数据库(RDB)的选择, 创建一个应用时,无论是用户数据还是订单数据,使用关系型数据库存储是最可靠稳定的选择,借助RDB提供的可靠性.事务等功能 ...

  2. 浅析Mysql InnoDB存储引擎事务原理

    浅析Mysql InnoDB存储引擎事务原理 大神:http://blog.csdn.net/tangkund3218/article/details/47904021

  3. MySQL InnoDB 存储引擎原理浅析

    前言 本文主要基于MySQL 5.6以后版本编写,多数知识来着书籍<MySQL技术内幕++InnoDB存储引擎>,本文章仅记录个人认为比较重要的部分,有兴趣的可以花点时间读原书. 一.My ...

  4. Mysql技术内幕——InnoDB存储引擎

    一.mysql体系结构和存储引擎 1.1.数据库和实例的区别 数据库:物理操作系统或其他形式文件类型的集合.在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件. 数据库实例:由数据 ...

  5. 诸葛io的技术架构图_【总结】MySQL技术内幕二:InnoDB存储引擎技术特性

    二.InnoDB存储引擎 InnoDB是事务安全的MySQL存储引擎,通常是OLTP应用中核心表的首选存储引擎.同时,也正是因为InnoDB的存在,才使MySQL数据库变得更有魅力. 从MySQL 5 ...

  6. 不同存储结构的文件磁盘io操作次数_MySQL InnoDB存储引擎

    第1章 MySQL体系结构和存储引擎 1.1数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合.实例:MySQL数据库由后台线程以及一个共享内存区组成.共享内存可以被运行 的后台线程所共享 ...

  7. 谈谈MySQL InnoDB存储引擎事务的ACID特性

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 狼哥一直对数据库Mysql这块没有进行过系统的深入学习,今天看到一篇文章写的还不错,特意分享一下,我不能保证文章中所 ...

  8. 3、InnoDB存储引擎

    一.InnoDB体系架构 InnoDB存储引擎有多个内存块,这些内存块组成了一个大的内存池.后台线程主要负责刷新内存池中的数据.将已修改的数据刷新到磁盘. 1.1 后台线程 InnoDB后台有多个不同 ...

  9. Mysql技术内幕InnoDB存储引擎——InnoDB存储引擎

    特此申明: 前段时间找工作所以看了<Mysql技术内幕InnoDB存储引擎>,整理的时候除了参考网上已有的笔记贴,加上自己整合的,可能和别人有雷同之处.不过无所谓啦,写出来自己看看,需要的 ...

  10. MySQL存储引擎 lnnoDB逻辑架构 innodb存储引擎表空间(ibd文件)详解 回滚日志的物理空间

    文章目录 存储引擎 一 MySQL组织架构 二 查看存储引擎信息 三 修改存储引擎 3.1 配置文件修改存储引擎 3.2 临时修改存储引擎 3.3 建表时修改存储引擎 四 存储引擎实验 五 数据库升级 ...

最新文章

  1. html脚本语言居中,web前端:CSS--几种常用的水平垂直居中对齐方法
  2. OpenCV学习之视频读取与帧的提取、显示及保存
  3. Windows消息机制学习笔记(三)—— 消息的接收与分发
  4. 2018-2019-1 20165330 《信息安全系统设计基础》第二周学习总结
  5. Java 函数式接口以及Lambda举例
  6. HttpHandler浅析
  7. 3-4numpy聚合操作和arg(索引)运算和排序
  8. Linux如何自动获取IP地址
  9. Libbpf-tools: Tracing工具
  10. python后台架构Django教程——admin管理员站点
  11. python写ini文件_Python读写ini文件
  12. JS使用setInterval定时器导致前端页面卡死
  13. NVIDIA显卡驱动的重装
  14. 零基础java学习笔记
  15. Gradle教程--基础篇
  16. 链表?数组?合二为一
  17. 楷书书法规则_楷书的结构法则
  18. 如何断开mongodb数据库连接_如何创建mongodb数据库连接
  19. “人生苦短,我用Python“——身份认证攻击
  20. 提高 Kubernetes 中的 GPU 利用率

热门文章

  1. linux之iconv命令
  2. 【活动】完整的Java学习路径《深入理解Java核心技术》(文末送书)
  3. 遗传算法原理以及matlab代码
  4. 星光商务2008辉煌版 单机版 bt
  5. 【IoT】产品设计:如何写好硬件产品的需求文档?
  6. jdk1.8以上连接Access数据库
  7. 【Linux】系统移植篇一--linux系统移植导学
  8. 全网最全sql入门经典
  9. Windows 关于Robocopy的使用详解
  10. android markdown编辑器,安卓版好用的Markdown编辑器