本文共 2362 字,大约阅读时间需要 7 分钟。
并行(Parallel)与并发(Concurrent)是Oracle数据库中的两种关键概念,但它们的应用场景和效果截然不同。
并行:将一个复杂操作分解为多个独立进程同时执行。适用于需要大量资源支持的任务,如数据分析和大规模查询。
并发:多个会话或用户同时访问数据库,通常指的是数据库连接数量(如连接数)。并发主要用于衡量数据库的性能负载。
数据库版本信息可以通过以下命令查看:
LEO1@LEO1> select * from v$version;
此时,数据库版本信息如下:
并行查询适用于以下场景:
OLAP业务模式:OLAP(Online Analytical Processing)是一种批量加载和批量检索的业务模式,常用于数据分析系统。数据仓库则是支撑这种模式的底层数据库。
系统资源相对空闲:当CPU资源充足,IO负载低且内存足够时,可以考虑并行操作,需确保资源平衡。
数据符合并行特点:操作数据没有串行化,能够拆分并分别处理。例如,统计多个区域的行数可以分给多个进程处理。
Oracle 提供三种主要方法来启用并行查询:
使用 hints
select /*+ parallel(leo1 2) */ count(*) from leo1;
临时有效。
对象级别定义并行
alter table leo1 parallel 4;
直接修改表属性,长期有效。
会话级别定义并行
alter session force parallel query parallel 4;
会话生命期内有效。
并行查询与 DML
需要启用会话级 DML 并行功能:alter session enable parallel dml;
以下是一个并行查询的执行计划示例:
select /*+ parallel(leo1,2) parallel(leo2,2) */ count(*) from leo1,leo2where leo1.object_id=leo2.object_id;
执行计划如下:
| Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time | TQ | IN-OUT | PQ Distrib |
|---|---|---|---|---|---|---|---|---|---|
| 0 | SELECT STATEMENT | 1 | 26 | 320 (1) | 00:00:04 | ||||
| 1 | SORT AGGREGATE | 1 | 26 | 26 | |||||
| 2 | PX COORDINATOR | ||||||||
| 3 | PX SEND QC (RAND) | TQ10001 | 1 | 26 | Q1,01 | P->S | |||
| 4 | SORT AGGREGATE | 1 | 26 | 26 | Q1,01 | PCWP | |||
| 5 | HASH JOIN | 72017 | 1828K | 320 (1) | 00:00:04 | Q1,01 | PCWP | ||
| 6 | PX BLOCK ITERATOR | 72017 | 914K | 160 (1) | 00:00:02 | Q1,01 | PCWC | ||
| 7 | TABLE ACCESS FULL | LEO1 | 72017 | 914K | 160 (1) | 00:00:02 | Q1,01 | PCWP | |
| 8 | PX RECEIVE | 72017 | 914K | 160 (1) | 00:00:02 | Q1,01 | PCWP | ||
| 9 | PX SEND BROADCAST | TQ10000 | 72017 | 914K | 160 (1) | 00:00:02 | Q1,00 | P->P | |
| 10 | PX BLOCK ITERATOR | 72017 | 914K | 160 (1) | 00:00:02 | Q1,00 | PCWC | ||
| 11 | TABLE ACCESS FULL | LEO2 | 72017 | 914K | 160 (1) | 00:00:02 | Q1,00 | PCWP | |
| ... | ... | ... | ... | ... | ... | ... | ... |
根据自身硬件配置,可以通过以下方法找到最优并行度:
并行度:Oracle 会启动多个并行服务进程来处理数据。一个 CPU 内核通常可以支持一个并行度。
并行度与硬件关系:并行度在不同硬件上的效果差异很大,需根据实际情况调整。
并行度与并发数:总并行数 = 并行度 × 并发数。并行度越高,总并行数越大。
Oracle 11g 引入了 parallel_degree_policy 参数,用于设置并行度策略:
manual:手动管理并行度,Oracle 不会自动调整。
limited:当直接指定并行度时继续使用,默认并行度时 Oracle 会根据资源负载自动调整。
auto:Oracle 会根据资源情况动态调整并行度,适合大多数场景。
通过实验可以发现:
通过以上示例和分析,可以看出并行查询在处理大数据量和复杂任务时大大提升性能。合理设置并行度和并行度策略,根据硬件资源和业务需求,能够最大化数据库性能。
转载地址:http://mxpfk.baihongyu.com/