人大金仓 数据库WAL日志浅析

write ahead log预写日志,简称WAL日志。WAl日志是数据库中的重要组成部分,相当于oracle数据库中的redo log,该日志存储在data目录下的sys_wal目录中。

当数据库发生数据更新时:

a)changing:先将数据的更新写入到wal的buffer中,然后再将数据更新写入data buffer;

b)commit:先将wal的buffer刷到磁盘,然后给客户端返回commit,此时更新的数据本身有可能还在data buffer中;

c)checkpoint:checkpoint进程会将data buffer中的脏页刷到磁盘上。

触发checkpoint的情况有哪些?

a)手动执行CHECKPOINT;

b)执行需要检查点的命令:sys_start_backup、sys_ctl stop | restart 等;

c)达到检查点的配置时间:checkpoint_timeout;

d)max_wal_size已满。

其中第一和第二点与数据库的配置无关,接下里我们主要关注后面两点:

首先,checkpoint_timeout是两个检查点之间的最大间隔时间。默认是5min,如果增加该时间会增加数据库崩溃恢复所需的时间,因为检查点后的所有wal记录,在崩溃恢复的时候需要重新解析做数据回放,检查点越密集,对应需要处理的记录越少,恢复越快(但是频繁的设置检查点会增加数据库的负担,影响数据库性能,需要综合考虑)。可以使用show checkpoint_timeout;这个sql语句来查看设置的检查点时间。

其次,max_wal_size是在最大检查点间隔时间内允许写入的WAL日志上线,如果达到该参数设置的阈值,将自动触发checkpoint操作。但是这是一个软限制,在特殊的情况下有可能会超过设定的阈值(如数据库重度负载的情况下可能不会触发checkpoint)。可以使用show max_wal_size;这个sql语句来查看设置的wal限制阈值。

额外说明:

与max_wal_size类似的还有一个参数min_wal_size,因为WAL是循环顺序写入的,于是会重复使用给定的内存空间,当剩余的空间大小大于min_wal_size的时候,先前写过的日志记录并不会被删除(最新检查点前的一些日志记录),直到小于该参数的设定值时,才会将那些旧的WAL删除,以供后续的WAL日志循环写入。

WAL切换的步骤如下:

单个WAL日志写满的时候(默认16M,编译数据库的时候指定)继续写下一个WAL日志,直到磁盘空间不足min_wal_size的时候才会将旧的WAL文件回收以便循环使用。但是这种模式有一个弊端就是如果checkpoint前产生了大量的WAl日志,就会导致发生checkpoint的时候对数据库性能影响巨大,因此又引入了一个参数checkpoint_completion_target来进行调整。

Checkpoint_completion_target:指定检查点的完成目标,作为检查点之间总时间的一部分。默认设置为0.5。假设checkpoint_timeout的时间设置为30min,而在此期间WAL日志生成了10G,那么设置为0.5就允许在15min内完成checkpoint,调大这个值就可以降低checkpoint对数据库性能的影响,但是当数据库崩溃的时候,恢复的时间将会增加。

总结:

a)大多数的检查点应该是基于时间的,即由checkpoint_timeout来触发;

b)性能与数据库恢复时间之间应该做好抉择;

c)设置checkpoint_timeout后,通过估计WAL的数据量选择max_wal_size参数的值;

d)设置checkpoint_completion_target以便内核将数据刷到磁盘的时间足够(但不是太多)。 更多信息,参见help.kingbase.com.cn/v8/index.ht...

相关推荐
一米阳光86612 小时前
软考(中级)软件设计师核心笔记(3)数据库系统——概念、数据库设计
数据库·笔记·职场发展·软考·软件设计师
奈斯先生Vector2 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
建筑工程企业管理系统4 小时前
erp工程项目管理系统落地价值:实现工程多项目成本精细化核算与管控
大数据·数据库·人工智能
AI大模型-小华4 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
foolishlee5 小时前
Neon wal日志处理流程2
数据库
2601_965798476 小时前
Is Hygia Good for Maid & Janitorial Sites? Technical Audit
服务器·网络·数据库
Cloud云卷云舒6 小时前
海山数据库(HaishanDB)面向工业云场景技术方案
数据库·haishandb·工业云·移动云海山数据库·天工云
逃逸线LOF6 小时前
Spring配置数据源{连接池}(Druid、c3p0)
java·数据库·spring
严同学正在努力9 小时前
从备份到恢复:我用 30 分钟恢复了误删的核心业务表
android·java·数据库·ai
#六脉神剑9 小时前
myBuilder新版本(8月,Office文件预览、Oracle数据库支持)
数据库·oracle·开发平台·数字化工具·mybuilder