InnoDB学习(一)之BufferPool】的更多相关文章

我们知道InnoDB数据库的数据是持久化在磁盘上的,而磁盘的IO速度很慢,如果每次数据库访问都直接访问磁盘,显然严重影响数据库的性能.为了提升数据库的访问性能,InnoDB为数据库的数据增加了内存缓存区(BufferPool),避免每次访问数据库都进行磁盘IO. 缓存区BufferPool 缓存区并不是Innodb中特有的概念,操作系统中也有缓存区的概念,当用户第一次从磁盘读取文件时,会把文件缓存到内存中,后续再对这个文件进行读操作就可以直接从内存中读,从而减少磁盘IO次数.缓存只是内存中的一块…
BinLog是MySQL Server层的日志,所有的MySQL存储引擎都支持BinLog.BinLog可以支持主从复制和数据恢复,但是对事务的ACID特性支持比较差.InnoDB存储引擎引入RedoLog和UndoLog事务日志,用于提升事务场景下的数据库性能.本文会对RedoLog和UndoLog进行介绍. RedoLog和UndoLog ChangeBuffer和WAL 我们以一条SQL更新语句来介绍RedoLog的作用,首先在数据库中创建user_info表,该表包含主键列id和姓名列,…
ChangeBuffer是InnoDB缓存区的一种特殊的数据结构,当用户执行SQL对非唯一索引进行更改时,如果索引对应的数据页不在缓存中时,InnoDB不会直接加载磁盘数据到缓存数据页中,而是缓存对这些更改操作.这些更改操作可能由插入.更新或删除操作(DML)触发.缓存区的更改操作会在磁盘数据被其它读操作加载到缓存中时合并到对应的缓存数据页中. ChangeBuffer InnoDB ChangeBuffer的官方示意图如下所示,从图中可以看出以下信息: ChangeBuffer用于存储SQL变…
innodb引擎特点1.支持事务:支持4个事务隔离级别,支持多版本读. 2.行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙 锁的影响 3.读写阻塞与事务隔离级别有关 4.具有非常高效的缓存特性,能缓存索引,也能缓存数据 5.整个表和主键以cluster方式存储,组成一颗平衡树 6.所有secondary index都会保存 主键信息 7.只是分区,表空间,类似oracle数据库 8.支持外键约束,5.5以前不支持全文索引,以后支持了 总结最大的特点:支持事务.支…
MVCC多版本并发控制,是一种数据库管理系统并发控制的方法.MVCC多版本并发控制下,数据库中的数据会有多个版本,分别对应不同的事务,从而达到事务之间并发数据的隔离.MVCC最大的优势是读不加锁,读写不冲突,在读多写少场景中,读写不冲突可以大幅提升数据库的并发性能. MVCC多版本并发控制 在MYSQL中,MyISAM存储引擎使用的是表锁,InnoDB存储引擎使用的是行锁.而InnoDB的事务分为四个隔离级别,其中默认的隔离级别是可重复读,可重复读要求两个并行的事务之间数据的修改互不影响,通过添…
InnoDB存储引擎的默认隔离级别事可重复读,MVCC多版本并发控制仅仅解决了快照读情况下的数据隔离,而对于当前读,InnoDB通过锁来进行并发控制. InnoDB锁 本文主要参考了MySQL官方文档,并在上面添加了一些自己的理解,有兴趣看英文的也可以看MySQL官方文档.本文分为以下章节: 共享锁和独占锁: 意向锁: 行锁: 间隙锁: Next-Key锁 插入意向锁: 自增锁: 共享锁和排他锁 InnoDB锁的最小粒度是行锁,行锁可以分为两大类:共享锁(S)和独占锁(X). 共享锁:持有某行数…
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.可以将数据库索引和书的目录进行类比,通过书的目录我们可以快速查找到章节位置,如果没有目录就只能一页页翻书查找了. 索引数据结构 可以用于提升查询效率的索引结构很多,常见的有B树索引.哈希索引和B+树索引.接下来我们会对这些索引一一进行介绍,并说明InnoDB为什么采用B+树作为索引. 磁盘IO 文件是存储在硬盘上面的.当下硬盘的读取速度十分有限,所以在进行查询定位某个数据的时候,应该尽可能地减少磁盘I/O…
InnoDB中,表数据文件本身就是以主键为索引的B+树,树的叶子节点存放一条条表数据,此索引树被称为表的聚簇索引.聚簇索引也称为聚集索引,聚类索引,簇集索引,聚簇索引确定表中数据的物理顺序. InnoDB聚簇索引 InnoDB表主键 InnoDB中每张表都会有一个主键,表中的每一行数据都是按照主键的顺序在聚簇索引中存储的,InnoDB中有两种方式确定一行数据的主键: 显式声明:用户可以在建表的时候通过primary key关键字来声明主键列: 唯一索引:如果用户没有声明主键列,那么InnoDB会…
一.并发控制 为什么要进行并发控制? 因为并发的任务会对同一个临界资源进行操作,如果不进行并发控制,可能导致不一致,故必须进行并发控制. 如何进行并发控制? 1.锁. 2.数据多版本. 施工ing...…
BinLog又称为二进制日志,是MySQL服务层的数据日志,MySQL所有的存储引擎都支持BinLog.BinLog记录了MySQL中的数据更新和可能导致数据更新的事件,可以用于主从复制或数据恢复.本文会对BinLog的原理进行详细介绍. BinLog MySQL的BinLog用于记录MySQL的所有数据变更和可能造成数据变更的事件,这些BinLog以二进制日志的形式顺序存储在磁盘中.用户不能直接通过文本编辑器查看BinLog的内容,需要借助MySQL提供的mysqlbinlog工具才能查看文件…