os: centos 7.4
db: oracle 12.1.0.2

insert,update,delete,merge 的dml操作都可以开启并行,多个会话同时执行,同时每个会话(并发进程)都有自己的undo段,都是独立的一个事务,这些事务要么由pdml协调器进程提交,要么都rollback。

在一个有充足I/o带宽的多cpu主机中,对于大规模的dml,速度会有很大的提升,尤其是在大型的数据仓库环境中。

版本

# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
#
# cat /proc/cpuinfo  |grep -i "processor"
processor   : 0
processor   : 1
processor   : 2
processor   : 3
processor   : 4
processor   : 5
processor   : 6
processor   : 7
#
# su - oracle
Last login: Thu Oct 24 22:30:17 CST 2019 on pts/0
$ sqlplus / as sysdba;SQL*Plus: Release 12.1.0.2.0 Production on Thu Oct 24 22:46:02 2019Copyright (c) 1982, 2014, Oracle.  All rights reserved.Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing optionsSQL> set lines 200;
SQL> select * from v$version;BANNER                                           CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production          0
PL/SQL Release 12.1.0.2.0 - Production                            0
CORE    12.1.0.2.0  Production                                0
TNS for Linux: Version 12.1.0.2.0 - Production                        0
NLSRTL Version 12.1.0.2.0 - Production                            0

准备表,插入200W条数据

SQL> create table tmp_t0 ( c0 varchar2(100),c1 varchar2(100),c2 varchar2(100));
create table tmp_t1 ( c0 varchar2(100),c1 varchar2(100),c2 varchar2(100));SQL> insert into tmp_t0 select level as le,level as le2,level as le3 from dual CONNECT BY level <=2000000;
insert into tmp_t1 select level as le,level as le2,level as le3 from dual CONNECT BY level <=2000000;
commit;

方式一:enable parallel dml + 添加 hint /*+ parallel */

并行dml需要显示执行 enable

SQL> set lines 200;
set pages 200;
set timing on;SQL> set autotrace traceonly;
SQL>
SQL> update tmp_t0 set c2=c1||c1;2000000 rows updated.Elapsed: 00:01:23.10Execution Plan
----------------------------------------------------------
Plan hash value: 3238932164-----------------------------------------------------------------------------
| Id  | Operation          | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | UPDATE STATEMENT   |        |  1616K|   240M|  3023   (1)| 00:00:01 |
|   1 |  UPDATE            | TMP_T0 |       |       |            |          |
|   2 |   TABLE ACCESS FULL| TMP_T0 |  1616K|   240M|  3023   (1)| 00:00:01 |
-----------------------------------------------------------------------------Note
------ dynamic statistics used: dynamic sampling (level=2)

启用并行DML,需要在 update 后面同时加并行 hint /*+ parallel */

SQL> rollback;
SQL> alter session enable parallel dml;
SQL>
SQL> update/*+ parallel */ tmp_t0 set c2=c1||c1;
2000000 rows updated.Elapsed: 00:00:59.47Execution Plan
----------------------------------------------------------
ERROR:
ORA-12838: cannot read/modify an object after modifying it in parallelSP2-0612: Error generating AUTOTRACE EXPLAIN report

出现 ORA-12838 ,说明确实用到了 parallel dml

方式二:enable parallel dml + table parallel

并行dml需要显示执行 enable

SQL> rollback;
SQL> alter session enable parallel dml;
SQL> alter table tmp_t0 parallel 8;
SQL> update tmp_t0 set c2=c1||c1;

方式三:force parallel dml

并行dml需要显示执行 enable

SQL> rollback;
SQL> alter session force parallel dml parallel 8;
SQL> update tmp_t0 set c2=c1||c1;

disable parallel dml

disable 并行 dml

SQL> alter session disable parallel dml;
SQL> alter session force parallel dml parallel 1;

参考:

oracle 并行之二: parallel dml相关推荐

  1. Oracle Hints,Oracle并行模式(Parallel) /*+parallel(t,4)*/ 在SQL调优中的重要作用

    /*+parallel(t,4)*/在SQL调优中的重要作用! 2013年11月17日 12:59:24 雾里看花5566 阅读数:5422更多 个人分类: 数据库-oracle 谈谈HINT /*+ ...

  2. Oracle并行基础二

    Oracle并行基础(连载二) 作者:沃趣科技高级数据库技术专家 魏兴华 消费者生产者模型的限制 根据上面的介绍,你已经知道了,一个并行操作内一般会具有两组PX slave进程,一组为生产者,一组为消 ...

  3. oracle并行模式(Parallel)

    一.Parallel 1.  用途 强行启用并行度来执行当前SQL.这个在Oracle 9i之后的版本可以使用,之前的版本现在没有环境进行测试.也就是说,加上这个说明,可以强行启用Oracle的多线程 ...

  4. Does Oracle Goldengate support Parallel DML?

    Golengate的基本工作原理是通过挖掘重做日志以获取数据库中的数据变化:而如果我们在数据库中使用并行DML去插入数据的话会因为直接路径插入而产生少量的redo重做日志.那么OGG的日志挖掘是否能正 ...

  5. oracle并行parallel update两张表_Oracle与并行性 parallel

    Oracle与并行性 并行化操作能力是巨型数据库(Very Large Database,简称VLDB)最重要的特性之一.带有多个CPU的数据库服务器,也被称作SMP,目前是大多数数据库服务器的标准配 ...

  6. oracle adjusting parallel,Oracle 并行相关的初始化参数

    Oracle数据库并行操作,特别是在RAC环境,一定程度上能够提升数据库的性能,所以对相关的初始化参数的了解是必要的,这篇文章将根据实际的案例讨论Oracle数据库的部分并行参数. Oracle数据库 ...

  7. Oracle 并行原理与示例总结

    <Oracle 并行原理与示例总结> 并行:把一个工作分成几份,分给不同进程同时进行处理. 进程层面 并发:多个会话同时进行访问,就是通常所说并发数.会话层面 数据库版本 LEO1@LEO ...

  8. oracle 并行查询

    oracle  并行执行 所谓并行执行,是指能够将一个大型串行任务(任何DML,一般的DDL)物理的划分为叫多个小的部分,这些较小的部分可以同时得到处理. 何时使用并行执行: 1.必须有一个非常大的任 ...

  9. oracle 并行参数设置

    oracle parallel 并行执行操作 2009-08-22 17:16:08|  分类: 系统管理技术|举报|字号 订阅 引子:以前一直没太关注oracle并行这个特性.前几天一个兄弟碰到的一 ...

  10. oracle并行查询结果不唯一,Oracle并行查询出错

    Oracle并行查询出错 1.错误描述 ORA-12801: 并行查询服务器P007中发出错误信号 ORA-01722:无效数字 12801.00000 -"error signaled i ...

最新文章

  1. SAP PP使用ECR去修改Recipe主数据,报错:Generation not supported for change object
  2. oracle三种分区的方式,Oracle 分区表 总结大全(3)
  3. Servlet异常和错误处理示例教程
  4. Mybatis多参数封装到map中,多条件查询
  5. ubuntu18找不到wifi适配器
  6. 【论文阅读】Deep Neural Networks for Learning Graph Representations | day14,15
  7. linux常用命令的全拼(转载)
  8. docker命令总结(二)
  9. 青花瓷音乐的单片机c语言程序,单片机蜂鸣器演奏青花瓷的程序
  10. 网站应用和服务器管理(课程总结4)Week12 澳大利亚维多利亚大学VIT1204 Web Application and Server Management
  11. R语言入门——一文讲明白attach与detach
  12. 商业研究(12):下厨房,美食菜谱分享社区及新型电商,唯有美食与爱不可辜负
  13. java ACM竞赛IO优化Petr模板
  14. 洛谷—P3387 【模板】缩点
  15. tcl/tk参考——列表操作lappend
  16. 如何解决Kodi的YouTube“配额超过”问题
  17. windbg 命令 - !list
  18. CTFshow_命令执行
  19. 屏幕录像软件使用心得
  20. 计算机时钟是如何运行的?

热门文章

  1. 大学计算机基础教程第11章计算机网络与应用总结
  2. PHP框架底层源码怎么看,php底层_php框架底层源码怎么看
  3. iphone UIImageWriteToSavedPhotosAlbum 保存图片
  4. DDR MC DFI PHY
  5. 创业36条军规值得一读
  6. php实现用户登录、注册以及修改功能(附加源码~)
  7. scheme 中文教程
  8. 对抗Windows Defender的方法和思路
  9. Yolov4-tiny pth转onnx转tensorrt
  10. 为什么说程序员做外包没前途?