导读:本期聚焦于南京GEO公司创作的《如何为Oracle RAC集群中的ACFS文件系统启用重复数据删除?》,敬请观看详情。ACFS在Oracle RAC环境里常被用作共享文件系统,数据库备份、日志文件和外部表等数据堆积之后,存储空间很快会告急。ACFS提供的重复数据删除功能可以在块级别识别并消除冗余数据,只保留唯一的数据块,从而大幅降低空间占用。本文从ACFS去重的工作机制入手,说明它如何在不影响RAC多节点并发访问的前提下完成数据块指纹计算与复用,接着给出在ASM磁盘组上创建启用去重卷的命令行步骤和参数说明,并演示如何挂载到所有RAC节点。随后介绍通过acfsutil命令查询去重节省空间的方法,以及结合数据库负载调整去重粒度的思路。最后梳理ACFS去重的限制条件,比如对卷大小的要求、与压缩功能的兼容性,以及Oracle许可方面的注意事项,帮助读者判断是否适合在现有RAC集群中启用该特性。

在Oracle RAC集群环境中,ACFS文件系统经常被用来存放归档日志、数据泵导出文件、外部表数据以及其他共享数据。这些数据在多个时间点或不同目录之间往往存在大量重复内容,例如同一份备份脚本被复制到多个挂载点,或者数据库逻辑导出文件在不同时间点只有少量变化,其余部分完全一致。如果不采取任何措施,ACFS卷的物理空间会被重复数据迅速占满,不仅增加存储成本,还会拖慢备份和恢复过程。ACFS提供的重复数据删除(deduplication)功能可以从块级别解决这个问题,它只保存唯一的物理数据块,重复块只保留引用计数,从而在保持逻辑容量不变的同时显著减少物理空间占用。

如何为Oracle RAC集群中的ACFS文件系统启用重复数据删除?

ACFS重复数据删除的工作机制

ACFS去重属于在线透明操作,内置于ACFS文件系统驱动中,上层应用程序和数据库不会感知到去重过程。当数据写入启用去重的ACFS卷时,系统会按照固定大小的块对数据进行切分,通常为4KB或8KB,然后为每个数据块计算SHA-256哈希值,这个哈希值被称为指纹(fingerprint)。ACFS维护一个卷级别的指纹索引,新写入块的指纹会先在索引中查找:如果已经存在相同指纹,系统不会重复写入该数据块,而是仅为现有块增加引用计数;如果指纹不存在,块才会真正写入物理存储,同时指纹被登记到索引中。

在Oracle RAC集群中,多个节点可能同时向同一个ACFS卷写入数据,因此去重索引必须由集群统一协调。ACFS通过ASM集群文件系统的元数据结构实现全局去重,任意节点写入的数据都能与集群中已有的指纹匹配。这意味着即使节点A写入了某个数据块,节点B随后写入完全相同的内容,也能识别为重复块并复用节点A已经落盘的物理块。这种设计对多节点并发访问非常友好,但也会带来一定程度的CPU开销,因为每个新写入块都需要计算哈希并查询索引。对于归档日志和备份文件这类写入频率相对较低、重复率较高的场景,去重收益通常远大于计算开销。

去重后的数据块在删除文件时并不会立即释放物理空间。当某个重复块的所有引用都被删除后,ACFS会将其标记为可回收,后台进程会在适当的时候完成空间回收。这种延迟回收机制避免了频繁的空间操作对在线IO造成冲击,也让短时间内创建和删除大量重复文件的场景更加高效。

在RAC集群中创建启用去重的ACFS卷

启用ACFS去重的前提是集群中所有节点都安装了相同的Oracle Grid Infrastructure版本,并且ASM实例正常运行。去重通常在创建ACFS卷时直接开启,现有卷无法直接启用去重,需要创建新卷并完成数据迁移。整个操作可以在任意一个集群节点上执行,因为ASM命令会通过集群同步到所有节点。

下面的命令通过asmcmd在名为ACFSDG的ASM磁盘组上创建一个大小为200G并且启用去重的卷,卷名为vol_acfs01:

# 创建启用去重功能的ACFS卷
asmcmd volcreate -G ACFSDG -s 200G --deduplication=on vol_acfs01

卷创建完成后,可以使用volinfo查看卷的设备路径和去重属性:

# 查看卷信息,确认去重已启用
asmcmd volinfo -G ACFSDG vol_acfs01

在Linux环境中,ACFS卷的设备路径通常为/dev/asm/vol_acfs01-数字。接下来需要在该设备上创建ACFS文件系统,并在所有RAC节点上建立相同的挂载点。为了确保集群重启后文件系统能自动挂载,还应该使用srvctl将文件系统注册到Oracle集群注册表中。一个完整的参考流程如下:

# 格式化ACFS文件系统
mkfs.acfs /dev/asm/vol_acfs01-123

# 在节点1上创建挂载点并挂载
mkdir -p /oracle/acfs01
mount -t acfs /dev/asm/vol_acfs01-123 /oracle/acfs01

# 将ACFS文件系统注册到集群,以便所有节点自动挂载
srvctl add filesystem -device /dev/asm/vol_acfs01-123 -path /oracle/acfs01 -user oracle -group dba
srvctl start filesystem -device /dev/asm/vol_acfs01-123

需要注意的是,格式化命令只需要在一个节点执行,之后其他节点通过集群文件系统可以访问同一个ACFS卷。如果已经有旧卷存放数据,应该在启用去重的新卷上重新组织目录,并将数据复制过去。不要尝试在旧卷上通过参数修改方式来开启去重,因为去重索引必须在卷创建时初始化。

监控去重效果与调整策略

启用去重后,管理员可以通过ASM实例中的V$ASM_ACFSVOLUMES视图查看卷的去重属性和状态。该视图包含卷名称、所在磁盘组、去重是否启用、压缩是否启用以及卷容量等信息。在ASM实例中执行如下查询:

SELECT volume_name, deduplication, compression, state
FROM   v$asm_acfsvolumes
WHERE  volume_name = 'VOL_ACFS01';

查询结果中DEDUPLICATION字段值为ENABLED表示去重已经生效。要评估去重实际节省的空间,一种简单方式是对比逻辑数据量和物理存储用量。在应用写入相同内容的文件之前和之后,可以通过df -h查看物理使用量的变化,如果写入大量重复数据后物理使用量增长远小于逻辑写入量,说明去重正在发挥作用。更精确的统计信息可以结合ASM磁盘组的审计视图或Oracle企业管理器中的文件系统报告来获得。

去重效果与数据特征密切相关。如果ACFS卷中主要存放随机生成的数据或加密后的文件,重复率很低,去重收益可能有限,还会额外增加哈希计算的CPU负担。相反,对于数据库逻辑备份、日志归档、开发测试环境的克隆文件等,重复率通常很高,去重可以节省50%甚至更多空间。在RAC集群中,如果多个应用节点同时向同一目录写入大量重复内容,去重的引用计数会频繁更新,可能引起少量元数据竞争。此时可以通过将写操作错峰或启用更合理的块大小来缓解,但块大小在创建卷时确定,需要提前评估工作负载。

限制条件与注意事项

ACFS去重虽然能有效节省空间,但并非所有环境都适合开启。首先,去重功能需要相应的Oracle许可,实际部署前应核实是否拥有对应的存储管理或高级压缩授权。其次,去重与ACFS压缩功能在部分版本中存在互斥关系,不能同时作用于同一个卷;即使某些版本允许同时启用,也会带来更高的CPU消耗,需要根据存储和计算资源综合判断。

在Oracle RAC环境中,启用去重的ACFS卷必须由Oracle集群统一管理,所有节点应当使用相同的挂载参数和访问权限。不能只在一个节点手动挂载去重卷,因为去重元数据需要集群范围内的锁同步,单节点离线操作可能导致索引不一致。此外,如果计划对去重卷执行快照、复制或基于存储层的备份,需要确认这些工具是否支持去重元数据和引用计数的保留。对于大多数数据库外围文件,推荐使用逻辑备份工具代替底层设备复制,这样可以避免去重元数据破坏的风险。

最后,删除重复数据文件后,物理空间不会立刻返还给ASM磁盘组,而是等待ACFS后台回收进程处理。管理员应避免在空间接近满容量时才去清理文件,因为回收过程可能需要一定时间,并且需要留出额外空间供去重索引和元数据使用。建议将ACFS卷的容量规划预留至少20%的余量,同时定期检查V$ASM_ACFSVOLUMES视图和文件系统使用率,及时发现去重效果变化。

Oracle RACACFS重复数据删除修改时间:2026-08-25 12:22:17

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。