【YashanDB知识库】设置归档日志上限,但归档日志没自动清理,导致磁盘空间满

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 客户在一主一备性能压测中设置了归档日志清理上下限(12G-16G),但实际产生了100G+归档日志,导致磁盘空间满。原因是未设置ARCH_CLEAN_IGNORE_MODE=BACKUP,系统默认在备份后才清理日志。解决方法是设置ARCH_CLEAN_IGNORE_MODE=BACKUP,并执行`alter database delete archivelog all`触发清理。修改参数后,日志仍可能短暂超过上限,因备机同步延迟。经验总结:需同时设置归档上下限和ARCH_CLEAN_IGNORE_MODE=BACKUP以确保日志及时清理。

问题现象

客户使用一主一备做性能压测,主备机上设置了归档日志清理上下限:

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.
AI 代码解读

问题分析和处理过程

确认归档参数情况

SQL> show parameter ARCH

NAME VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
ARCHIVE_LOCAL_DEST ?/archive
ARCHIVE_DEST_1
ARCHIVE_DEST_2
ARCHIVE_DEST_3
ARCHIVE_DEST_4
ARCHIVE_DEST_5
ARCHIVE_DEST_6
ARCHIVE_DEST_7
ARCHIVE_DEST_8
ARCHIVE_DEST_9
ARCHIVE_DEST_10
ARCHIVE_DEST_11
ARCHIVE_DEST_12
ARCHIVE_DEST_13
ARCHIVE_DEST_14
ARCHIVE_DEST_15
ARCHIVE_DEST_16
ARCHIVE_DEST_17
ARCHIVE_DEST_18
ARCHIVE_DEST_19
ARCHIVE_DEST_20
ARCHIVE_DEST_21
ARCHIVE_DEST_22
ARCHIVE_DEST_23
ARCHIVE_DEST_24
ARCHIVE_DEST_25
ARCHIVE_DEST_26
ARCHIVE_DEST_27
ARCHIVE_DEST_28
ARCHIVE_DEST_29
ARCHIVE_DEST_30
ARCHIVE_DEST_31
ARCHIVE_DEST_32
ARCH_CLEAN_UPPER_THRESHOLD 16G
ARCH_CLEAN_LOWER_THRESHOLD 12G
ARCH_CLEAN_IGNORE_MODE NONE
ENABLE_ARCH_DATA_IGNORE_BACKUP FALSE

37 rows fetched.

SQL>
AI 代码解读

发现设置归档上下限但没有设置归档日志清理忽略备份。

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.
AI 代码解读

那么问题来了:是不是客户设置ARCH_CLEAN_IGNORE_MODE=BACKUP之后,日志就一定不会超过ARCH_CLEAN_UPPER_THRESHOLD呢?

答案是还是有可能超过。上面配置ARCH_CLEAN_IGNORE_MODE=BACKUP是忽略备份,所以还需要同步到备机之后,归档日志才能删除。客户的场景是一主一备做压测,备机同步日志较多,实际会有短暂备机没有同步完,导致归档日志超过上限一些的情况。

经验总结

归档日志在备份之前不会自动清理,设置归档上下限的同时,还需要设置归档日志清理忽略备份:ARCH_CLEAN_IGNORE_MODE=BACKUP

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
3
3
1
98
分享
相关文章
【YashanDB知识库】YashanDB安全设置示例
【YashanDB知识库】YashanDB安全设置示例
【YashanDB知识库】YashanDB安全设置示例
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
YashanDB redo日志文件管理
YashanDB的redo日志文件用于记录数据库物理日志,支持宕机重演和主备复制。 redo日志有4种状态:NEW(新创建)、CURRENT(当前写入)、ACTIVE(未归档或未写盘)和INACTIVE(可复用)。可通过VLOGFILEYASDB_DATA/dbfiles目录来管理redo日志。此外,支持添加、切换和删除redo日志以优化性能或应对磁盘故障等情况,但需注意仅能删除INACTIVE或NEW状态的日志以确保数据安全。
【YashanDB知识库】如何设置yasql客户端的字符编码
本文来自YashanDB官网,主要解决客户因客户端编码配置不当导致执行不同编码SQL文件时出现“YAS-00218 string conversion failed”错误的问题。问题影响所有版本的YashanDB,可能导致测试业务受阻。原因在于客户端与服务端编码不一致时,yasql采用类似iconv逻辑进行字符串转换。解决方法包括确认文件编码(如通过xxd或iconv工具)、正确配置\$YASDB_HOME/client/yasc_env.ini中的客户端编码,并验证设置结果。同时,终端需匹配相应编码格式以确保操作成功。
【YashanDB知识库】如何设置yasql客户端的字符编码
【YashanDB知识库】YashanDB run.log中有slow log queue is full信息
【YashanDB知识库】YashanDB run.log中有slow log queue is full信息
YashanDB归档日志文件管理
本文介绍了YashanDB中归档日志文件的管理,包括默认存储路径(YASDB_DATA/archive)和文件命名规则。单机部署格式为arch_{resetlogs_id}_{sequence}.ARC,共享集群新增instanceId字段,格式为arch{instanceId}_{resetlogs_id}_{sequence}.ARC。1号节点与单机格式一致。可通过VARCHIVED_LOG视图查询相关信息,文件的增删由归档管理操作控制,详情参见官方文档。
【YashanDB知识库】windows配置ODBC跟踪日志, 使用日志定位问题
【YashanDB知识库】windows配置ODBC跟踪日志, 使用日志定位问题
【YashanDB知识库】归档日志清理
本文介绍了YashanDB中手动清理归档日志时遇到的问题及解决方法。问题源于在归档日志未备份或未同步到备机时尝试删除,导致文件仍存在。解决方案是通过调整`ARCH_CLEAN_IGNORE_MODE`参数(如设置为BOTH模式)来忽略备份和备机限制,执行归档日志清理命令(如`ALTER DATABASE DELETE ARCHIVELOG`)。同时,注意YashanDB支持自动清理功能,可通过设置上下阈值避免磁盘空间不足。相关参数可用`show parameter clean`查看。
【YashanDB数据库】YAS-02079 archive log mode must be enabled when database is in replication mode
YAS-02079 archive log mode must be enabled when database is in replication mode
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
131 9

热门文章

最新文章