
一、开篇1亿行的全表扫描如何从30分钟降到30秒某数据仓库的日报SQL需要扫描1亿行的销售事实表通常执行时间超过30分钟。font color#D32F2FDBA在SQL中加了一个Hint/ PARALLEL(8)/执行时间骤降到30秒——速度提升了60倍。/font这就是Oracle并行查询的威力。font color#1976D2它将一个大的SQL任务拆分成多个小的子任务由多个并行进程PX Servers同时执行充分利用多核CPU和I/O带宽。/font本篇文章从并行查询的架构原理、并行度配置、数据分发机制、并行DML/DDL到调优策略全面覆盖Oracle并行查询的知识体系。二、并行查询架构全景图结果汇总数据分发并行进程池用户会话Hash分发Round-RobinRange分发用户进程查询协调器 QC并行进程集1并行进程集2P000-生产者P001-消费者P002-消费者P003-生产者P004-消费者P005-消费者表数据分区1表数据分区2表数据分区3结果集1结果集2结果集3结果集4关键角色解读font color#D32F2F红色QC/font 查询协调器负责调度和结果汇总。font color#1976D2蓝色PX Servers/font 并行执行服务器实际干活的进程。font color#F57C00橘色数据分发/font 生产者将数据分发给消费者的机制。三、并行查询的核心概念1. font color#D32F2F并行查询的本质定义/font精确描述并行查询将单个SQL操作拆分为多个子操作font color#1976D2由多个并行执行服务器进程PX Servers同时执行充分利用多核CPU和I/O带宽最后将结果汇总返回给用户。/font2. font color#1976D2并行度的确定方式/font| 优先级 | 确定方式 | 示例 ||--------|----------|------|| 1-最高 | SQL Hint |/ PARALLEL(8)/|| 2 | 会话级别 |ALTER SESSION FORCE PARALLEL QUERY PARALLEL 8|| 3 | 对象级别 |ALTER TABLE orders PARALLEL 8|| 4 | 自动并行度 |PARALLEL_DEGREE_POLICY AUTO|| 5-最低 | 默认 | 无并行 |3. font color#F57C00并行进程配置/font-- 查看并行进程配置 SHOW PARAMETER parallel_max_servers; SHOW PARAMETER parallel_min_servers; -- 设置并行进程数量 ALTER SYSTEM SET parallel_min_servers 8; ALTER SYSTEM SET parallel_max_servers 64; -- 查看当前活跃的并行进程 SELECT server_name, status, degree FROM v$px_process WHERE status IN USE;四、并行查询的数据分发机制1. font color#1976D2四种数据分发方式/font并行全表扫描数据分发方式Round-Robin轮询Hash哈希分发Range范围分发Broadcast广播每个PX进程轮流接收块按连接键哈希值分发按排序键范围分发将完整小表广播给所有进程适用: 无后续操作的扫描适用: 并行哈希连接适用: 并行排序合并连接适用: 小表连接大表四种分发方式详解| 分发方式 | 说明 | 适用场景 ||----------|------|----------||Round-Robin| 轮流分发每个进程获得数量相近的块 | 无后续操作的扫描 ||Hash| 按某个列的哈希值分发 | font color#D32F2F并行哈希连接/font ||Range| 按排序键的范围分发 | 并行排序合并连接 ||Broadcast| 将完整表复制给所有进程 | font color#1976D2小表广播/font |2. font color#F57C00查看并行执行计划/fontEXPLAIN PLAN FOR SELECT /* PARALLEL(4) */ dept_id, COUNT(*), SUM(salary) FROM emp GROUP BY dept_id; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);关键并行操作解读| 操作 | 含义 ||------|------||PX COORDINATOR| 查询协调器QC进程 ||PX SEND QC (RANDOM)| PX进程将结果发送给QC ||PX RECEIVE| PX进程接收数据 ||PX SEND HASH| 按HASH方式分发数据 ||PX BLOCK ITERATOR| 以块为单位迭代扫描 ||TQ (Table Queue)| 并行进程间传递数据的管道 |五、并行查询的配置方式1. font color#1976D2SQL Hint方式最灵活/font-- 指定并行度8 SELECT /* PARALLEL(orders, 8) */ * FROM orders; -- 对整个语句使用并行度4 SELECT /* PARALLEL(4) */ o.*, c.name FROM orders o JOIN customers c ON o.cust_id c.cust_id; -- 禁用并行 SELECT /* NO_PARALLEL(orders) */ * FROM orders;2. font color#F57C00会话级别设置/font-- 强制会话中所有查询使用并行度8 ALTER SESSION FORCE PARALLEL QUERY PARALLEL 8; -- 恢复默认 ALTER SESSION DISABLE PARALLEL QUERY;3. font color#388E3C对象级别设置/font-- 为表设置默认并行度 ALTER TABLE orders PARALLEL 8; -- 取消表的并行设置 ALTER TABLE orders NOPARALLEL;六、并行DML与并行DDL1. font color#D32F2F并行DML/font-- 必须显式启用并行DML ALTER SESSION ENABLE PARALLEL DML; -- 并行INSERT INSERT /* PARALLEL(archive_orders, 8) */ INTO archive_orders SELECT /* PARALLEL(orders, 8) */ * FROM orders WHERE order_date SYSDATE - 365; COMMIT;2. font color#1976D2并行DDL/font-- 并行创建索引 CREATE INDEX idx_orders_date ON orders(order_date) PARALLEL 8; -- 创建完成后取消并行度 ALTER INDEX idx_orders_date NOPARALLEL; -- 并行创建表 CREATE TABLE orders_archive PARALLEL 8 AS SELECT * FROM orders WHERE order_date SYSDATE - 365;七、并行度调优策略1. font color#D32F2F并行度计算公式/font基于CPUDOP CPU_COUNT × PARALLEL_THREADS_PER_CPU 基于I/ODOP 数据文件所在磁盘组的总磁盘数 × 2 建议 OLAP/DSSDOP CPU核心数 × 1~2 OLTPDOP CPU核心数 × 0.5~12. font color#F57C00并行度调优常见问题/font| 问题 | 症状 | 解决方案 ||------|------|----------|| 并行度过高 | CPU上下文切换频繁 | 降低并行度 || 并行度过低 | 空闲CPU多 | 增大并行度 || 并行进程不足 |PX: unable to allocate| 增大parallel_max_servers |3. font color#388E3C监控并行执行/font-- 查看并行进程使用峰值 SELECT statistic, value FROM v$px_process_sysstat WHERE statistic IN (Servers Highwater, Servers In Use); -- 查看并行SQL的实时监控 SELECT sql_id, status, sql_plan_operation || || sql_plan_options AS operation, output_rows, elapsed_time/1000000 AS elapsed_sec FROM v$sql_monitor WHERE px_servers_requested 0;八、总结记住这个“搬砖”类比就够了font color#1976D2【并行查询 多个人一起搬砖】/fontQC查询协调器font color#D32F2F工头分配任务、汇总结果。/fontPX进程font color#1976D2搬砖工人每个人搬一堆砖。/font并行度DOPfont color#F57C00工人的数量。人太多会互相撞到人太少效率不高。/font数据分发font color#388E3C工头把砖分给不同工人。/font并行DMLfont color#D32F2F多人同时搬砖入库需要协调不冲突。/fontfont color#1976D2合理使用并行查询可以在不增加硬件成本的情况下大幅提升大数据量操作的性能。但并行是一把双刃剑——过度并行会导致CPU争用反而降低整体性能。/font你在生产环境中常用的并行度是多少是否遇到过并行进程不足的问题欢迎评论区分享你的调优经验。