SQL更新语句执行

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已经写完了。