# Mysql学习记录 - 提交流程

Jason
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提交

My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts