如何选择Oracle RAC集群ASM磁盘组的stripe size?

来源:NET教程网作者:勇士头衔:草根站长
导读:本期聚焦于勇士创作的《如何选择Oracle RAC集群ASM磁盘组的stripe size?》,敬请观看详情。ASM磁盘组的条带尺寸决定了一次I/O请求在多个磁盘之间如何切分和轮转,但这个值不是直接设置一个stripe size参数就能完成的。Oracle ASM把分配单元AU作为粗粒度条带基础,默认1MB;控制文件、联机日志等需要低延迟的文件则采用固定128KB的细粒度条带,数据文件、归档日志默认走AU级粗粒度条带。RAC集群中多实例同时读写同一磁盘组,如果AU选得过大,小事务容易被单个节点和单块盘拖住;如果AU过小,顺序扫描又会产生更高元数据开销和跨盘碎片。判断合适尺寸要结合OLTP与DSS负载、文件模板以及ASM兼容性版本,而不是照搬存储端RAID条带参数。

规划Oracle RAC共享存储时,ASM磁盘组的条带大小经常被拿来跟RAID控制器的条带深度做对比,但两者控制路径完全不同。ASM侧没有独立的stripe size参数,真正影响条带粒度的是磁盘组AU_SIZE和文件模板的STRIPE属性。一个外部冗余磁盘组默认AU_SIZE为1MB,数据文件按1MB粗粒度条带轮转,控制文件和联机日志则以固定128KB细粒度条带分布。后续如果需要改变数据文件的条带行为,往往不是改一个参数,而是要重新规划磁盘组AU_SIZE。

如何选择Oracle RAC集群ASM磁盘组的stripe size?

一、AU、extent与stripe size不是一回事

ASM把每块磁盘划分为多个分配单元,也就是AU。一个数据文件在磁盘组中占用的空间由若干个extent组成,每个extent通常映射到一个AU。粗粒度条带下,extent的大小就是AU_SIZE,因此文件在多块盘上按AU为单位轮转写入。以默认1MB AU为例,如果一个数据文件连续分配了100个extent,就会分布在多块盘上,每块盘承担若干个1MB片段。这个1MB不是由存储端RAID决定的,而是ASM在创建磁盘组时固化下来的分配策略。

细粒度条带与粗粒度存在明显差异。ASM会把一个AU继续拆成8个128KB的写入单元,适用于控制文件、联机日志这类对延迟敏感的文件。即使磁盘组AU_SIZE调整到4MB,细粒度条带依然保持128KB,不会随之变成512KB。之所以这样设计,是因为控制文件和日志文件通常很小,却需要更均匀地分散到多个磁盘,避免单个磁盘成为性能瓶颈。

通过如下SQL可以查询当前磁盘组AU大小和模板条带属性:

SELECT name, allocation_unit_size, sector_size, type
FROM v$asm_diskgroup
ORDER BY name;

SELECT group_number, name, stripe, redundancy
FROM v$asm_template
WHERE group_number > 0
ORDER BY group_number, name;

第一条SQL中的ALLOCATION_UNIT_SIZE单位是字节,默认值为1048576,即1MB。第二条SQL中的STRIPE列为FINE时表示细粒度条带,为COARSE时表示粗粒度条带。大多数环境中查询结果会显示DATAFILE和ARCHIVELOG模板为COARSE,而CONTROLFILE、ONLINELOG模板为FINE。这个结果直接说明:只有文件模板使用FINE,才会应用128KB条带;普通数据文件走的是AU级粗粒度条带。

二、OLTP与DSS负载下如何选择AU_SIZE

RAC环境最大的特点是多个实例通过缓存融合同时读写同一份数据。OLTP负载以小事务、随机读和频繁提交为主,往往并发很高,但每次I/O的数据量不大。如果数据文件使用过大的AU_SIZE,比如8MB或16MB,一个extent覆盖的物理区间会很大,容易在少量磁盘上形成较长时间的顺序占用。对于高并发小I/O来说,更理想的是让请求尽量均匀分散到多块盘上,所以OLTP核心库通常保留默认1MB AU,并把控制文件、联机日志放在独立的低延迟磁盘组中。

数据仓库或报表库正好相反。大表扫描、批量加载、并行查询通常产生连续的1MB到几十MB读取请求。较大的AU_SIZE可以减少extent数量,进而降低ASM元数据块大小和文件映射查询成本。对于这种场景,可以考虑创建AU_SIZE为4MB的独立磁盘组,把历史分区、事实表索引和归档日志放进去。但需要注意,AU_SIZE创建后不能在线修改,必须新建磁盘组并通过RMAN或者Transportable Tablespace迁移数据。

下表给出一个常见参考:

场景AU_SIZE数据文件模板效果
高并发OLTP1MBCOARSE减少单盘热点,元数据适中
混合负载2MBCOARSE兼顾扫描与事务
数据仓库4MBCOARSE顺序扫描更连续,extent更少
控制文件/日志任意FINE固定128KB细粒度条带

这里有一个常见误区:把AU_SIZE调大后,以为联机日志也会变成大条带。实际上ONLINELOG模板的STRIPE属性是FINE,仍然使用128KB条带。所以如果日志组存在高延迟问题,需要检查的是日志组数量、成员分布和磁盘响应能力,而不是试图通过扩大AU_SIZE解决。

三、Windows RAC中创建和验证磁盘组条带配置

Windows平台上的Oracle RAC仍然可以使用ASM,不过磁盘发现路径与Linux不同。Windows通常使用设备路径\\.\ORCLDISK1这种形式来表示ASM候选盘。创建磁盘组时同样通过ATTRIBUTE设置AU_SIZE,示例如下:

CREATE DISKGROUP DATA_NEW
EXTERNAL REDUNDANCY
DISK '\\.\ORCLDISK3' NAME DISK3
ATTRIBUTE
  'au_size' = '4M',
  'sector_size' = '4096',
  'compatible.asm' = '12.2.0.0',
  'compatible.rdbms' = '12.2.0.0';

注意DISK路径中的反斜杠必须按Windows设备名原样书写,如果写成正斜杠或省略为ORCLDISK3会导致ASM无法发现磁盘。AU_SIZE一旦随磁盘组创建,就不能通过ALTER DISKGROUP在线调整。如果原磁盘组已经使用1MB AU,要改成4MB,只能新建DATA_NEW磁盘组,再使用RMAN copy或restore as方式迁移文件。

创建完成后,可以通过以下SQL确认条带相关属性:

SELECT name, allocation_unit_size, sector_size
FROM v$asm_diskgroup
WHERE name = 'DATA_NEW';

SELECT file_number, name, type, blocks, bytes
FROM v$asm_file
WHERE group_number =
      (SELECT group_number FROM v$asm_diskgroup WHERE name = 'DATA_NEW')
ORDER BY type;

如果磁盘组中既有数据文件又有联机日志,建议分别检查对应模板的STRIPE列。只要控制文件和日志文件的模板保持FINE,它们的细粒度条带就固定为128KB,AU_SIZE修改只影响COARSE模板文件。

四、条带策略与容错、rebalance的关系

ASM条带大小不是孤立参数,它还和冗余度、磁盘数量、rebalance操作有关。外部冗余磁盘组没有镜像副本,粗粒度条带只分配一份extent。正常冗余磁盘组会有主副本和镜像副本,同一个文件不同副本落在不同故障组。此时一个1MB的主extent可能对应另一个故障组上的1MB镜像extent,但细粒度文件仍然在每个副本组内以128KB交错分布。

在添加或删除磁盘时,ASM通过rebalance重新分配extent。AU_SIZE越大,每次rebalance移动的粒度越大,单次调整可能更高效,但也会带来更大的写放大。对于正在使用传统机械盘的RAC环境,4MB AU的rebalance可能会造成明显的I/O争用,建议在业务低峰期控制rebalance power,而不是简单地用默认并行度执行。

此外,ASM的条带行为与Oracle数据库块的读写路径并不是同一层。即使数据文件被分散到多块盘,Oracle一次物理读通常仍以一个或多个数据块为单位,而不是一定一次读完整个AU。将AU设定为4MB只是决定extent的分配粒度,不能替代SQL优化、索引设计和I/O调度。因此,规划条带大小时要结合数据库块大小、表空间分配方式以及ASM磁盘组的物理盘数量一起评估。

Oracle RACASM磁盘组stripe size修改时间:2026-10-01 03:11:21

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