大家好,這里是 DBA 學習之路,專注于提升數據庫運維效率。
前言
某客戶生產環境 Oracle 19c RAC 集群突發磁盤空間告警,經排查發現 Grid 審計日志占用了 30GB 磁盤空間,目錄下堆積了520 萬個審計文件:
SQL> show parameter audit
NAME TYPE VALUE
------------------- ----------- ----------------------------
audit_file_dest string /u01/app/12.2.0/grid/rdbms/audit
audit_sys_operations boolean TRUE
審計配置保留了默認設置,導致sys用戶的每項操作都生成審計記錄,在長期運行后產生了驚人的文件數量。
緊急處理過程
首次嘗試:直接刪除失敗
rm -rf *.aud
-bash: /bin/rm: Argument list too long
Linux 系統限制單次命令參數長度約 2MB,當文件數量超過數萬時,rm 命令直接失敗。
應急方案:find -exec 刪除
find /u01/app/12.2.0/grid/rdbms/audit -name "*.aud" -exec rm -f {} \;
此方案每刪除一個文件就執行一次rm命令,520 萬文件耗時超過 30 分鐘,在爭分奪秒的生產維護中效率不足。
性能優化探索
測試環境模擬
創建 500 萬審計文件模擬生產環境:
## python 創建更快
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 方案
mkdir empty_dir
time rsync -a --delete empty_dir/ /u01/app/12.2.0/grid/rdbms/audit/
2 分 10 秒完成 500 萬文件刪除,比find -delete快 60%!原理是利用 rsync 的增量同步算法,直接操作文件系統結構。
生產環境推薦
1. 緊急清理(最快)
mkdir /tmp/empty_dir
rsync -a --delete --progress /tmp/empty_dir/ /u01/app/12.2.0/grid/rdbms/audit/
2. 安全清理(保留目錄結構)
find /u01/app/12.2.0/grid/rdbms/audit -type f -name "*.aud" -delete
3. 按時間清理(保留近期文件)
find /u01/app/12.2.0/grid/rdbms/audit -name "*.aud" -mtime +30 -delete
長效預防機制
1. 審計策略優化
ALTER SYSTEM SET audit_sys_operations=FALSE SCOPE=spfile; -- 關閉sys審計
ALTER SYSTEM SET audit_trail=NONE SCOPE=spfile; -- 關閉數據庫審計
2. 定期清理腳本
#!/bin/bash
# 保留7天審計日志
find /u01/app/*/grid/rdbms/audit -name "*.aud" -mtime +7 -delete
3. 文件系統隔離
# 為審計日志創建獨立文件系統
lvcreate -n audit_lv -L 50G vg_data
mkfs.xfs /dev/vg_data/audit_lv
echo "/dev/vg_data/audit_lv /grid_audit xfs defaults 0 0" >> /etc/fstab
mount -a
chown 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 審計目錄已配置獨立文件系統和自動清理策略。運維的本質不是救火,而是通過架構設計和自動化,將危機消滅在萌芽狀態。




