在步骤中的每一个进程都有相同数量的工作要做时,并行处理的效果最好。如果一个伺服进程比另一个进程有更多的工作要做,“空闲”进程将要等待“繁忙”进程,而且我们不会获得与为该SQL工作的进程数量相应的性能提升。 Oracle采用的大部分算法都是为达成均衡的数据分配而设计的,这些算法包括“HASH”,“ROUND ROBIN”和“RANDOM”分布机制。然而,当执行排序操作时,Oracle不能使用这些随机的或者伪随机的机制。
相反,Oracle必须基于排序字段列分配数据给伺服进程。我们在图12-2中看到的例子,一个并行进程提取从A到K的行,给一个伺服进程来排序,从L到Z行给了另一个进程。 如果在……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
在步骤中的每一个进程都有相同数量的工作要做时,并行处理的效果最好。如果一个伺服进程比另一个进程有更多的工作要做,“空闲”进程将要等待“繁忙”进程,而且我们不会获得与为该SQL工作的进程数量相应的性能提升。
Oracle采用的大部分算法都是为达成均衡的数据分配而设计的,这些算法包括“HASH”,“ROUND ROBIN”和“RANDOM”分布机制。然而,当执行排序操作时,Oracle不能使用这些随机的或者伪随机的机制。相反,Oracle必须基于排序字段列分配数据给伺服进程。我们在图12-2中看到的例子,一个并行进程提取从A到K的行,给一个伺服进程来排序,从L到Z行给了另一个进程。
如果在排序列的数据分配非常不平衡,这种分配可能就是不均衡的。例如,请看下面这个简单的查询:
SQL> EXPLAIN PLAN FOR SELECT /*+ parallel */ cust_last_name, cust_first_name, cust_year_of_birth FROM customers ORDER BY CUST_LAST_NAME; |
在前面的步骤五,Oracle从一组伺服进程到另一组分配数据,基于排序列包含的值范围进行。如果数据分布良好,一切就都很好。然而,如果数据分配严重倾斜(可能我们的数据中有数量特别大的Smiths和Zhangs),对伺服进程的数据分布可能就不均衡了。例如,下面的“V$PQ_TQSTAT”输出展示了这样一种不平衡分布,一个伺服进程分配的数据是另一个的两倍(我故意倾斜分布客户姓氏来做到这一点的):
SQL> SELECT dfo_number, tq_id, server_Type, MIN (num_rows), MAX (num_rows), COUNT ( * ) dop FROM v$pq_tqstat GROUP BY dfo_number, tq_id, server_Type ORDER BY dfo_number, tq_id, server_type DESC; |
不幸的是,对于这种数据分布倾斜我们可能也无能为力。Oracle在并行伺服进程之间分配数据行时,似乎没有把数据平行分布考虑进来。如果行分布看起来特别的不平衡,你可以考虑改变DOP或者审查该SQL是否真的适合并行处理。
有效的并行机制依赖于跨并行伺服进程均衡的处理分布。“V$PQ_TQSTAT”使你可以计算跨并行伺服进程的负责均衡效率。
作者
翻译
相关推荐
-
表征数据库性能问题的三个指标
即使数据库结构定义和SQL代码编写非常完美,应用程序性能都可能下降。如果性能问题不能得到及时纠正,那么就可能为公司带来很大的损失。
-
SAP HANA数据存储:传统硬盘的瓶颈问题
本文选自《Implementing SAP HANA》,主要探讨了基于传统磁盘的数据库性能问题,以及我们如何解决这一问题。
-
大数据查询怎样才能避免越来越慢?
随着积累的数据越来越多,内部用户和分析师会执行更多的报表和预报。这些都会导致额外的查询、分析及报表。
-
大数据时代我们是否还需要数据库设计?
良好的数据库设计是系统和应用程序设计的一部分。很多的业务需求,如数据可用性,清理处理,还有应用性能都可以利用特定的数据库设计加以解决。