OceanBase默认会自动清理日志吗?
不会,官方ppt中看到的,呵呵~
是的
是不是可以改为自动清理啊?
搞一个保留周期的参数比较合理
max_syslog_file_count=300
enable_syslog_recycle=True
默认这两个参数没有打开,根据自己的磁盘大小调整保留个数,一个日志文件大小是256MB。
要设置的
正解
嗯嗯
有意思
在 OceanBase 数据库中,“运行日志”通常指的是系统运行过程中生成的诊断日志(diagnostic logs),例如 observer.log
、observer.log.wf
、election.log
等,位于 OBServer 节点安装目录下的 log/
子目录中。这类日志用于记录系统的运行状态、错误信息、性能跟踪等内容。
运行日志是否默认自动清理?
否,运行日志在默认配置下不会自动清理。只有在用户主动配置相应的系统参数后,才会触发自动回收机制。
1. 运行日志的轮转与存储机制
- 单个日志文件大小上限:每个日志文件最大为 256MB。
-
日志轮转方式:当日志写满 256MB 后,系统会自动创建一个新的日志文件,命名格式为
observer.log.{timestamp}
,其中{timestamp}
是文件创建的时间戳。 -
日志类型示例:
-
observer.log
:主运行日志 -
observer.log.wf
:仅记录 WARN 及以上级别的重要日志(需启用enable_syslog_wf
) -
election.log
:选举相关日志 -
rootservice.log
:Root Service 操作日志
-
参考文档:OBServer 节点安装目录结构 → 日志文件目录
2. 自动清理运行日志的条件
要实现运行日志的自动清理,必须满足以下任一条件:
基于文件数量的清理(推荐用于有限保留场景)
使用以下两个参数配合控制:
-
enable_syslog_recycle = True
:启用旧日志回收功能(默认为False
) -
max_syslog_file_count = N
:设置每种日志最多保留 N 个文件(默认为0
,表示不限制)
注意:当且仅当
enable_syslog_recycle = True
且max_syslog_file_count > 0
时,系统才会在达到数量上限后删除最老的日志文件。
-- 示例:启用日志回收,并限制每类日志最多保留 100 个文件
obclient> ALTER SYSTEM SET enable_syslog_recycle = True;
obclient> ALTER SYSTEM SET max_syslog_file_count = 100;
– 示例:限制日志总占用不超过 10GB obclient> ALTER SYSTEM SET syslog_disk_size = ‘10G’;
3. 日志压缩优化(减少存储占用)
OceanBase 支持对历史日志进行压缩存储,进一步节省磁盘空间:
-
syslog_compress_func = zstd_1.0
或zstd_1.3.8
:启用 ZSTD 压缩算法(默认为none
,即不压缩) -
syslog_file_uncompressed_count = N
:保留最近 N 个未压缩的日志文件
压缩仅作用于带时间戳的日志文件(如
observer.log.202504051200
),不压缩当前活跃日志和.wf
文件。
-- 示例:启用压缩,保留最近 10 个不压缩文件
obclient> ALTER SYSTEM SET syslog_compress_func = 'zstd_1.3.8';
obclient> ALTER SYSTEM SET syslog_file_uncompressed_count = 10;
– 示例:限制审计日志最多保留 1GB 或 7 天(取先到者) obclient> ALTER SYSTEM SET audit_log_max_size = ‘1G’; obclient> ALTER SYSTEM SET audit_log_prune_seconds = 604800; – 7天
结论总结
配置维度 | 是否默认启用 | 说明 |
---|---|---|
日志轮转(256M/文件) |
![]() |
固定大小切分,无需额外配置 |
按文件数自动清理 |
![]() |
需设置 enable_syslog_recycle=True 且 max_syslog_file_count>0
|
按磁盘空间自动清理 |
![]() |
需设置 syslog_disk_size > 0
|
日志压缩 |
![]() |
需手动启用 syslog_compress_func
|
审计日志清理 |
![]() |
需配置 audit_log_max_size 或 audit_log_prune_seconds
|
最佳实践建议:
- 生产环境中应配置
syslog_disk_size
至少为磁盘容量的 10%-20%,避免日志无限增长导致磁盘耗尽。 - 若调试已完成,建议关闭
enable_syslog_wf
或调整syslog_level
降低日志量。 - 对于长期运行的集群,推荐结合
syslog_disk_size
与压缩功能,平衡可观测性与存储成本。 - 使用 OCP 或自研监控工具定期检查日志目录增长趋势。
如果您希望实现全自动的运行日志生命周期管理,请务必根据业务需求合理配置上述参数,并进行充分验证。
OceanBase 是否默认自动清理日志,需根据日志类型区分对待。总体而言,对于大多数关键日志(如归档日志),默认并不会自动清理,必须通过配置清理策略启用该功能。
1. 在线 Redo 日志(Clog)的自动回收
OceanBase 对在线 Redo 日志(即 clog)采用基于磁盘使用率的自动复用机制,但这不是传统意义上的“删除式清理”,而是循环覆盖:
-
log_disk_utilization_threshold
:默认为磁盘空间的 80%,当 clog 占用达到此阈值时,系统开始复用最老的日志文件。 -
log_disk_utilization_limit_threshold
:默认为 95%,超过此值将停止所有写操作,防止磁盘耗尽。
因此,在线日志存在一定程度的“自动清理”(实为复用),但这是为了保障高可用性而设计的空间管理机制,并非定期删除日志。
2. 归档日志(Archived Log)的清理
归档日志的清理完全依赖于用户是否配置了备份清理策略:
- 只有执行了
DELETE BACKUP UNTIL
或设置了DELETE BACKUP POLICY
后,系统才会每小时触发一次自动清理任务。 - 清理过程会依据保留的数据备份中最小的恢复位点,删除不再需要的日志备份。
- 若未设置任何清理策略,则归档日志将永久保留,不会自动清理。
注意事项:
- 必须先完成数据备份,才能清理对应的归档日志。
- 自动清理仅作用于当前配置的
DATA_BACKUP_DEST
和LOG_ARCHIVE_DEST
路径。 - 至少保留一份有效备份,以防数据丢失。
参考文档:自动清理过期备份
参考文档:备份架构 → 数据清理
3. 其他类型日志/元数据的清理
例如统计信息历史(statistics history)也需手动创建调度任务才能实现自动清理,默认并不开启:
-- 示例:创建每31天清理一次历史统计信息的任务
DECLARE
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'PRUGE_STATS',
job_type => 'PL/SQL Block',
job_action => 'call dbms_stats.purge_stats(NULL);',
repeat_interval => 'FREQ=DAILY;INTERVAL=1',
enabled => TRUE
);
END;
/
结论
日志类型 | 是否默认自动清理 | 说明 |
---|---|---|
在线 Redo 日志 (clog) |
![]() |
达到80%磁盘使用率时开始复用旧日志 |
归档日志 (archivelog) |
![]() |
需配置 DELETE BACKUP POLICY 才能自动清理 |
数据备份 |
![]() |
必须显式设置清理策略 |
统计信息历史 |
![]() |
需手动创建定时任务 |
建议实践:
- 定期配置合理的
DELETE BACKUP POLICY
以避免归档日志无限增长。 - 监控 clog 磁盘使用情况,避免接近 95% 上限导致服务中断。
- 使用 OB Cloud 或 OCP 等运维平台可视化管理备份与清理策略。