我在Oracle 11gR2数据库上运行来自TOAD的查询。在查询运行时(根据并行性需要60到400秒),我从TOAD的会话浏览器中检查其状态,并且我意识到在执行期间,当我第一次查看会话时,可以更改并行度浏览器似乎查询具有16个并行度,当我刷新屏幕时它可能变为8,或2或1.或者它可能会增加到32。
是否有一种机制可以在Oracle上运行时更改查询的并行度,或者在显示并行度会话时是否出现TOAD错误?
答案 0 :(得分:2)
可以从Oracle数据库请求特定的并行度(DOP)。例如,您可以在表或索引级别设置固定DOP:
例如:
ALTER TABLES sales PARALLEL 8;
ALTER TABLE customers PARALLEL 4;
在这种情况下,仅访问sales表的查询使用请求的DOP为8,查询访问customers表请求的DOP为4.访问sales和customers表的查询使用DOP 8进行处理分配16个并行服务器(生产者或消费者);无论何时指定不同的DOP,Oracle数据库都使用较高的DOP。
如果指定了PARALLEL子句但未列出任何并行度,则该对象将获得默认DOP。默认并行性使用公式根据系统配置确定DOP,如下所示:
对于单个实例,
DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT
对于Oracle RAC配置,
DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT x INSTANCE_COUNT
默认情况下,INSTANCE_COUNT
是群集中的所有节点。但是,如果您使用Oracle RAC服务来限制并行操作可以执行的节点数,则参与节点的数量是属于该服务的节点数。例如,在4节点Oracle RAC集群上,每个节点具有8个CPU核心且没有Oracle RAC服务,default DOP would be 2 x 8 x 4 = 64
。
默认DOP算法旨在使用最大资源,并假设如果操作可以使用更多资源,则操作会更快完成。默认并行性针对单用户工作负载。在多用户环境中,不建议使用默认并行性。
优化器根据语句的资源要求自动确定语句的DOP。优化程序使用执行计划中所有扫描操作(全表扫描,索引快速完全扫描等)的成本来确定语句所需的DOP。
但是,优化器会限制实际的DOP,以确保并行服务器进程不会压倒系统。此限制由参数PARALLEL_DEGREE_LIMIT.
为了简洁,我在这里列出了重要的部分。
所有这些以及更多的官方Oracle文档 -
http://docs.oracle.com/cd/E11882_01/server.112/e25523/parallel002.htm#BEICCFIE
这是一个非常有趣的设置,我建议你完成整个过程,因为它非常有用
答案 1 :(得分:2)
我认为你在这里看到的是不同程度的并行性,因为查询中的不同操作都有自己的程度。扫描不同的表将涉及不同的度数,并且基于连接的结果集的合并可以具有与连接本身不同的程度。
经常被遗忘的一个问题是PQ从站的数量通常是查询并行度的两倍,因为读取表是在表的D.o.P中执行的。但是为了消耗行可能需要另一组从属(例如,对于聚合)。