预写日志(Write Ahead Log,WAL)是QianBase TP数据库中重要部分,它活跃在QianBase TP数据库各个功能模块,绝大多数数据库行为都会被记录在WAL日志中。当数据库中数据发生变更时,变更后的内容会被写入到wal buffer中,commit发生时,wal buffer中的数据被刷新到磁盘上WAL文件中。QianBase TP数据库中默认WAL文件大小为16M,当数据库中数据不断发生变更时,WAL文件会不断切换生成新文件。针对不断新生成的wal日志,QianBase TP数据库也是不停生成新WAL文件进行存储么?针对该问题,本文将介绍QianBase TP数据库WAL文件管理机制。
QianBase TP数据库中对WAL文件管理有2种机制,第1种是创建新WAL文件机制;第2种是删除与重用WAL文件机制。
创建新WAL文件机制
QianBase TP数据库未到checkpoint时间节点,由于当前数据库中数据发生变更导致需要更多WAL文件存储wal日志,则会在WAL文件总大小小于设置的max_wal_size时创建新文件,其原理如下所示:
当WAL文件WAL_7被填满后,则数据库创建新WAL文件WAL_8来存储数据库中新生成的wal日志。
针对创建新WAL文件机制,举例如下:
数据库中创建表并插入一些数据后,WAL文件个数为6个,如下图:
继续不断运行业务,两个新的WAL文件会被创建,WAL文件增加到8个,如下图所示:
删除与重用WAL文件机制
QianBase TP数据库执行checkpoint操作时,数据库会根据前一个checkpoint操作时消耗WAL文件数量估计并准备下一个checkpoint操作时所需的WAL Segment文件数量,checkpoint操作启动时,在保证总WAL文件大小小于设定的max_wal_size情况下,数据库会删除与重用WAL文件。其原理如下图所示:
由上图可知数据库执行checkpoint操作时,数据库对WAL文件管理有以下几步:
1)数据库执行checkpoint时,根据上一次checkpoint操作估计还需要一个WAL文件来存储wal日志
2)数据库执行checkpoint后,redo point恢复点位置在WAL_3文件,说明WAL_3之前的WAL_1和WAL_2两个WAL文件可以被删除或者重用
3)数据库删除WAL_2文件,将WAL_1文件改名为WAL_7继续用于存储新的wal日志
针对删除与重用WAL文件机制,举例如下:
当前数据库中编号最小的WAL文件如下图所示:
当前数据库正在写入的WAL文件如下图所示:
不断在数据库上执行业务,使得WAL文件个数不断增长,并在数据库中手动执行checkpoint操作。
执行完checkpoint操作后,数据库中当前最新WAL文件为00000001000000010000008C
但是检查数据库中WAL文件名称,发现WAL文件目录中已经存在编号大于00000001000000010000008C的WAL文件,并且这些WAL文件的创建时间小于系统当前时间,例如:
00000001000000020000000D 、000000010000000200000001、00000001000000020000000C
这是因为在数据库中执行checkpoint操作时,数据库会估计并准备下一个checkpoint操作所需WAL文件数量,数据库会删除与重用WAL文件,重用的文件会被改名然后等待使用。
综上可知,在QianBase TP数据库中,WAL文件数量会根据数据库的活动自适应变化,随着wal日志不断写入,WAL文件的估计数量和总大小会不断增加。如果WAL文件总大小超过设置的max_wal_size大小,则数据库会启动一个checkpoint操作,创建新的重做点redo point,将WAL文件删除与重用,始终仅保留数据库恢复所需的WAL文件而不会无限增长。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!