关键字:
WAL,LSN,人大金仓,KingbaseES
WAL日志介绍
Wal日志即writes achead log预写式日志,简称wal日志,是数据库的重要组成部分,存储了数据库系统中所有更改和操作的历史记录,以确保数据库不会因为故障而丢失数据。
WAL日志重要概念
WAL日志存放在$DATA/sys_wal中。
1. LSN:LSN即日志序列号Log Sequence Number。表示XLOG Record记录写入到事务日志中的位置。LSN的值为无符号64位整型。在事务日志中,LSN是单调递增且唯一。
2. Checkpoint :
检查点Checkpoint由Checkpointer进程执行,主要的处理流程如下:
1) 获取Redo point,构造包含此Redo point检查点信息的XLOG Record并写入到wal segment file中;
2) 刷新脏页到磁盘上;
3) 更新Redo point等信息到数据库控制文件中。
WAL日志常用命令
- 查看wal日志的大小及级别设置
test=# \l
test=# show archive_mode;
test=# show wal_level;
test=# show min_wal_size;
test=# show max_wal_size;
- 定位当前正在使用的WAL日志
test=# select txid_current(),sys_current_wal_lsn(),sys_walfile_name(sys_current_wal_lsn()),sys_walfile_name_offset(sys_current_wal_lsn());
其中sys_current_wal_lsn():获得当前 wal 日志写入位置。
sys_walfile_name():转换 wal 日志位置为文件名。
sys_walfile_name_offset():返回转换后的 wal 日志文件名和偏移量。
WAL: 000000010000000000000003;WAL的名称由3部分组成,每个部分代表8个数字,第一部分是TimeLine ID,从1开始。第二部分是逻辑文件ID,从0开始。第三部分是物理文件ID,从00开始,知道FF,周二复制的循环。
00000001:代表数据库运行的时间轴,如果恢复过数据库(这备切换)这个值会增大;
00000000:与LSN的第二部分相对应
00000003:代表waifile文件的最后两位
- 切换日志,定位当前正在使用的wal日志
select sys_switch_wal();命令为查看是否归档
test=# select sys_switch_wal();
test=# checkpoint;
test=# select txid_current(),sys_current_wal_lsn(),sys_walfile_name(sys_current_wal_lsn()),sys_walfile_name_offset(sys_current_wal_lsn());
- 偏移量的计算
- 先查看当前的LSN
test=# select sys_current_wal_lsn();
- 转换LSN
test=# select x'3000230'::int;