mysql的日志模块

一条sql执行的过程:     

连接器-------->分析器------->优化器--------->执行器-------->存储引擎    #如下图

mysql的日志模块

 

 

 不建议使用查询缓存的原因: 如果表有数据更新的话,这张表的缓存都会被清空

 

redo log日志(重做日志):

特性:  innodb的引擎层日志,redo log日志大小时固定的(可通过参数设置),可配置日志个数,可重复写,存储的是脏页,写满后会读入到磁盘(读入的过程称之为刷脏)

一家商店有一个记账板,当赊账顾客多的时候,会临时记录在记账板上,避免频繁去记账本上查找更新对应顾客的信息。等到生意不忙的时候,再将记账板上的信息同步到账本上 。避免高峰期拥堵,提高了工作的效率。

同样,mysql也有这个问题,为了避免更新数据的时候IO成本和查询成本过高,通过WAL技术来避免。WAL技术关键点就是先写日志,后写磁盘,也就是先写记账板,后写账本。

流程:

1.不繁忙情况:  有一条语句需要更新,innodb引擎先记录到redo log中,更新内存,这个时候就算更新完成了。在不繁忙的时候再读入磁盘

2.繁忙情况下:记账板写满,把数据更新到记账本,擦掉记账板。

mysql的日志模块

redo log有个好处,可以再数据库发生异常重启保证之前提交的数据不丢失,这个能力成为crash-safe

 

binlog日志:

特性:server层日志,归档日志,记录数据库执行的查询、DML、DDL语句,记录内容是追加写,可以生成多个文件。

 

mysql的日志模块

上一篇:Spring boot + Mybatis + SQLite 搭建blog API


下一篇:java中XMLGregorianCalendar类型和Date类型之间的相互转换