问题1:请问wal什么情况下会降低性能,查了资料都是wal可以提升性能但没有说场景,有同学知道吗?

回答:

wal提升性能是 和 直接写入文件相比的。

wal格式简单,且以顺序写的方式将数据快速持久化。

通常的文件存在随机读写、文件内部的结构的维护处理,所以在写入文件时需要很多额外的操作。

因此wal对写入请求的处理是有性能提升的。

但是wal的文件难以支持查询,只能用作快速持久化与重启恢复(起到redo的作用)。内存中的数据仍需写入具体文件,但是当数据写入wal时,已经可以认为数据已经被持久化存储不会丢失了,所以该次写入已经完成。


问题2:这里有个疑问,wal文件的内容最终也要写到数据库文件里面的,那与直接写文件比起来的优势在哪呢?直观上来说还写了wal文件和数据文件对磁盘的压力应该更大一些

回答:

wal可以和内存协作,先将数据刷到wal里,并在内存中缓存,缓存达到一定数量后再经过处理写文件。
这样做是有利于维护良好的文件结构,使得文件更有利于查询(例如memtable将一条序列的一部分数据聚集到一起刷入tsfile,查询时减少seek和跳转),减轻文件内部结构维护的压力(例如B树的旋转)。

  • No labels