文章目录
- 任务二十四 openGaussss WAL管理和归档管理
- 任务目标
- 实施步骤
- 一、WAL管理
- 1.不能修改的WAL参数
- 2.可以修改的WAL参数
- 二、配置openGauss工作在归档模式
- 1.查看当前的归档设置
- 2.停止openGauss数据库
- 3.创建归档日志的保存目录
- 4.修改启动参数文件
- 5.重新启动openGauss数据库
- 6.再次查看归档设置
- 三、WAL切换
- 四、检查点管理
- 3.DBA手动发出一个检查点
任务二十四 openGaussss WAL管理和归档管理
任务目标
掌握openGauss的WAL(预写日志)管理、归档管理和检查点(Checkpoint)管理。
实施步骤
一、WAL管理
WAL相关的参数有两类:一类是只能查看不能修改的参数,另一类是可以修改的参数。
1.不能修改的WAL参数
执行下面的命令,查看WAL相关的参数wal_block_size
和wal_segment_size
的当前值:
gsql -d postgres -p 26000 -r
show wal_block_size;
show wal_segment_size;
\q
参数wal_block_size和wal_segment_size不能修改。
2.可以修改的WAL参数
执行下面的命令,查看WAL相关的参数wal_buffers
的当前值:
gsql -d postgres -p 26000 -r
show wal_buffers;
\q
可以看出,参数wal_buffers
的默认值是16MB。可以通过修改openGauss数据库的启动参数文件postgresql.conf来修改参数wal_bufrers
的值,该参数修改后需要重新启动数据库管理系统才能生效。
二、配置openGauss工作在归档模式
1.查看当前的归档设置
查看当前openGauss DBMS的归档设置:
gsql -d postgres -p 26000 -r
select name,setting from pg_settings where name like 'archive%' or name = 'wal_level';
\q
可以看出,系统目前工作在非归档模式(参数archive_mode
的值为off)。
2.停止openGauss数据库
使用Linux用户omm,执行下面的命令,关闭openGauss数据库:
gs_om -t stop
3.创建归档日志的保存目录
使用Linux超级用户root,执行下面的命令,创建用于保存归档日志的目录:
su -
mkdir /archivelog
chown omm.dbgrp /archivelog
exit
4.修改启动参数文件
使用Linux用户omm,编辑openGauss数据库启动参数文件中关于WAL的参数:
vi $PGDATA/postgresql.conf
#wal_level 可以取以下的值:minimal,archive,hot_standby or logical
#修改wal_level的值需要重新启动数据库
#工作在归档模式下不能设置为 minimal,可以设置为除 minmal之外的其他参数
#默认值已经满足要求可以不修改!
wal level= hot_standby
#修改archive_mode的值需要重新启动数据库
archive mode=on
#修改archive_command的值不需要重新启动数据库,只需要reload
archive_command='cp %p /archivelog/%f'
#修改归档周期archivetime,900表示每900s(15min)切换一次
archive timeout=900
5.重新启动openGauss数据库
使用Linux用户omm,执行下面的命令,启动openGauss数据库:
gs_om -t start
6.再次查看归档设置
执行下面的命令,查看当前openGauss数据库的归档设置:
gsql -d postgres -p 26000 -r
select name,setting from pg_settings where name like 'archive%' or name = 'wal_level';
\q
三、WAL切换
WAL写满后会自动切换。此外,openGauss数据库启动参数archive_timeout
用于设置归档日志的超时时间,一旦超过该值所定义的时间,也将自动切换WAL。
也可以手动切换WAL。执行下面的命令可以手动切换openGauss的WAL:
gsql -d postgres -p 26000 -r
select pg_switch_xlog();
\q
四、检查点管理
1.检查点的作用
在openGauss数据库检查点期间,所有内存中的脏数据页都会被写回磁盘,同时会在WAL中做一个特殊的标记,表明检查点之前的所有数据都已经写入数据库的数据文件里了。
当数据库的实例崩溃之后,恢复将从最后一个检查点开始:从最后一个检查点开始重做,直至达到故障点,然后回滚所有未提交的事务。检查点之前的WAL不再被需要,可以回收或删除。
从上面的解释我们可以看出,数据库发出检查点操作有这几个作用:第一个作用是周期性地将缓冲区中的脏数据刷写回硬盘;第二个作用是回收WAL所占的空间,因为检查点之前的WAL是没用的;第三个作用是缩短数据库实例的崩溃恢复时间,恢复只需要从最后一个检查点开始。
2.检查点参数
1)参数checkpoint_timeout
:两个检查点之间的最大时间间隔。
2)参数max_wal_size
:两个检查点之间允许生成的最大WAL的容量。
如果满足这两个参数设置的条件任何之一,都将发出一个检查点。如果这两个参数设置得过小,将频繁发出检查点,导致磁盘I/0繁忙;如果这两个参数设置得过大,会导致检查点期间出现过大的磁盘I/0,此外还会导致数据库实例故障后恢复时间过长。
3)参数checkpoint_completion_target
:指定检查点在时间上的完成目标,默认值为0.5,表示每个检查点需要在两个检查点间隔时间的50%之内完成。
4)参数checkpoint_warning
:如果两个检查点之间的时间间隔接近该参数设置的秒数,则向服务器日志输出一条信息。可以不理会偶尔出现的这种信息,但是如果该信息频繁出现,则需要调整检查点的其他参数,来增加检查点之间的时间间隔。
调整检查点相关参数的操作,可以参考任务二十四的相关内容。
3.DBA手动发出一个检查点
执行下面的命令,手动发出一个检查点:
gsql -d postgres -p 26000 -r
CHECKPOINT;
\q