问题现象
客户使用一主一备做性能压测,主备机上设置了归档日志清理上下限:
ARCH_CLEAN_LOWER_THRESHOLD=12G
ARCH_CLEAN_UPPER_THRESHOLD=16G
但实际压测的过程,预期归档日志不应该超过 16G,但还是产生了 100G+的归档日志,占用了较多存储空间,最终磁盘空间满,客户怀疑归档清理策略没起效。
问题的风险及影响
客户环境为测试环境,影响测试业务的开展。
问题影响的版本
YashanDB 版本:23.1.3.101
问题发生原因
归档日志在备份之前不会自动清理,设置归档上下限的同时,还需要设置归档日志清理忽略备份:
ARCH_CLEAN_IGNORE_MODE=BACKUP
解决方法及规避方式
设置 ARCH_CLEAN_IGNORE_MODE=BACKUP,使用 alter database delete archivelog all 触发清理归档:
SQL> alter system set ARCH_CLEAN_IGNORE_MODE=BACKUP;Succeed.SQL> alter system set ARCH_CLEAN_LOWER_THRESHOLD=12G;Succeed.SQL> alter system set ARCH_CLEAN_UPPER_THRESHOLD=16G;Succeed.SQL> alter database delete archivelog all;Succeed.
复制代码
问题分析和处理过程
确认归档参数情况:
SQL> show parameter ARCH NAME VALUE---------------------------------------------------------------- ----------------------------------------------------------------ARCHIVE_LOCAL_DEST ?/archiveARCHIVE_DEST_1ARCHIVE_DEST_2ARCHIVE_DEST_3ARCHIVE_DEST_4ARCHIVE_DEST_5ARCHIVE_DEST_6ARCHIVE_DEST_7ARCHIVE_DEST_8ARCHIVE_DEST_9ARCHIVE_DEST_10ARCHIVE_DEST_11ARCHIVE_DEST_12ARCHIVE_DEST_13ARCHIVE_DEST_14ARCHIVE_DEST_15ARCHIVE_DEST_16ARCHIVE_DEST_17ARCHIVE_DEST_18ARCHIVE_DEST_19ARCHIVE_DEST_20ARCHIVE_DEST_21ARCHIVE_DEST_22ARCHIVE_DEST_23ARCHIVE_DEST_24ARCHIVE_DEST_25ARCHIVE_DEST_26ARCHIVE_DEST_27ARCHIVE_DEST_28ARCHIVE_DEST_29ARCHIVE_DEST_30ARCHIVE_DEST_31ARCHIVE_DEST_32ARCH_CLEAN_UPPER_THRESHOLD 16GARCH_CLEAN_LOWER_THRESHOLD 12GARCH_CLEAN_IGNORE_MODE NONEENABLE_ARCH_DATA_IGNORE_BACKUP FALSE 37 rows fetched. SQL>
复制代码
发现设置归档上下限但没有设置归档日志清理忽略备份。
YashanDB 归档日志除了发送到备机之外,还可以使用 backup 命令做备份,详细参考YashanDB Doc
系统从安全的角度考虑,需要把日志备份之后,才允许删除,除非用户指定该场景下可以忽略备份。详细参考YashanDB Doc
客户的场景是需要主备同步,但是不需要备份拷贝,因此修改参数为 ARCH_CLEAN_IGNORE_MODE=BACKUP
修改参数并验证。
修改参数为 ARCH_CLEAN_IGNORE_MODE=BACKUP 可以使用 alter database delete archivelog all; 检查日志是否清理掉,从而验证日志清理策略符合预期:
SQL> alter system set ARCH_CLEAN_IGNORE_MODE=BACKUP;Succeed.SQL> alter database delete archivelog all;Succeed.
复制代码
那么问题来了:是不是客户设置 ARCH_CLEAN_IGNORE_MODE=BACKUP 之后,日志就一定不会超过 ARCH_CLEAN_UPPER_THRESHOLD 呢?
答案是还是有可能超过。上面配置 ARCH_CLEAN_IGNORE_MODE=BACKUP 是忽略备份,所以还需要同步到备机之后,归档日志才能删除。客户的场景是一主一备做压测,备机同步日志较多,实际会有短暂备机没有同步完,导致归档日志超过上限一些的情况。
经验总结
归档日志在备份之前不会自动清理,设置归档上下限的同时,还需要设置归档日志清理忽略备份:ARCH_CLEAN_IGNORE_MODE=BACKUP
评论