InnoDB多版本存储引擎简介

SHOW ENGINES
查看所有存储引擎及支持情况

当启动InnoDB的时候,会自动进行兼容性检查

ACID 模型
Atomicity
主要与事务操作相关,autocommit、Commit、rollback
Consistency
用于保护数据的引擎内部处理程序,包括doublewrite buffer、crash recovery
Isolation
主要与事务操作相关,autocommit、isolation level 、locking
Durability
主要涉及mysql 软件与一些特定硬件的配置

InnoDB - 多版本存储引擎
引擎会保存旧版的数据信息(例如更新/删除的行)以支持事务操作的功能特征。
InnoDB内部会自动为每行增加三个字段:
1.DB_TRX_ID 6-byte,唯一标记一个最新执行的事务。
2.DB_ROLL_PTR 7-byte,又称为roll pointer,其指向rollback segment中的 一个undo log record。
3.DB_ROW_ID 6-byte,包含一个在新行被插入之后单调递增的ROW ID。如果Innodb数据表自动的形成了一个聚集索引,那么这个索引中就会包含row id的值。否则,DB_ROW_ID不会出现在任何索引中。

rollback segment 是保存事务操作相关信息的数据结构。
保存在rollbacksegment 中的 undo log 包括insert 和 update两个类型。其中,insert undo log 只用于事务回滚,一旦事务提交就可以被删除。而Update undo log 还可以用于一致性读。
undo log record 的物理空间比与之相对应的insert、update row 所占物理空间要小很多。
在多版本机制下,当你执行一个delete 语句,row并没有立刻从磁盘上被彻底删除。仅仅当被标记为deletion 的undo log 记录被丢弃之后(rollback segment不需要再持有该记录的时候) ,row才真正被删除。
innodb_max_purge_lag?

MVCC (multiversion consurrency control)和Secondary Indexes (二级索引)
每张表只能有一个cluster index (聚簇索引),其他的非聚簇索引都称为二级索引。
cluster index :记录更新时,从隐藏的系统列找到undo log的入口,并从中获取历史版本记录信息。
secondary index(columns 的一个子集):通过cluter index 作为跳板获取undo log 历史信息。

时间: 2024-10-13 20:25:15

InnoDB多版本存储引擎简介的相关文章

第二课——解析mysqldump命令和mysqlbinlog命令+innodb和Myisam存储引擎简介

环境说明 mysql版本:Percona-Server-5.6.30 IP:10.7.15.167 端口:3306 安装目录:/httx/run/mysql 数据目录:/httx/run/mysql/data/ mysqldump的常用参数 mysqldump测试--–研究加–single_transaction参数的区别 开启general_log日志,跟踪mysql操作日志 (general_log日志可以方便跟踪所有mysql上的操作,但是生产环境不建议开启,占用资源.消耗内存) mysq

第 3 章 MySQL 存储引擎简介

3.1MySQL 存储引擎概述 到后来,MySQL 意识到需要更改架构,将前端的业务逻辑和后端数据存储以清晰的层次结构拆分开的同时,对ISAM 做了功能上面的扩展和代码的重构,这就是MyISAM存储引擎的由来. MySQL 的插件式存储引擎主要包括MyISAM,Innodb,NDB Cluster,Maria,Falcon, Memory,Archive,Merge,Federated 等,其中最著名而且使用最为广泛的MyISAM 和Innodb两种存储引擎.MyISAM 是MySQL 最早的I

python开发mysql:mysql安装(windows)&密码找回&存储引擎简介&库表的增删改查

一,mysql安装 1 下载地址 https://dev.mysql.com/downloads/file/?id=471342 2 解压后,将目录C:\mysql-5.7.19-winx64\bin添加到计算机环境变量中 3 4 用CMD命令行执行,mysqld --initialize-insecure 初始化数据库,这样C:\mysql-5.7.19-winx64 5 这个目录下就会产生data的目录,里面包含的就是初始化的东西,配置文件,用户密码信息 6 -insecure 这个参数就是

mysql InnoDB 和 Myisam 存储引擎的区别

1. InnoDB 支持事物,Myisam 不支持事物 2. InnoDB 是行级锁,Myisam 表级锁 3. InnoDB 不支持全文索引,Myisam 支持全文索引,但不支持外键 4. InnoDB 在磁盘上是两个文件,Myisam 是三个文件 5 myISAM管理非事务表.它提供高速存储和检索,以及全文搜索能力.如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择 6InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持.如果应用中需要执行大量的INSER

MySQL MERGE存储引擎 简介

MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询.构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构.每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义. 假设你有几个日志数据表,他们内容分别是这几年来每一年的日志记录项,他们的定义都是下面这样,YY代表年份: [sql]CREATE TABLE log_YY ( dt DATETIME NOT NULL, info VA

innodb和myisam存储引擎插入速度

--innodb和myisam存储引擎插入速度 ------------------------------------2014/05/21 MySQL 5.6 全部默认设置,插入数据9999条,性能一般的虚拟机. mysql> delete from test; Query OK, 10000 rows affected (0.54 sec) mysql> alter table test engine=myisam; Query OK, 0 rows affected (0.15 sec)

mysql 存储引擎简介 --小丑

在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库.而在设计表的时候,我们都会关注一个问题,使用什么存储引擎.等一下,存储引擎?什么是存储引擎? 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能. 例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL

MySQL InnoDB与MyISAM存储引擎差异

前言: 之前简单介绍过 MySQL 常用的存储引擎,今天对两个主流的存储简单分析下差异,书上没有参考的笔试题解答注解: 差异: MyISAM 只支持表锁,不支持事务,表损坏率较高.较老的存储引擎. 它分为2种类型的文件:以 MYD 作为后缀名的数据文件和以 MYI 作为后缀名的索引文件. MyISAM 读写并发不如 InnoDB,适用于INSERT较多的场景,且支持直接复制文件,用以备份数据, 是 MySQL 公司开发的,物理文件主要有数据文件,日志文件和索引文件,并且这三个文件是单独存在. I

为什么用B+树做索引&MySQL存储引擎简介

索引的数据结构 为什么不是二叉树,红黑树什么的呢? 首先,一般来说,索引本身也很大,不可能全部存在内存中,因此索引往往以索引文件的方式存在磁盘上.然后一般一个结点一个磁盘块,也就是读一个结点要进行一次IO操作. 而二叉树啊这些树类的数据结构,查找时间主要和树的高度有关,所以虽然一颗AVL树或者是红黑树在查找上比起顺序遍历的O(N)有了比较大的改善,但B树和B+树因为每个结点存的元素更多,所以查询更快,对磁盘的IO操作也更少. 为什么是B+树而不是B树呢? 1. 单一节点存储更多的元素(这样该节点