重庆思庄Oracle、Redhat认证学习论坛

标题: adump目录下文件太多导致ls很慢的方法 [打印本页]

作者: jiawang    时间: 2023-6-9 14:58
标题: adump目录下文件太多导致ls很慢的方法
本帖最后由 jiawang 于 2023-6-9 15:00 编辑

adump一般位于$ORACLE_BASE目录下,主要记录具有sysdba或者sysoper权限的用户的登录行为等,这个是强制记录的,即使设置了database audit trail (如设置AUDIT_TRAIL parameter = DB),oracle也会强制记录并产生audit file.
问题是,如果长期不删除,adump下会保留相当多的audit file,共有3590164个文件
ls -1 -f|wc -l
3590164

ls命令执行起来非常慢,花费了18分钟之久
time ls -alh
......文件输出省略
real    18m1.764
suser    1m12.998
ssys     1m28.491s

这是因为默认情况下,“ls”命令将对其输出进行排序。
为此,它必须首先将每个文件的名称读入内存。 面对一个非常大的目录,它会一个一个的读取文件名,并占用越来越多的内存,直到最终按字母数字顺序一次列出所有文件。

我们将ls命令的参数改一下,使用如下-1、与-f参数:
-1 list one file per line
-f do not sort, enable -aU, disable -lst

time ls -1 -f
......文件输出省略
real    2m57.107
suser    0m3.448
ssys     0m13.646s

这次输出只花了近3分钟,已经较之前改善很多了
如果要删除,可以使用:
time ls -1 -f |xargs -i rm {}
或者删除指定时间段内的文件
find $ORACLE_BASE/admin/orcl/adump -mtime +2 -type f |xargs -i rm -f {}

当然,由于这些文件记录了sysdba与sysoper权限的用户的登录行为,不需要保留太久,最好将后者放到crontab内,排程周期性的执行





欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2