OceanBase默认会自动清理日志吗?

OceanBase默认会自动清理日志吗?

2 个赞

不会,官方ppt中看到的,呵呵~

5 个赞

是的

2 个赞

是不是可以改为自动清理啊?

3 个赞

搞一个保留周期的参数比较合理

3 个赞

max_syslog_file_count=300
enable_syslog_recycle=True
默认这两个参数没有打开,根据自己的磁盘大小调整保留个数,一个日志文件大小是256MB。

3 个赞

要设置的

1 个赞

正解

1 个赞

嗯嗯

1 个赞

有意思

在 OceanBase 数据库中,“运行日志”通常指的是系统运行过程中生成的诊断日志(diagnostic logs),例如 observer.logobserver.log.wfelection.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. 自动清理运行日志的条件

要实现运行日志的自动清理,必须满足以下任一条件:

:white_check_mark: 基于文件数量的清理(推荐用于有限保留场景)

使用以下两个参数配合控制:

  • enable_syslog_recycle = True:启用旧日志回收功能(默认为 False
  • max_syslog_file_count = N:设置每种日志最多保留 N 个文件(默认为 0,表示不限制)

:warning: 注意:当且仅当 enable_syslog_recycle = Truemax_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.0zstd_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/文件) :white_check_mark: 固定大小切分,无需额外配置
按文件数自动清理 :x: 需设置 enable_syslog_recycle=Truemax_syslog_file_count>0
按磁盘空间自动清理 :x: 需设置 syslog_disk_size > 0
日志压缩 :x: 需手动启用 syslog_compress_func
审计日志清理 :x: 需配置 audit_log_max_sizeaudit_log_prune_seconds

:pushpin: 最佳实践建议

  1. 生产环境中应配置 syslog_disk_size 至少为磁盘容量的 10%-20%,避免日志无限增长导致磁盘耗尽。
  2. 若调试已完成,建议关闭 enable_syslog_wf 或调整 syslog_level 降低日志量。
  3. 对于长期运行的集群,推荐结合 syslog_disk_size 与压缩功能,平衡可观测性与存储成本。
  4. 使用 OCP 或自研监控工具定期检查日志目录增长趋势。

如果您希望实现全自动的运行日志生命周期管理,请务必根据业务需求合理配置上述参数,并进行充分验证。

OceanBase 是否默认自动清理日志,需根据日志类型区分对待。总体而言,对于大多数关键日志(如归档日志),默认并不会自动清理,必须通过配置清理策略启用该功能

1. 在线 Redo 日志(Clog)的自动回收

OceanBase 对在线 Redo 日志(即 clog)采用基于磁盘使用率的自动复用机制,但这不是传统意义上的“删除式清理”,而是循环覆盖:

  • log_disk_utilization_threshold:默认为磁盘空间的 80%,当 clog 占用达到此阈值时,系统开始复用最老的日志文件。
  • log_disk_utilization_limit_threshold:默认为 95%,超过此值将停止所有写操作,防止磁盘耗尽。

:white_check_mark: 因此,在线日志存在一定程度的“自动清理”(实为复用),但这是为了保障高可用性而设计的空间管理机制,并非定期删除日志。

参考文档:Redo 日志 → 日志的控制与回收

2. 归档日志(Archived Log)的清理

归档日志的清理完全依赖于用户是否配置了备份清理策略

  • 只有执行了 DELETE BACKUP UNTIL 或设置了 DELETE BACKUP POLICY 后,系统才会每小时触发一次自动清理任务。
  • 清理过程会依据保留的数据备份中最小的恢复位点,删除不再需要的日志备份。
  • 若未设置任何清理策略,则归档日志将永久保留,不会自动清理

:warning: 注意事项:

  • 必须先完成数据备份,才能清理对应的归档日志。
  • 自动清理仅作用于当前配置的 DATA_BACKUP_DESTLOG_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) :white_check_mark: 是(基于复用) 达到80%磁盘使用率时开始复用旧日志
归档日志 (archivelog) :x: 需配置 DELETE BACKUP POLICY 才能自动清理
数据备份 :x: 必须显式设置清理策略
统计信息历史 :x: 需手动创建定时任务

:pushpin: 建议实践

  • 定期配置合理的 DELETE BACKUP POLICY 以避免归档日志无限增长。
  • 监控 clog 磁盘使用情况,避免接近 95% 上限导致服务中断。
  • 使用 OB Cloud 或 OCP 等运维平台可视化管理备份与清理策略。