Bootstrap

ORACLE 的并行执行

1.并行查询

例如:SELECT COUNT(*) FROM BIG_TABLE;

未设置并行查询时,这个查询是典型的串行查询,不设计并行化,可以用:SELECT * FROM BIG_TABLE(DBMS_XPLAN.DISPLAY);

查看一下执行计划。

启用并行查询方法多种,可直接在查询中使用一个提示,或者修改表,要求考虑并行执行路径(在此,我会使用后一种)。

可以具体指定这个表的执行路径中要考虑的并行度,如,可以告诉ORACLE:"我希望你在创建该表的执行计划时使用并行度4":

ALTER TABLE BIG_TABLE PARALLEL 4;

但,我更喜欢告诉ORACLE:“请考虑并行执行,但你要根据当前的系统工作负荷和查询本身来确定适当的并行度”。就是说,并行度要随着系统上工作负荷的增减而变化。如果有充分的空闲资源,并行度就会上升;如果可用资源有限,并行度就会下降。这样就避免为机器强加一个固定的并行度。利用这种方法,允许ORACLE动态地增加或减少查询锁徐的并发资源量。

因此,可以修改该表的并行查询为:
ALTER TABLE BIG_TABLE PARALLEL;

 

要记住并行查询要保证两个前提:

(1)你需要执行一个大任务,如,一个长时间运行的查询,这个查询是以分钟,小时或天为单位,而不是秒或次秒。这就是说,并行查询不能作为OLTP系统的解决方案,因为在OLTP系统中你不会执行长时间运行的任务。这些系统中启用并行运行通常是灾难性的。

(2)你需要有充足的空闲资源,如,CPU,I/O和内存。如果缺少任何一种资源,并行查询可能会过度使用资源,这就会负面的影响总体性能和运行时间。

过去,对于许多数据仓库来说,人民总认为必须应用并行查询,这是因为过去数据仓库很稀少,通常只是一个很小,很集中的用户群。而,现在,到处都有数据仓库,且数据仓库的用户群和事务性系统的用户群同样庞大。这说明,在给定时刻,你可能没有足够的空闲资源来启用这些系统上的并行查询。但这并不能说明并行执行通常没有用,而是说,并行执行更应该是一个DBA工具,而不是一个并行查询工具。

 

;