zoukankan      html  css  js  c++  java
  • dml并行

    Enabling Parallel DML
    A DML statement can be parallelized only if you have explicitly enabled parallel DML in the session, as in the following statement:
    关于dml并行必须在会话层面明确指定,不指定都是位并行

    ALTER SESSION ENABLE PARALLEL DML;

    下面查看例子

    create table scott.t1 as select b.OBJECT_ID,b.OBJECT_NAME from dba_objects b ;
     SQL> select count(1) from scott.t1;
    
      COUNT(1)
    ----------
       608657
    
    SQL> update /*+ parallel(a,2) */  scott.t1 a set OBJECT_NAME='hthorizon.com';
    
    608657 rows updated.
    
    Elapsed: 00:00:37.12
    
    alter system flush buffer_cache;
    alter system flush shared_pool;
    
    SQL> alter session enable parallel dml;
    
    Session altered.
    
    Elapsed: 00:00:00.03
    SQL> update /*+ parallel(a,2) */  scott.t1 a set OBJECT_NAME='hthorizon.com1';
    
    608657 rows updated.
    
    Elapsed: 00:00:13.56
    真正的 parallel update更新比伪parallel块0.24秒,下面查看执行计划
       
     SQL> explain plan for update /*+ parallel(a,2) */  scott.t1 a set OBJECT_NAME='hthorizon.com';
    
    Explained.
    
    SQL> select * from table(dbms_xplan.display);
    
    PLAN_TABLE_OUTPUT
    -----------------------------------------------------------------------------------------------------------------------
    Plan hash value: 121765358
    
    ---------------------------------------------------------------------------------------------------------------
    | Id  | Operation	      | Name	 | Rows  | Bytes | Cost (%CPU)| Time	 |    TQ  |IN-OUT| PQ Distrib |
    ---------------------------------------------------------------------------------------------------------------
    |   0 | UPDATE STATEMENT      | 	 |  1391K|    33M|  1011   (1)| 00:00:13 |	  |	 |	      |
    |   1 |  UPDATE 	          | T1	 |	 |	 |	      | 	 |	  |	 |	      |
    |   2 |   PX COORDINATOR      | 	 |	 |	 |	      | 	 |	  |	 |	      |
    |   3 |    PX SEND QC (RANDOM)| :TQ10000 |  1391K|    33M|  1011   (1)| 00:00:13 |  Q1,00 | P->S | QC (RAND)  |
    |   4 |     PX BLOCK ITERATOR | 	 |  1391K|    33M|  1011   (1)| 00:00:13 |  Q1,00 | PCWC |	      |
    |   5 |      TABLE ACCESS FULL| T1	 |  1391K|    33M|  1011   (1)| 00:00:13 |  Q1,00 | PCWP |	      |
    
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------------------------------------------
    
    上面并行更新时伪并行,只有在select时并行,真正的更新并行是发生在P->S(parallel_to_serial)之后;更新慢是慢在QC(query coordinator/查询协调)之上
    SQL> alter session enable parallel dml;
    
    Session altered.
    
    SQL> explain plan for update /*+ parallel(a,2) */  scott.t1 a set OBJECT_NAME='hthorizon.com';
    
    Explained.
    
    SQL> select * from table(dbms_xplan.display);
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    Plan hash value: 3991856572
    
    ---------------------------------------------------------------------------------------------------------------
    | Id  | Operation	      | Name	 | Rows  | Bytes | Cost (%CPU)| Time	 |    TQ  |IN-OUT| PQ Distrib |
    ---------------------------------------------------------------------------------------------------------------
    |   0 | UPDATE STATEMENT      | 	 |  1391K|    33M|  1011   (1)| 00:00:13 |	  |	 |	      |
    |   1 |  PX COORDINATOR       | 	 |	 |	 |	      | 	 |	  |	 |	      |
    |   2 |   PX SEND QC (RANDOM) | :TQ10000 |  1391K|    33M|  1011   (1)| 00:00:13 |  Q1,00 | P->S | QC (RAND)  |
    |   3 |    UPDATE	          | T1	 |	 |	 |	      | 	 |  Q1,00 | PCWP |	      |
    |   4 |     PX BLOCK ITERATOR | 	 |  1391K|    33M|  1011   (1)| 00:00:13 |  Q1,00 | PCWC |	      |
    |   5 |      TABLE ACCESS FULL| T1	 |  1391K|    33M|  1011   (1)| 00:00:13 |  Q1,00 | PCWP |	      |
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    
    从上述执行计划来看是真正的update并行
    查看sql的实际执行计划(执行过的语句才能生成真实的执行计划)
    SQL> select a.SQL_ID,a.EXECUTIONS,a.CHILD_number from v$sql a where a.SQL_TEXT like 'update /*+ parallel(a,2) */  scott.t1%';
    
    SQL_ID	      EXECUTIONS CHILD_NUMBER
    ------------- ---------- ------------
    9fwr6kw5xwmq0	       1	    0
    
    Elapsed: 00:00:00.00
    
    SQL> select * from table(xplan.DISPLAY_cursor('9fwr6kw5xwmq0',0,'advanced')); 
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    SQL_ID	9fwr6kw5xwmq0, child number 0
    -------------------------------------
    update /*+ parallel(a,2) */  scott.t1 a set OBJECT_NAME='hthorizon.com1'
    
    Plan hash value: 3991856572
    
    -----------------------------------------------------------------------------------------------------------------------
    | Id  | Order | Operation	      | Name	 | Rows  | Bytes | Cost (%CPU)| Time	 |    TQ  |IN-OUT| PQ Distrib |
    -----------------------------------------------------------------------------------------------------------------------
    |   0 |     6 | UPDATE STATEMENT      | 	 |	 |	 |  1011 (100)| 	 |	  |	 |	      |
    |   1 |     5 |  PX COORDINATOR       | 	 |	 |	 |	      | 	 |	  |	 |	      |
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    |   2 |     4 |   PX SEND QC (RANDOM) | :TQ10000 |  1391K|    33M|  1011   (1)| 00:00:13 |  Q1,00 | P->S | QC (RAND)  |
    |   3 |     3 |    UPDATE	      | T1	 |	 |	 |	      | 	 |  Q1,00 | PCWP |	      |
    |   4 |     2 |     PX BLOCK ITERATOR | 	 |  1391K|    33M|  1011   (1)| 00:00:13 |  Q1,00 | PCWC |	      |
    |*  5 |     1 |      TABLE ACCESS FULL| T1	 |  1391K|    33M|  1011   (1)| 00:00:13 |  Q1,00 | PCWP |	      |
    -----------------------------------------------------------------------------------------------------------------------
    
    Query Block Name / Object Alias (identified by operation id):
    ---------------------------------------------------------------------
    
       1 - UPD$1
       5 - UPD$1 / A@UPD$1
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    
    Outline Data
    -------------
    
      /*+
          BEGIN_OUTLINE_DATA
          IGNORE_OPTIM_EMBEDDED_HINTS
          OPTIMIZER_FEATURES_ENABLE('11.2.0.4')
          DB_VERSION('11.2.0.4')
          ALL_ROWS
          OUTLINE_LEAF(@"UPD$1")
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
          FULL(@"UPD$1" "A"@"UPD$1")
          END_OUTLINE_DATA
      */
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       5 - access(:Z>=:Z AND :Z<=:Z)
    
    Column Projection Information (identified by operation id):
    -----------------------------------------------------------
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    
       1 - SYSDEF[4], SYSDEF[32720], SYSDEF[1], SYSDEF[96], SYSDEF[32720]
       2 - (#keys=0) SYSDEF[4], SYSDEF[32720], SYSDEF[1], SYSDEF[96], SYSDEF[32720]
       3 - SYSDEF[4], SYSDEF[32720], SYSDEF[1], SYSDEF[96], SYSDEF[32720]
       4 - (upd=2) "A".ROWID[ROWID,10], "OBJECT_NAME"[VARCHAR2,128]
       5 - "A".ROWID[ROWID,10], "OBJECT_NAME"[VARCHAR2,128]
    
    
    51 rows selected.
    

      

  • 相关阅读:
    各类Http请求状态(status)及其含义 速查列表 xmlhttp status
    Microsoft Visual Studio 2010 正式版下载[含旗舰版序列号](中、英文版)
    【分享】开源或免费的ASP.NET web应用列表
    线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
    Asp.Net中多语言的实现
    Oracle 数字与空值的排序问题
    新版微软一站式示例代码库 6月2日更新下载。
    .NET反射机制简介
    Decimal与double类型误差
    用动态菜单增强.NET应用程序
  • 原文地址:https://www.cnblogs.com/omsql/p/9851784.html
Copyright © 2011-2022 走看看