SQL更新语句执行
分析器:解析知道这是一条更新语句
优化器:决定使用ID索引
执行器:具体执行(包括运行+1之类的)
redolog:crash-safe能力,write pos和checkpoint的概念。 引擎层innodb,在数据库读取的时候不会用redolog合并,会用change buffer中的数据
binlog:为什么只能用于归档?没有提交状态?
redolog | 记录在某个数据页上做了什么修改(具体怎么做的) | ||
binlog | 给ID=2这一行的C字段+1 (做了什么做一个解释) |
redolog当作事务的标识 binlog标识数据操作
WAL:先写日志,再写磁盘
脏页:内存数据页和磁盘数据页内容不一致
干净页:内存和磁盘上的数据页内容一致
mysql抖一下 1、刷脏页 2、淘汰脏页
写入磁盘的几种情况
1、redo log满了 checkpoint会往前推进,所有脏页flush到磁盘
2、内存满了 淘汰数据页,如果是脏页,先写到磁盘。(如何判断是脏页?),淘汰脏页的时候,redolog会删吗
3、不忙的时候
4、mysql关闭的时候
刷脏页的策略:设置innodb_io_capacity(我的磁盘能力),IOPS(通过fio工具测试)
Mysql写入速度慢,TPS低,IO压力不大,可能就是innodb_io_capacity设置问题(innodb系统认为系统的能力差,刷脏页慢)
1、脏页比例 2、redo log写磁盘速度
脏页比例算法
Innodb_buffer_pool_pages_dirt/Innodb_buffer_pool_pages_total
脏页连坐刷 innodb_flush_neighbors
binglog会有一个标识表示binlog已经写完了。