【问题标题】:Can using parallel hint improve performance of query on specified partition of table?使用并行提示可以提高对表指定分区的查询性能吗?
【发布时间】:2016-08-26 05:06:29
【问题描述】:

当我使用并行提示查询指定的分区表时是否有效?

SELECT /*+ PARALLEL(A,5)*/
    A.USER_ID
     , A.RES_TYPE
     , A.RES_ID
     , A.LIMIT_TAG
     , A.FEEPOLICY_INS_ID
     , A.FEEPOLICY_ID
     , TO_NUMBER(TO_CHAR(A.START_DATE, 'YYYYMMDDHH24MISS')) AS START_DATE
     , TO_NUMBER(TO_CHAR(A.END_DATE, 'YYYYMMDDHH24MISS')) AS END_DATE
FROM   TF_B_USER_FREECDR_HASH PARTITION(PAR_TF_B_USER_FREECDR_0) A
ORDER  BY A.USER_ID

这里是解释计划:

【问题讨论】:

  • 你的问题在哪里?
  • @Praveen Kumar 可以使用并行的 sql 语句提高性能,谢谢
  • 但是我查询了指定的分区表
  • 答案几乎肯定是“是”。分区和表之间几乎没有区别,它们都是段,可以很容易地并行化。如果该分区确实超过 800MB,那么并行性几乎肯定会有助于全表扫描。

标签: oracle performance parallel-processing query-optimization partition


【解决方案1】:

"sql 语句能否使用并行提高性能"

是的。或者没有。或者,实际上,性能可能会恶化。这真的取决于很多因素。

例如,您的服务器有多少个处理器(CPU 内核)?有多少可以使用?如果您没有可用的 CPU,则使用并行提示没有任何好处;事实上,管理并行执行的开销可能会导致结果变慢。

为什么选择并行度5?除非您可以保证有五个可用的 CPU 来同时运行五个线程,否则当其他线程正在运行时,您将让线程无所事事。 2 的幂更有意义(2、4、8 等)。

"cpu 数为 120"

这就是您可以使用的数量。根据实际工作量,您可能无法在需要时获取五个。不过,胜算还是不错的。

现在,关于并行是否会对您的实际查询产生任何影响,我们很难说。解释计划显示优化器将尝试并行执行,但没有显示您是否会从中受益。

显然,在所有条件相同的情况下,将大型作业拆分为多个流并同时运行它们应该会减少总运行时间。事情并不总是这样。所以,试着对你的陈述进行基准测试,有或没有并行提示。查询V$PQ_TQSTAT 看看会发生什么。 (您可能需要友好的 DBA 授予您对该视图的权限。)

【讨论】:

  • cpu计数为120
猜你喜欢
  • 2016-04-06
  • 2019-04-17
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 2013-08-03
相关资源
最近更新 更多