Oracle Parallel Query(OPQ)

本文详细介绍了Oracle Parallel Query(OPQ)的功能与应用场景,包括如何通过不同级别的配置实现并行查询,以及可能遇到的局限性和调整方法。此外,还提供了与OPQ相关的数据字典视图和一些特殊场景下的使用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日月明王BLOG   http://sunmoonking.spaces.live.com
     Oracle Parallel QueryOPQ)可以将一个SQL statement分成多个片( chunks) ,然后在独自的CPU上通过多个process进行并行运行。典型的应用是:full table scans, creating or rebuilding an index one or more partitions of an indexPartition operations such as moving or splitting partitionsCREATE TABLE AS SELECT   operations  if the SELECT involves a full table or partition scan INSERT INTO . . . SELECT operations, if the SELECT involves a full table or partition scan Update and delete operations on partitioned tablessorts, sub_queries, data loading.
      而另一个PARALLEL的概念是Parallel Server ClustersRAC),是利用Clustered 环境的multi-node来达到性能上的总体提高。通常用在一个非常大的数据库应用中。不在本次讨论之列。
一:INIT.ORA相关参数
PARALLEL_MIN_SERVERS
PARALLEL_MAX_SERVERS
PARALLEL_AUTOMATIC_TUNING=TRUE    ORACLE会尽量使用PARALLEL
二:OBJECT级启用OPQ
ALTER  TABLE /INDEX XXX PARALLEL DEGREE 8
OR
STATEMENT
SELECT   --+ PARALLEL table_alias, degree, nodes from table …..
/*+ FULL(emp) PARALLEL(table_alias, 35) */
三:表级停止OPQ
ALTER   TABLE/INDEX  XXX  PARALLEL DEGREE 1  INSTANCES 1
OR
ALTER  TABLE/INDEX  XXX   NOPARALLEL
四:INSTANCE
Alter table customer parallel degree 35;
五:局限
Paralle Query并不一定是最好的,尤其是武断的把所有TABLE都设置成Paralle Query更是危险的,因为CBO会改变评估标准而尽量使用parallel full-table scans而不是index scans。因为CBO认为parallel full-table scancostfull-table scan低,所以如果非要这么做,那么需要调整optimizer_index_cost_adj。此值默认是1000,如果调整为10则基本都会用INDEX,那么可以调整为小于1000的某个值,然后及时监控性能并再作调整。
相关数据字典
select * from v_$pq_sysstat;
select * from v_$px_process;
select * from v_$px_sesstat;
select * from v_$px_process_sysstat;
七:其他OPQ用法
SQLLDR   SQLLOAD scott/tiger CONTROL=con1.ctl DIRECT=TRUE PARALLEL=TRUE
Parallel Recovery 1RECOVERY_PARALLELISM
             2RECOVER TABLESPACE tab PARALLEL (DEGREE 4);
                RECOVER DATABASE PARALLEL (DEGREE DEFAULT);
八:名词解释
InstanceSpecifies the number of instances to use(除非在OPS环境,否则只需要设置为1,其他的都是无意义的)
DEGREE: Specifies the number of slave processes to use on each instance
以下是一个简单的Oracle Parallel Query的例子,使用Parallel Query来加速一个大型数据表的查询操作: 假设我们有一个名为"employees"的数据表,其中包含了大量的员工信息。我们需要查询薪水大于10000的员工信息,并按照薪水倒序排列。该查询语句如下: ``` SELECT * FROM employees WHERE salary > 10000 ORDER BY salary DESC; ``` 为了使用Parallel Query加速该查询操作,我们可以使用以下步骤: 1. 创建表的分区(如果尚未创建)。可以使用以下语句创建一个月份为分区键的分区表: ``` ALTER TABLE employees ADD PARTITION BY RANGE (hire_date) ( PARTITION employees_jan VALUES LESS THAN (TO_DATE('01-FEB-2019', 'DD-MON-YYYY')), PARTITION employees_feb VALUES LESS THAN (TO_DATE('01-MAR-2019', 'DD-MON-YYYY')), PARTITION employees_mar VALUES LESS THAN (TO_DATE('01-APR-2019', 'DD-MON-YYYY')), ... ); ``` 2. 开启Parallel Query特性。可以使用以下语句开启Parallel Query特性: ``` ALTER SESSION ENABLE PARALLEL DML; ``` 3. 执行查询操作。可以使用以下语句执行查询操作: ``` SELECT /*+ PARALLEL(employees,4) */ * FROM employees WHERE salary > 10000 ORDER BY salary DESC; ``` 其中,PARALLEL(employees,4)表示将查询操作拆分为4个并行子操作,可以根据实际情况调整并行度。 通过使用Parallel Query,我们可以利用多个CPU和多个数据流,从而加速查询操作的执行。需要注意的是,Parallel Query使用需要根据实际情况进行评估和调优,以确保获得最佳的性能优势。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值