【MySQL(一)】WAL 机制

WAL全称是write ahead log,也就是更新数据之前先更新日志。之前不太明白为什么要用这个,也查了很多博客,发现很多都没说到根本原因上。基本的解释都是什么使用redo log恢复数据之类的。

其实Mysql使用WAL的原因根本就不是这些,这些说成是结果更合理。

真正使用WAL的原因是:磁盘的写操作是随机io,比较耗性能,所以如果把每一次的更新操作都先写入log中,那么就成了顺序写操作,实际更新操作由后台线程再根据log异步写入。这样对于client端,延迟就降低了。并且,由于顺序写入大概率是在一个磁盘块内,这样产生的io次数也大大降低。所以WAL的核心在于将随机写转变为了顺序写,降低了客户端的延迟,提升了吞吐量。

至于说redo log可以恢复数据,这不是原因,而是结果。如果不用WAL,就直接每一次都裸写磁盘,那根本不会有什么数据恢复的问题,什么时候宕机,那个时候之前的数据就是写入成功的。换句话说,正是因为用了WAL,才需要考虑宕机数据恢复的问题,因为有些数据还没刷到磁盘上啊。


版权声明:本文为u010900754原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。