大家好,这里是 DBA 学习之路 ,专注于提升数据库运维效率。
前言 某客户生产环境 Oracle 19c RAC 集群突发磁盘空间告警,经排查发现 Grid 审计日志占用了 30GB 磁盘空间,目录下堆积了520 万个审计文件 :
1 2 3 4 5 SQL> show parameter audit NAME ------------------- ----------- ---------------------------- audit_file_dest /u01//12.2 .0 //rdbms/ audit_sys_operations
审计配置保留了默认设置,导致sys 用户的每项操作都生成审计记录,在长期运行后产生了惊人的文件数量。
紧急处理过程 首次尝试:直接删除失败 1 2 rm -rf *.aud -bash: /bin/rm: Argument list too long
Linux 系统限制单次命令参数长度约 2MB,当文件数量超过数万时,rm 命令直接失败。
应急方案:find -exec 删除 1 find /u01/app/12.2.0/grid/rdbms/audit -name "*.aud" -exec rm -f {} \;
此方案每删除一个文件就执行一次rm命令,520 万文件耗时超过 30 分钟 ,在争分夺秒的生产维护中效率不足。
性能优化探索 测试环境模拟 创建 500 万审计文件模拟生产环境:
1 2 3 4 5 6 7 8 9 import os dir_path = "/u01/app/12.2.0/grid/rdbms/audit/" os.makedirs(dir_path, exist_ok=True )for i in range (5_000_000 ): with open (os.path.join(dir_path, f"file_{i:07d} .aud" ), 'w' ) as f: pass
多种删除方案性能对比 性能王者:rsync 方案 1 2 mkdir empty_dirtime rsync -a --delete empty_dir/ /u01/app /12.2.0/grid /rdbms/audi t/
2 分 10 秒 完成 500 万文件删除,比find -delete快 60%!原理是利用 rsync 的增量同步算法,直接操作文件系统结构。
生产环境推荐 1. 紧急清理(最快) 1 2 mkdir /tmp/ empty_dir rsync -a --delete --progress /tmp/ empty_dir/ /u 01/app/ 12.2 .0 /grid/ rdbms/audit/
2. 安全清理(保留目录结构) 1 find /u01/ app/12.2.0/g rid/rdbms/ audit -type f -name "*.aud" -delete
3. 按时间清理(保留近期文件) 1 find /u01/ app/12.2.0/g rid/rdbms/ audit -name "*.aud" -mtime +30 -delete
长效预防机制 1. 审计策略优化 1 2 ALTER SYSTEM SET audit_sys_operations =FALSE SCOPE =spfile; -- 关闭sys审计 ALTER SYSTEM SET audit_trail =NONE SCOPE =spfile; -- 关闭数据库审计
2. 定期清理脚本 1 2 3 #!/bin/bash find /u01/app/*/grid/rdbms/audit -name "*.aud" -mtime +7 -delete
3. 文件系统隔离 1 2 3 4 5 6 lvcreate -n audit_lv -L 50G vg_data mkfs.xfs /dev/vg_data/audit_lvecho "/dev/vg_data/audit_lv /grid_audit xfs defaults 0 0" >> /etc/fstab mount -achown grid:oinstall /grid_audit
技术原理解析 为什么 find -delete 更快?
系统调用优化 :直接使用unlinkat()系统调用,避免进程创建开销;
批量处理 :内部缓存文件列表,减少上下文切换;
目录遍历优化 :深度优先遍历减少磁盘寻道时间;
文件删除性能影响因素:
文件系统类型 :XFS > EXT4 > BtrFS(海量小文件场景);
磁盘类型 :NVMe SSD > SAS HDD(7200 转硬盘 500 万文件删除需 1 小时+);
inode 缓存 :vfs_cache_pressure参数优化可提升 20%性能;
目录结构 :扁平目录比深层目录快 3-5 倍;
经验总结
预防优于治疗 :审计配置应纳入数据库部署检查清单;
空间隔离 :关键组件(如 Grid)使用独立文件系统;
性能认知 :海量小文件操作需特殊方法,常规命令可能适得其反;
工具选择 :
万级文件:find -delete
十万级:xargs批量处理
百万级:rsync或专用工具
经此一役,该客户 Grid 审计目录已配置独立文件系统和自动清理策略。运维的本质不是救火,而是通过架构设计和自动化,将危机消灭在萌芽状态。