讲师中心 微信公众号
AI工具推荐 视频效率加速

Oracle 11g 组合分区(范围-哈希)如何设计_优化高并发下的热点块竞争

大萱大大_6486

大萱大大_6486

发布时间:2026-06-06 09:30:52

|

930人浏览过

|

来源于php中文网

原创

RANGE-HASH组合分区通过两层打散缓解RAC下gc buffer busy acquire:先按时间切片避免索引右边界热块,再按user_id哈希分散写入;但要求range键单调递增、hash键高基数、子分区数为2的幂,且需合理设置边界粒度。

oracle 11g 的组合分区(如 range-hash)本身不能直接“消除”热点块竞争,但它能通过两层数据打散机制,把原本集中在单一分区/单个索引叶块的写入压力,分摊到多个物理段上——前提是范围键和哈希键都选得对、分区数设得准。

为什么 RANGE-HASH 能缓解 RAC 下的 gc buffer busy acquire?

高并发写入时出现 gc buffer busy acquire,本质是多个实例反复争抢同一数据块(比如按时间递增的 create_time 写入导致的索引右边界热块)。RANGE-HASH 把这个问题拆成两步解决:

  • 第一层(RANGE)按时间切片,避免全表索引叶块集中增长;
  • 第二层(HASH)在每个时间分区内再按业务主键(如 user_id)哈希打散,让同一批时间窗口内的写入落到不同子分区,从而分散 buffer cache 和 undo 段争用。

注意:如果范围键选的是单调递增序列(如 seq.nextval),那第一层就失效了——所有新数据仍挤在最新一个 range 分区里,HASH 层再怎么分也救不回来。

建表时 RANGE-HASH 的语法与关键约束

Oracle 11g 支持 PARTITION BY RANGE (range_col) SUBPARTITION BY HASH (hash_col),但必须满足三个硬性条件:

  • SUBPARTITIONS 数量必须是 2 的幂(如 SUBPARTITIONS 8),否则哈希分布严重倾斜——底层用 hash_value & (n-1) 定位子分区,非 2 的幂会丢失高位信息;
  • 范围分区键(range_col)必须有明确、可预测的边界,不能是表达式或函数(如 TRUNC(create_time) 不合法,需先建虚拟列);
  • 哈希子分区键(hash_col)必须高基数且唯一性强,禁用 status、is_valid 这类低基数列,否则所有数据扎堆进前几个子分区。

示例(正确):

Twitter热点监控与推文生成
Twitter热点监控与推文生成

每小时自动在推特搜索中国、加密货币、国际热点、美国热点、特朗普等话题的热度信息,提取前十热点,依据 X 平台真实算法权重(开源代码数据)为每个热点生成高曝光推文或线程。用户提及“推特热点”“Twitter热点”“推特搜索”“热点推文”“生成推文”“社交媒体监控”“Twitter监控”等关键词时触发。

下载
CREATE TABLE order_events (
  event_id    NUMBER,
  user_id     NUMBER,
  create_time DATE,
  payload     CLOB
)
PARTITION BY RANGE (create_time)
SUBPARTITION BY HASH (user_id) SUBPARTITIONS 8
(
  PARTITION p_202604 VALUES LESS THAN (DATE '2026-05-01'),
  PARTITION p_202605 VALUES LESS THAN (DATE '2026-06-01'),
  PARTITION p_max   VALUES LESS THAN (MAXVALUE)
);

已有范围分区表如何升级为 RANGE-HASH?

Oracle 11g 不支持在线将普通范围分区表直接转为组合分区。必须重建,但可避开停机全量导出导入:

  • 用 DBMS_REDEFINITION.START_REDEF_TABLE 启动在线重定义:先建新表(带 SUBPARTITION BY HASH),再映射原表数据;期间原表可读写,只在最后切换瞬间锁表;
  • 若允许短停机,更推荐 CREATE TABLE AS SELECT + RENAME + 重建索引/约束,比重定义更可控;
  • 切勿尝试 ALTER TABLE ... ADD SUBPARTITION —— Oracle 11g 明确不支持该语法,执行报错 ORA-14006: invalid SUBPARTITION name。

子分区数量设 4、8 还是 16?看写入吞吐与 key 基数

没有通用最优值,但有明确取舍逻辑:

  • 写入峰值每秒超 5000 行,且 user_id 基数 > 100 万 → 优先 SUBPARTITIONS 16,进一步降低单个子分区的 buffer cache 争用概率;
  • 若 user_id 实际只有几万唯一值,设 16 会导致大量子分区为空,浪费空间和管理开销,此时 SUBPARTITIONS 8 更稳;
  • 所有子分区必须落在不同表空间(尤其 RAC 环境),避免 I/O 层面的磁盘争用——这点常被忽略,但直接影响 gc cr grant 2-way 等等待事件。

真正容易被忽略的不是语法或参数,而是:范围分区边界的粒度要匹配业务写入节奏。比如按天分区却每小时涌入百万订单,最新分区仍会成为瓶颈;这时就得切到按小时,再配合 HASH 子分区,才能把压力真正摊薄。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

961

2023.08.16

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

2813

2023.09.15

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

2830

2023.09.18

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

1609

2023.09.19

Oracle中RAC的用法
Oracle中RAC的用法

Oracle中RAC的用法:1、通过在多个服务器上运行数据库实例来提供高可用性;2、允许在需要时增加或减少节点数量;3、通过将工作负载分布到多个节点上来实现负载均衡;4、使用共享存储来实现多个节点之间的数据共享;5、允许多个节点同时处理数据库请求,从而实现并行处理;6、提供了透明故障切换功能;7、使用了一些技术来确保数据的一致性;8、提供了管理工具来简化RAC环境的管理和维护。本专题还提供RAC相关的其他文章,大家可以免费阅读。

2233

2023.09.19

oracle imp
oracle imp

imp是Oracle数据库中的一个命令行工具,用于将导出的数据和对象从一个数据库实例导入到另一个数据库实例。imp命令的一般语法为“imp username/password@connect_string file=file_name [options]”。

2989

2023.09.19

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4489

2023.11.02

oracle通配符有哪些
oracle通配符有哪些

oracle通配符有“%”、“_”、“[]”和“[^]"。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

237

2023.11.08

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn