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工具,而不是一个并行查询工具。