内容摘取自<MySQL技术内幕 InnoDB存储引擎>by姜承尧,作者目前为腾讯T4的数据库总监,本文为书本内容的子集。
内容列表:
- InnoDB存储引擎
- 索引(index)
- 锁(lock)
- 事务(transaction)
- 复制(replication)
- RAID
名词解释:
- 数据库:文件的集合,frm,ibd等;
- 数据库实例:程序,位于用户与OS之间的一层数据管理软件
- OLTP:在线事务处理 OnLine Transaction Processing
- OLAP:在线分析处理 OnLine Analytical Processing
- Dirty Page:脏页,内存页和磁盘页数据不一致
- Redo Log:重做日志
- LSN:序列号,Log Sequence Number
- FRM:FoRMat,InnoDB表定义文件
- IBD:InnoBase Data,InnoDB数据文件
事务提交流程:Write Ahead Log策略:当事务提交时,先写Redo Log,再修改页。
- 先记录 undo/redo log,确保日志刷到磁盘上持久存储。(确保2/3宕机不丢数据/主从一致)
- 更新数据记录,缓存操作并异步刷盘。
- 将事务日志持久化到 binlog。
- 提交事务,在 redo log 中写入commit记录。
InnoDB存储引擎
- 存储引擎
- 存储引擎是基于表的,而不是数据库。数据库还包括连接池 / Parser / Optimizer / File System等。
- MySQL数据库重要特点之一就是其插件式的表存储引擎。
- InnoDB存储引擎支持事务,行粒度锁,外键;聚集索引;支持mvcc;主要处理OLTP。
- MyISAM存储引擎不支持事务,表粒度锁,支持空间数据;无崩溃恢复;查询效率更高(唯一优势,且不明显);主要处理OLAP。
2.InnoDB存储引擎
- Redo Log先放到Redo Log Buffer,然后按一定策略到文件系统的Redo Log文件或磁盘innodb_flush_log_at_trx_commit。
- 分区partition:不同子分区生成不同的idb文件,如t#P#p0.ibd, t#P#p1.ibd;分区类型包括Range(值范围),List(指定值),Hash(用户表达式),Key(数据库提供的哈希函数)。
- 缓冲池(innodb_buffer_pool)
- 不包含重做日志Redo Log
- 页的修改操作,首先修改缓冲池中的页,再以一定机制/频率刷回磁盘。<