如何阻止Particular ServiceControl Audit数据库(Raven5)持续膨胀?
解决Particular.ServiceControl.Audit v4.26(RavenDB 5.4 Voron引擎)审计数据库无限膨胀的问题
一、确认保留策略配置的有效性
- 检查
AuditRetentionPeriod配置是否生效:- 打开ServiceControl.Audit的配置文件(如
ServiceControl.Audit.exe.config),确认ServiceControl.Audit/AuditRetentionPeriod的值为1.00:00:00(代表1天);若使用环境变量,需确认SERVICECONTROL_AUDIT_AUDITRETENTIONPERIOD变量设置正确。 - 重启ServiceControl.Audit服务,确保配置加载完成。
- 打开ServiceControl.Audit的配置文件(如
- 调整保留策略执行频率:默认清理任务每天运行一次,可通过
ServiceControl.Audit/RetentionCheckInterval缩短间隔(如设置为01:00:00,每小时执行一次),加速过期数据清理。 - 注意:Voron引擎删除数据后不会立即释放磁盘空间,清理任务仅标记数据为删除,需后续压缩操作回收空间。
二、通过离线压缩回收Voron磁盘空间
在线压缩因ServiceControl运行时的资源锁容易卡住,推荐使用更可靠的离线压缩:
- 完全停止ServiceControl.Audit服务,通过任务管理器确认
ServiceControl.Audit.exe进程已终止,无进程占用数据库文件。 - 获取与当前RavenDB 5.4版本匹配的RavenDB命令行工具。
- 执行离线压缩命令:
raven.cli.exe database compact --database-path="你的审计数据库实际路径" --offline - 压缩完成后,重新启动ServiceControl.Audit服务。
- 注意:离线压缩需要目标磁盘有额外临时空间(约为当前数据库大小的10%-20%),需确保磁盘余量充足。
三、从源头减少审计数据写入量
- 配置审计消息过滤:通过
ServiceControl.Audit/FilterAuditMessages添加规则,过滤无需审计的消息,示例配置:<add key="ServiceControl.Audit/FilterAuditMessages" value="Type != 'UnnecessaryMessageType' AND Endpoint != 'TestEndpoint'" /> - 启用审计采样:若无需全量审计,配置
ServiceControl.Audit/AuditSamplingSettings设置采样率,示例:<add key="ServiceControl.Audit/AuditSamplingSettings/SampleRate" value="0.1" /> <!-- 仅保留10%的审计事件 -->
四、长期维护建议
- 定期执行离线压缩:在业务低峰期(如凌晨)设置计划任务,自动完成「停止服务→执行压缩→重启服务」的流程,避免影响业务。
- 监控磁盘使用:配置磁盘告警,当数据库占用达到阈值时触发清理或压缩操作,提前避免磁盘耗尽。
内容的提问来源于stack exchange,提问作者Frederik Struck-Schøning
相关产品推荐
相关产品推荐

