今天又加班,憋屈的要死。

正无聊呢,同事过来问我个问题,为什么他通过HINT为查询指定了并行度5,但执行计划里却没有期待中的并行操作。这小子自从听我说了有并行这个东西后,对并行简直着了迷。

原语句如下:

select count(distinct aac001) from ac04;

执行计划显示用到了AAC001字段上的索引,ORACLE为这个语句评估出来的cost是178。

看看采用并行度5的cost是多少。

explain plan for select /*+ full(ac04) parallel(ac04 5) */ count(distinct aac001) from ac04;

发现ORACLE评估出来的cost是431。

并行度5的cost 431> 正常索引的cost 178,因此CBO评估出并行的代价比较大,因此没有采用并行。

我试着加大并行度到10:

explain plan for select /*+ full(ac04) parallel(ac04 10) */ count(distinct aac001) from ac04;

这个时候ORACLE评估出来的cost只有141了。

并行度10的cost 141< 正常索引的cost 178,这个时候应该走并行了吧。

然后我让他按照并行度10进行查询,看看如何,这个时候ORACLE采用了并行查询。其实大著Troubleshooting Oracle Performance 这本书里对这块有详细的说明the query optimizer

considers execution plans with and without parallel processing and, as usual, picks out

the one with the lower cost:

SQL> EXPLAIN PLAN SET STATEMENT_ID 'dop1' FOR

2 SELECT /*+ full(t) parallel(t 1) */ * FROM t WHERE id > 90000;

SQL> EXPLAIN PLAN SET STATEMENT_ID 'dop2' FOR

2 SELECT /*+ full(t) parallel(t 2) */ * FROM t WHERE id > 90000;

SQL> EXPLAIN PLAN SET STATEMENT_ID 'dop3' FOR

2 SELECT /*+ full(t) parallel(t 3) */ * FROM t WHERE id > 90000;

SQL> EXPLAIN PLAN SET STATEMENT_ID 'dop4' FOR

2 SELECT /*+ full(t) parallel(t 4) */ * FROM t WHERE id > 90000;

SQL> SELECT statement_id, cost

2 FROM plan_table

3 WHERE id = 0

4 ORDER BY statement_id;

STATEMENT_ID COST

------------- -----

dop1 430

dop2 238

dop3 159

dop4 119

可以看到随着并行度的加大,cost在逐渐的变小。再看看正常不加并行的cost

SQL> SELECT * FROM t WHERE id > 9000;

---------------------------------------------------------

| Id | Operation | Name | Cost (%CPU)|

---------------------------------------------------------

| 0 | SELECT STATEMENT | | 178 (0)|

| 1 | TABLE ACCESS BY INDEX ROWID| T | 178 (0)|

| 2 | INDEX RANGE SCAN | I | 24 (0)|

---------------------------------------------------------

正常不加并行的cost 178 < 并行度1 和并行度2 时候的cost,因此如果你采用并行度为1或2的时候,并行不会起作用。

SQL> SELECT /*+ parallel(t 2) */ * FROM t WHERE id > 90000;

---------------------------------------------------------

| Id | Operation | Name | Cost (%CPU)|

---------------------------------------------------------

| 0 | SELECT STATEMENT | | 178 (0)|

| 1 | TABLE ACCESS BY INDEX ROWID| T | 178 (0)|

| 2 | INDEX RANGE SCAN | I | 24 (0)|

---------------------------------------------------------

正常不加并行的cost 178 > 并行度3 和并行度4 时候的cost,因此如果你采用并行度为3或4,并行会起作用了。

SQL> SELECT /*+ parallel(t 3) */ * FROM t WHERE id > 90000;

------------------------------------------------------

| Id | Operation | Name | Cost (%CPU)|

------------------------------------------------------

| 0 | SELECT STATEMENT | | 159 (0)|

| 1 | PX COORDINATOR | | |

| 2 | PX SEND QC (RANDOM)| :TQ10000 | 159 (0)|

| 3 | PX BLOCK ITERATOR | | 159 (0)|

| 4 | TABLE ACCESS FULL| T | 159 (0)|

------------------------------------------------------

还有个小tips跟大家分享,如果正常的查询,执行计划中用到了index fast full scan,你如果想使用并行的话,可以通过hint parallel_index来,而不要通过parallel来,后者会选择全表扫描的。而index range scan就没办法了,这个操作是不能并行的,想并行的话貌似只能通过hint parallel,全表扫描来进行并行。

oracle 索引并行 hint,并行HINT并不一定起作用。相关推荐

  1. oracle hint禁用索引,【轉】Oracle索引HINT的使用

    在SQL的查詢過程中,索引是快速查詢數據的方法之一,是最重要.最常見的手段,這篇文章將討論和索引相關的HINT的使用. 1.HINT的使用方法: select /*+ INDEX (tab pk_ta ...

  2. hint oracle qbname_ORACLE SQL优化器HINT介绍

    在适当的时候使用提示HINT 为以下项指定提示HINT: 优化程序模式 查询转换 访问路径 联接顺序 联接方法 优化程序提示HINT:概览 优化程序提示HINT: 影响优化程序的决定 示例: SELE ...

  3. Oracle 索引扫描的五种类型

    之前在讨论CBO和RBO的时候提到了索引扫描的几种类型. Oracle Optimizer CBO RBO http://blog.csdn.net/tianlesoftware/archive/20 ...

  4. oracle建立覆盖索引,oracle索引类型及扫描方式大整理

    oracle索引类型及扫描方式大整理 1. 存储类型 索引在各种关系型数据库系统中都是举足轻重的组成部分,其对于提高检索数据的速度起至关重要的作用.在Oracle中,索引基本分为以下几种:B*Tree ...

  5. [转载]oracle索引的简单总结

    原文地址:oracle索引的简单总结作者:kindle 一.索引的概念: 数据库的索引类似于书籍的索引.在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息.在数据库中,索引也允许数据库程 ...

  6. Oracle索引扫描四大类的分析

    学习Oracle时,你可能会遇到Oracle索引扫描问题,这里将介绍Oracle索引扫描问题的解决方法,在这里拿出来和大家分享一下.根据索引的类型与where限制条件的不同,有4种类型的Oracle索 ...

  7. Oracle教程之分析Oracle索引扫描四大类

       学习Oracle时,你可能会遇到Oracle索引扫描问题,这里将介绍Oracle索引扫描问题的解决方法,在这里拿出来和大家分享一下.根据索引的类型与where限制条件的不同,有4种类型的Orac ...

  8. Oracle索引技术pdf

    下载地址:网盘下载 内容介绍 编辑 正确使用Oracle数据库的索引不仅可以实现良好的性能,更重要的是能够创造出可伸缩的数据库应用程序.本书在介绍各种类型索引的过程中,始终围绕性能这一主线,透彻分析了 ...

  9. Oracle索引梳理系列(九)- 浅谈聚簇因子对索引使用的影响及优化方法

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  10. 各种Oracle索引类型介绍

    各种Oracle索引类型介绍 逻辑上: Single column 单行索引 Concatenated 多行索引 Unique 唯一索引 NonUnique 非唯一索引 Function-based函 ...

最新文章

  1. linux系统性能监控命令uptime(六)
  2. Ironic 的 Rescue 救援模式实现流程
  3. 【原创】存储器设计思想——冯诺依曼结构和哈佛结构
  4. token干什么用_浅谈Token理解运用
  5. 使用SpringBoot Admin监控SpringCloud微服务
  6. 版本控制工具历史的10个里程碑
  7. 登顶 GitHub 趋势榜,标星1.8k:200 行 JS 代码让画面人物瞬间消失!
  8. 未来智慧城市长啥样?华为云让我们到深圳看一看
  9. Javascript获取select下拉框选中的的值
  10. byte 转 int 为什么要0xFF?
  11. 特大动作:OLAMI 在线语音识别 API SDK 上线!
  12. c语言半壁江山回调函数,回调函数运行时间太长影响了程序性能,怎么办
  13. 更换介质:请把标有“Debian GNU/Linux 10.2.0 _Buster_ - Officia的盘片插入驱动器“/media/cdrom/”再按「回车」键
  14. PAIP.彩票系统的对外接口流程实录
  15. 计算机学院姚茜,武汉理工大学第三届届学位评定委员会
  16. 计算机网络中sep是什么意思,SEP系统介绍及实施方案介绍.ppt
  17. [转]中国青岛发布新一代CPU桥片“星光青桥一号”
  18. matlab偏差补偿最小二乘,基于偏差补偿递推最小二乘的Hammerstein-Wiener模型辨识
  19. 最优潮流 OPF 算例资源网站
  20. 【git 常用配置及常用命令】

热门文章

  1. 限量!“Java 成长笔记” Spring Boot/Sentinel/Nacos 高并发
  2. “字节云”火山引擎正式发布,对外开放推荐算法等核心技术!
  3. 周年直播倒计时2天,攒足惊喜等你开场! | MindSpore 开源一周年
  4. 物联网大战打响,6 岁的涂鸦智能这样突出重围!
  5. 中小企业数智化转型,这个百万级客户市场差点被遗忘
  6. Python 90行代码让微信地球转起来,你也可以!| 原力计划
  7. 9 万条弹幕告诉你,《乘风破浪的姐姐》里谁才是真正的C位?
  8. 软件工程师的衰落与程序技术员的兴起
  9. 在创业公司工作不划算了!
  10. 别吹了!程序员自学Python,不如9岁小孩,网友:我不服.... ​