• Oracle PARALLEL_INDEX与索引并发(待测试)


      使用PARALLEL_INDEX可以在索引上开并发,先来看看文档中的描述:The PARALLEL_INDEX hint instructs the optimizer to use the specified number of concurrent servers to parallelize index range scans for partitioned indexes.

      这里说的是PARALLEL_INDEX可以用在分区索引上开并发,其实还有一种就情况是,当查询走index fast full scan时,也可以开并发

    1、分区索引

     1 SQL> select index_name, index_type, status, partitioned, degree
     2   2    from dba_indexes
     3   3   where table_name = 'T1'
     4   4     and owner = 'SYS';
     5  
     6 INDEX_NAME      INDEX_TYPE      STATUS     PARTIT DEGREE
     7 --------------- --------------- ---------- ------ -------
     8 IND_T1_ID       NORMAL          N/A        YES    1
     9 IND_T1_NAME     NORMAL          VALID      NO     1
    10  
    11 SQL> SELECT /*+ PARALLEL_INDEX(T1, ind_t1_id, 3) */ id from T1 where id between 1 and 3000;
    12  
    13 Execution Plan
    14 ----------------------------------------------------------
    15 Plan hash value: 2134138182
    16  
    17 -------------------------------------------------------------------------------------------
    18 | Id  | Operation                | Name      | Rows  | Pstart| Pstop |    TQ  |IN-OUT| PQ Di
    19 -------------------------------------------------------------------------------------------
    20 |   0 | SELECT STATEMENT         |           |  2500 |       |       |        |      |
    21 |   1 |  PX COORDINATOR          |           |       |       |       |        |      |
    22 |   2 |   PX SEND QC (RANDOM)    | :TQ10000  |  2500 |       |       |  Q1,00 | P->S | QC (R
    23 |   3 |    PX PARTITION RANGE ALL|           |  2500 |     1 |     4 |  Q1,00 | PCWC |
    24 |*  4 |     INDEX RANGE SCAN     | IND_T1_ID |  2500 |     1 |     4 |  Q1,00 | PCWP |
    25 -------------------------------------------------------------------------------------------
    26  
    27 SQL> SELECT /*+ PARALLEL_INDEX(T1, ind_t1_id, 3) */ id from T1;
    28  
    29 Execution Plan
    30 ----------------------------------------------------------
    31 Plan hash value: 2841388588
    32  
    33 --------------------------------------------------------------------------------------------
    34 | Id  | Operation               | Name      | Rows  | Pstart| Pstop |    TQ  |IN-OUT| PQ Dis
    35 --------------------------------------------------------------------------------------------
    36 |   0 | SELECT STATEMENT        |           |   936K|       |       |        |      |
    37 |   1 |  PX COORDINATOR         |           |       |       |       |        |      |
    38 |   2 |   PX SEND QC (RANDOM)   | :TQ10000  |   936K|       |       |  Q1,00 | P->S | QC (RA
    39 |   3 |    PX BLOCK ITERATOR    |           |   936K|     1 |     4 |  Q1,00 | PCWC |
    40 |   4 |     INDEX FAST FULL SCAN| IND_T1_ID |   936K|     1 |     4 |  Q1,00 | PCWP |
    41 -------------------------------------------------------------------------------------------- 

    2、非分区索引,需要走index fast full scan才能开并发:

     1 SQL> SELECT /*+ INDEX_FFS(T1,IND_T1_NAME) PARALLEL_INDEX(T1, ind_t1_name, 2) */
     2   2  count(name) from T1;
     3  
     4 Execution Plan
     5 ----------------------------------------------------------
     6 Plan hash value: 1205896683
     7  
     8 --------------------------------------------------------------------------------------
     9 | Id  | Operation                 | Name        | Rows  |    TQ  |IN-OUT| PQ Distrib |
    10 --------------------------------------------------------------------------------------
    11 |   0 | SELECT STATEMENT          |             |     1 |        |      |         |
    12 |   1 |  SORT AGGREGATE           |             |     1 |        |      |         |
    13 |   2 |   PX COORDINATOR          |             |       |        |      |         |
    14 |   3 |    PX SEND QC (RANDOM)    | :TQ10000    |     1 |  Q1,00 | P->S | QC (RAND)  |
    15 |   4 |     SORT AGGREGATE        |             |     1 |  Q1,00 | PCWP |         |
    16 |   5 |      PX BLOCK ITERATOR    |             |   936K|  Q1,00 | PCWC |         |
    17 |   6 |       INDEX FAST FULL SCAN| IND_T1_NAME |   936K|  Q1,00 | PCWP |         |
    18 --------------------------------------------------------------------------------------

    以下T2表为非分区表:

     1 SQL> select /*+ PARALLEL_INDEX(T2, ind_t2_id, 2) */count(id) from T2;
     2  
     3 Execution Plan
     4 ----------------------------------------------------------
     5 Plan hash value: 155381254
     6  
     7 ------------------------------------------------------------------------------------
     8 | Id  | Operation                 | Name      | Rows  |    TQ  |IN-OUT| PQ Distrib |
     9 ------------------------------------------------------------------------------------
    10 |   0 | SELECT STATEMENT          |           |     1 |        |      |         |
    11 |   1 |  SORT AGGREGATE           |           |     1 |        |      |         |
    12 |   2 |   PX COORDINATOR          |           |       |        |      |         |
    13 |   3 |    PX SEND QC (RANDOM)    | :TQ10000  |     1 |  Q1,00 | P->S | QC (RAND)  |
    14 |   4 |     SORT AGGREGATE        |           |     1 |  Q1,00 | PCWP |         |
    15 |   5 |      PX BLOCK ITERATOR    |           |   949K|  Q1,00 | PCWC |         |
    16 |   6 |       INDEX FAST FULL SCAN| IND_T2_ID |   949K|  Q1,00 | PCWP |         |
    17 ------------------------------------------------------------------------------------

    另外还找到一个与PARALLEL_INDEX相关的BUG,使HINT无法在DBLINK中使用,该BUG在10.2.0.5中修复:
    Bug 6621937 – [NO]PARALLEL_INDEX hint not sent to remote site for SQL over database link [ID 6621937.8]:

    A SQL statement containing [NO_]PARALLEL_INDEX hints which is sent to a remote site (over a database link)does not send those hints with the remote SQL. This can affect query performance.
    eg:
    select /*+ driving_site(a) parallel_index(a,4) */
    a.*,b.* from test_aaa@test_link a,test_bbb b
    where a.col1 = b.col1 and a.col3=5;

  • 相关阅读:
    【Linux高频命令专题(19)】vi/vim
    【Linux高频命令专题(18)】tail
    【Linux常识篇(1)】所谓的正向代理与反向代理
    【nginx运维基础(2)】Nginx的配置文件说明及虚拟主机配置示例
    【nginx运维基础(1)】Nginx的编译安装与使用
    Linux之SAMBA共享服务
    【Linux高频命令专题(17)】head
    【mongoDB高级篇③】综合实战(1): 分析国家地震数据
    php post
    python简单的socket 服务器和客户端
  • 原文地址:https://www.cnblogs.com/polestar/p/2572793.html
Copyright © 2020-2023  润新知