# Mysql学习记录 - 提交流程
Table of Contents
内存和磁盘
认识Mysql,弄清楚内存和磁盘的存储结果是关键。因为索引的存储结构和Mysql缓存都与磁盘的存储结构有关。
磁盘的结构
https://www.jianshu.com/p/ffc2056766b6
磁头(head)、盘面(platter)、磁道(track)、扇区(sector)、柱面(cylinder)
柱面:相同编号的track组成的圆柱
Mysql的结构
Mysql名词解释
WAL:全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘,也就是先写粉板,等不忙的时候再写账本。
- Checkpoint
- Write pos

- Redo log:存在于内存中
- Undo log:主要用于MVCC,控制各版本的差异
- Flush:从内存中将缓存写入磁盘的操作
- 脏页:当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。
- 干净页:内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。
DML(Data Manipulation Language)数据操纵语言
DDL不需要commit.
CREATE
ALTER
DROP
TRUNCATE
COMMENT
RENAME
DDL(Data Definition Language)数据库定义语言
需要commit.
SELECT
INSERT
UPDATE
DELETE
MERGE
CALL
EXPLAIN PLAN
LOCK TABLE
- DCL(Data Control Language)数据库控制语言 授权,角色控制等
- TCL(Transaction Control Language)事务控制语言
- Online DDL:DDL不加写锁,开一张临时表
- Inplace:整个 DDL 过程都在 InnoDB 内部完成。对于 server 层来说,没有把数据挪动到临时表,是一个“原地”操作,这就是“inplace”名称的来源。
Mysql的日志类型:错误日志、查询日志、慢查询日志、事务日志(redo log、undo log)和binlog
- binlog:主要存放在Server层
- 逻辑日志:可以简单的理解为sql语句
- 物理日志:mysql数据最终是保存在数据页中,物理日志记录的就是数据页的变更
Mysql常见配置
- innodb_io_capacity:设置innodb IO速率,一般设置为磁盘的IOPS大小
- innodb_max_dirty_pages_pct:脏页比例上限,默认值是 75%
- LSN:日志的逻辑序列号(log sequence number)
Mysql经验总结
刷盘速度:InnoDB 的刷盘速度就是要参考这两个因素:一个是脏页比例,一个是 redo log 写盘速度。
Mysql的内存结构
Mysql的2PC提交
