Oracle 表的碎片清理流程,真的是我最近在维护数据库时发现的一大利器。碎片太多,HWM 一路飙升,读性能那叫一个惨——全表扫描的时候像踩了油门不松脚的拖拉机。嗯,还好这套方案挺全的,从监控表的建立到清理脚本的生成都有。用DBMS_SPACE
查得清清楚楚,连脚本都帮你想好了,直接拿去跑就行。
监控的表也可以按需筛,像PERFSTAT
、SYS
这种系统用户的表直接排除掉。你可以建一个TB_MONITOR
表来记录碎片信息,结构设计得也挺合理的,字段一应俱全——什么CURRENT_SIZE
、WASTE_THRESHOLD
都考虑到了。搞个 SQL 循环跑一下,插入监控数据也不麻烦。
清理逻辑是老朋友:ALTER TABLE ... SHRINK SPACE COMPACT
。我一般都是先用DBMS_SPACE
查查哪些表浪费得厉害,就开搞。你也可以写个小脚本自动化执行,结果再邮件发出来,整个流程一点都不复杂。
如果你手上也有一堆删了又插、插了又删的业务表,不妨试试这套。HWM 降下来,空间腾出来,I/O 轻了,老板说数据库快多了,咱心里也美滋滋的,对吧?