WAL是Write Ahead Log的简写,和Oracle的redo日志类似,在R3版本存放在data/sys_log中,R6版本以后在data/sys_wal目录,在数据库访问过程中,任何对数据块的修改都会记录到wal日志,并写入到wal文件保存到磁盘,wal日志可用于数据库的实例恢复和数据恢复。

如果开启了归档,在目录archive_status下会有一些文件,以ready结尾的,表示可以归档但还没有归档,done结尾的表示已经归档。开启了归档后,只有归档成功的sys_wal文件才会被清除。在每次归档命令被执行后,会触发清除标签的动作,在执行检查点时,也会触发清除归档标签文件的动作。

首先明确如下几个相关参数的含义:

  • wal_segment_size:单个 WAL 文件的大小,默认为16MB,一般可不做更改。
  • wal_keep_segments:指定在后备服务器需要为流复制获取日志段文件的情况下,sys_wal目录下所能保留的日志文件段的最小数目。每个段通常是 16 兆字节。如果一个连接到发送服务器的后备服务器落后了超过wal_keep_segments个段,发送服务器可以移除一个后备机仍然需要的 WAL 段,在这种情况下复制连接将被中断。最终结果是下行连接也将最终失败(不过,如果在使用 WAL 归档,后备服务器可以通过从归档获取段来恢复)。
  • min_wal_size:只要 WAL 磁盘用量保持在这个设置之下,在检查点时旧的 WAL 文件总是 被回收以便未来使用,而不是直接被删除。这可以被用来确保有足够的 WAL 空间被保留来应付 WAL 使用的高峰,例如运行大型的批处理任务。 默认是 80 MB。这个参数只能在kingbase.conf 或者服务器命令行中设置。
  • max_wal_size:在自动 WAL 检查点之间允许 WAL 增长到的最大尺寸。这是一个软限制, 在特殊的情况下 WAL 尺寸可能会超过max_wal_size, 例如在重度负荷下,archive_command失败或者高的 wal_keep_segments设置。默认为 1 GB。增加这个参数 可能导致崩溃恢复所需的时间。这个参数只能在kingbase.conf 或者服务器命令行中设置。
  • archive_timeout:如果 DB 实例写入量很少,到达 archive_timeout 会触发 WAL 文件的强制切换。因此如果 archive_timeout 如果太短就会产生很多新的 WAL,从而产生大量归档。

WAL空间使用情况如下:

  1. 如果日志量大于max_wal_size,则WAL日志空间尽量保持在max_wal_size。因为会触发检查点,不需要的段文件将被移除直到系统回到这个限制以下。
  2. 如果日志量小于max_wal_size,则WAL日志空间至少保持min_wal_size。
  3. 通常情况下,WAL日志空间大小在min_wal_size和max_wal_size之间动态评估。该估计基于在以前的检查点周期中使用的WAL文件数的动态平均值。如果实际使用量超过估计值,动态平均数会立即增加。

一、WAL日志膨胀无法清理案例

通常情况下wal日志可以数据库自动清理,如果配置了archive_mode=on,但是没有配置archive_command,那么wal文件会一直堆积(wal写完后,会写.ready,但是由于没有配置archive_command,也就是说不会触发归档命令,所以一直都不会写.done),所以wal会一直不清理。如果你开启了归档,但是归档命令是失效的,那么wal目录会一直增长,不会自动删除WAL,会使得此目录被撑爆。

如下案例归档失败,导致wal日志不断增长的案例:

1)查看sys_log日志,发现归档失败:

2)查看数据库后台进程(archiver归档失败)

3)查看wal日志信息

4)手工执行归档命令(执行失败)

5)查看归档配置及日志目录信息

=如下所示,归档日志目录名(archiv)和配置文件中指定的目录名(archive)不匹配=

6)查看归档信息

二、手工清理wal日志

1、WAL日志保留

对于wal日志可以通过操作系统rm命令直接删除,也可以使用数据库系统命令 sys_archivecleanup,建议使用 sys_archivecleanup命令。

在清除wal日志或归档日志前,首先需要判断需要保留的wal日志,如果误删除了系统正在访问的wal日志,将导致数据库系统运行故障或数据丢失。

WAL日志保留原则:

1)按照业务应用对基于时间点恢复(PITR)的要求,保留wal日志或归档日志。

2)查看控制文件中"Latest checkpoint's REDO WAL file",记录检查点的wal日志文件,在此之前wal日志文件可以清理。

3)对于业务应用有要求保留的按照第一条原则,如果应用没有要求,按照第二条原则。

2、清理wal日志

1)查看当前control文件信息

2)查看wal日志信息并清理

#清理前:
[kingbase@node1 sys_wal]$ ls -lh
total 80M
-rw------- 1 kingbase kingbase 16M May 11 13:26 000000010000000000000006
-rw------- 1 kingbase kingbase 16M May 11 13:26 000000010000000000000007
-rw------- 1 kingbase kingbase 16M May 11 13:26 000000010000000000000008
-rw------- 1 kingbase kingbase 16M May 11 13:00 000000010000000000000009
-rw------- 1 kingbase kingbase 16M May 11 13:02 00000001000000000000000A
drwx------ 2 kingbase kingbase 78 May 11 13:49 archive_status

日志清理:

=如下所示,在“000000010000000000000008”之前的日志均可清理。=

清理后:
[kingbase@node1 sys_wal]$ ls -lh
total 32M
-rw------- 1 kingbase kingbase 16M May 11 13:00 000000010000000000000008
-rw------- 1 kingbase kingbase 16M May 11 13:00 000000010000000000000009
-rw------- 1 kingbase kingbase 16M May 11 13:02 00000001000000000000000A
drwx------ 2 kingbase kingbase 78 May 11 13:49 archive_status

三、总结

本文是针对于单实例环境的wal日志的清理,对于单实例环境,在执行手工清理时所要考虑的因素比较简单。但对于流复制集群环境,在执行手工的日志清理时,需要考虑的因素比较多,这个在另外的文档中再介绍。

KingbaseES 归档日志清理的更多相关文章

  1. oracle启用归档日志

    一.开启归档 1.查看归档信息 SQL> archive log list Database log mode No Archive Mode Automatic archival Disabl ...

  2. KingbaseES V8R6 集群环境wal日志清理

    案例说明: 1.对于集群中的wal日志,除了需要在备库执行recovery外,在集群主备切换(switchover或failover)时,sys_rewind都要读取wal日志,将数据库恢复到一致性状 ...

  3. oracle日志归档空间清理

    进入机器,设置环境变量,如: export ORACLE_HOME=/main/app/oracle/product//db_1 export ORACLE_SID=devdb 然后切换oracle用 ...

  4. oracle设置自动清理归档日志脚本

    设置定时自动清理归档日志脚本 root用户下 [root@localhost ~]# mkdir /nstg [root@localhost ~]# cd /nstg/ [root@localhost ...

  5. oracle清理归档日志(缓存)

    1.用RMAN连接目标DB: rman target / RMAN target sys/*****@orcl 2.在RMAN命令窗口中,输入如下命令(清理所有的归档日志): crosscheck a ...

  6. 【ogg三】日常运维篇:清理归档日志,ogg进程注册服务,定期备份数据库

    清理归档日志 ogg使用需要开启归档日志,归档日志会随着时间的推移逐渐增多,占满空间,导致应用无法正常运行. 如果归档日志满了会报错 ORA-00257:archiver error解决办法 检查fl ...

  7. KingbaseES wal(xlog) 日志清理故障恢复案例

    案例说明: 在通过sys_archivecleanup工具手工清理wal日志时,在control文件中查询的检查点对应的wal日志是"000000010000000000000008&quo ...

  8. Oracle 日志归档 自动清理

    exp emis/emis@orcl file=d:\backup\oracle\oracle%date:~0,10%.dmp owner=emis log=d:\backup\oracle\orac ...

  9. 跨平台日志清理工具 Log-Cutter v2.0.1 正式发布

    Log-Cutter 是JessMA开源组织开发的一个简单实用的日志切割清理工具.对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能.如果用手工方 ...

随机推荐

  1. javascript写淡入淡出效果的轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程

    上文,我们看了IOC设计要点和设计结构:紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的. ...

  3. Json多层级动态结构数据解析

    一.工具 (1)GSON Google Gson是一个简单的基于Java的库,用于将Java对象序列化为JSON,反之亦然. 它是由Google开发的一个开源库. 以下几点说明为什么应该使用这个库 - ...

  4. 编译调试Net6源码

    前言 编辑调试DotNet源码可按照官网教程操作,但因为网络问题中间会出现各种下载失败的问题,这里出个简单的教程(以6为版本) 下载源码 下载源码 GitHub下载源码速度极慢,可替换为国内仓库htt ...

  5. 换根 DP 学习笔记

    前言 没脑子选手什么都不会. 正文 先来写一下换根 DP 的特点或应用方面: 不同的点作为树的根节点,答案不一样. 求解答案时要求出每一个节点的信息. 无法通过一次搜索完成答案的求解,因为一次搜索只能 ...

  6. harbor之HTTPS安装

    1.下载解压 # tar -xvf harbor-offline-installer-v1.7.6.tgz # cd /harbror 2.下载python2.7 # apt install pyth ...

  7. Vue中关于this指向的问题

    由Vue管理的函数 例如: computed 计算属性 watch 监视属性 filters (Vue3中已弃用且不再支持) 过滤器 .... 上述属性里配置的函数不要采用箭头函数写法,因为箭头函数没 ...

  8. WPF 制作 Windows 屏保

    分享如何使用WPF 制作 Windows 屏保 WPF 制作 Windows 屏保 作者:驚鏵 原文链接:https://github.com/yanjinhuagood/ScreenSaver 框架 ...

  9. 关于 CMS 垃圾回收器,你真的懂了吗?

    大家好,我是树哥. 前段时间有个小伙伴去面试,被问到了 CMS 垃圾回收器的详细内容,没答出来.实际上,CMS 垃圾回收器是回收器历史上很重要的一个节点,其开启了 GC 回收器关注 GC 停顿时间的历 ...

  10. Modbus转BACnet IP网关

    BACnet是楼宇自动化和控制网络数据通信协议的缩写.它是为楼宇自动化网络开发的数据通信协议   根据1999年底互联网上楼宇自动化网络的信息,全球已有数百家国际知名制造商支持BACnet,包括楼宇自 ...