- 事务日志与检查点
WAL文件,在金仓数据库中,事务日志文件称为Write Ahead Log(预写式日志,简称WAL)。
WAL存储了数据库系统中所有更改和操作的历史,相当于Oracle的REDO。
WAL机制是在这个写数据的过程中加入写对应wal log的过程。
WAL文件的默认存放位置是./data/sys_wal
一、查看WAL文件总大小
1、在KES服务器端查看
统计WAL段个数,通过日志个数和每个日志的大小计算日志总大小
2、在客户端查看
通过脚本查看WAL文件总大小
- WAL日志的切换
KES将xlog记录写入sys_wal子目录的WAL段文件中,默认情况下,每个WAL段文件大小是16MB,当出现下列情况时,WAL段就会发生切换。
- WAL段文件被写满。
- 启用了archive_mode,且超过了archive_timeout的时间。
- 执行函数sys_switch_wal。
- WAL段文件被写满自动切换。
1、查看系统当前WAL段。
- 执行DML操作,产生日志,使WAL段写满后生成新的WAL段
- 创建测试表。
-
- 插入数据
- 查看系统当前WAL段
2、archive_timeout超时自动切换
1、配置归档参数。
在/KingbaseES/V8/data/kingbase.conf文件结尾添加下列语句:
然后创建在/KingbaseES/V8/data/目录下创建archive.conf 文件
(1)设置日志级别参数。
(2)设置归档命令参数archive_command,归档位置为/archive。
(3)设置开启归档模式参数archive_timeout为on。
(4)设置强制归档时间参数archive_timeout为1分钟。
添加下列参数:
重启数据库使归档参数生效。
2、使用循环,不断产生数据活动。
注意:
定时归档可以在一定程度上降低数据丢失风险,但是不要将archive_timeout参数设置的过短,这样会产生大量的WAL段文件,因为无论是否有业务发生,系统在达到archive_timeout时间隔离后都会切换WAL段文件,占用大量磁盘空间。
3、使用sys_switch_wal函数手动切换
查看系统当前正在使用的WAL文件
切换WAL段文件
查看系统当前正在使用的WAL文件,已经被切换(有问题)
三、清理WAL日志
如果遇到WAL不能被收回或不能被重复利用导致空间不足问题,紧急情况下需要清理wal日志。
清理步骤:
- 一致性关闭数据库
清理日志前
- 删除WAL文件
- 使用sys_controldata命令获取最新的检查点的事物号和对象号
-
- 第一步得到的结果作为参数,使用sys_resetwal删除WAL文件。
- 启动数据库服务
删除后
四、日志挖掘
金仓数据库提供了日志跟踪和挖掘工具sys_waldump,例:对表执行相关的修改操作后查看日志内容。
- 创建测试表
- 执行DML操作
显示开启事务,向表中插入数据、更新数据、删除数据,记录事务号和执行上述操作前的LSN。
- 用sys_waldump挖掘日志位置的内容
从以上看出输出内容可以看到wal日志中包含commit等操作
总结
- WAL文件名称规则
WAL文件名称由三段8位的16进制数组成:前8个16进制字符:00000004表示timeline(时间轴)、中间8个16进制字符:00000000表示logid、最后8个16进制字符:00000046表示logseg,Logseg前6个16进制字符始终为0.
- 相关函数、命令
- 相关命令
- 相关函数
- 实例恢复概述
- 数据库把每项操作记录到重做日志中。
- 当实例重新启动后,会重做(replay)这些日志让实例恢复到异常终止时的状态,这个动作通常称为”前滚”。
- “前滚”完成后,多数数据库还会把未完成的事物取消掉,就像这些事务从来没有执行过一样。这个动作称为回滚。
- 在前滚过程中,数据库是不能被用户访问的。
- 什么时候需要实例恢复?
当数据库实例异常终止后,重启实例会恢复到被异常终止时的状态。
- 异常终止时是什么状态?
- 内存中有脏块未来得及作最后一次检查点即关闭。
- 此时redo file比data file新鲜。