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.
dml并行的更多相关文章
- 用直接路径(direct-path)insert提升性能的两种方法
1.传统串行insert方式 常见的insert方式有两种: (1) insert into table_name values(....) (2) insert into target_table ...
- PLSQL_性能优化系列03_Oracle Parallel并发处理
2014-09-25 Created By BaoXinjian
- direct-path插入方式提升性能的分析
1.传统串行insert方式 常见的insert方式有两种: (1) insert into table_name values(....) (2) insert into tar ...
- Oracle Parallel使用方法
一. 并行查询 并行查询允许将一个sql select语句划分为多个较小的查询,每个部分的查询并发地运行,然后将各个部分的结果组合起来,提供最终的结果,多用于全表扫描,索引全扫描等,大表的扫描和连接. ...
- OGG-Oracle 集成模式抽取进程,REGISTER DATABASE都做了什么?
一.学习目标 有同事问OGG技术问题,OGG软件,在oracle数据库中,集成模式抽取进程REGISTER DATABASE,都做了什么操作? 有什么风险? 并且提到了一个抽取进程注册,在瞬时间并发占 ...
- Oracle并行事务回滚相关参数及视图
/******相关参数****/fast_start_parallel_rollback1.取值有3种:false,low,high2.各值含义:false ---禁用并行回滚功能 ...
- 初试PL/SQL并行编程
-----------------------------Cryking原创------------------------------ -----------------------转载请注明出处, ...
- [转载自阿里丁奇]各版本MySQL并行复制的实现及优缺点
MySQL并行复制已经是老生常谈,笔者从2010年开始就着手处理线上这个问题,刚开始两三年也乐此不疲分享,现在再提这个话题本来是难免"炒冷饭"嫌疑. 最近触发再谈这个话题,是 ...
- MySQL 并行复制从库发生自动重启分析
并行复制从库发生自动重启分析 背景 半同步复制从库在晚上凌晨2点半发生自动重启,另一个异步复制从库在第二天凌晨3点也发生了自动重启. 分析 版本mysql 5.7.16 mysql> show ...
随机推荐
- log4j到log4j2升级迁移方案
序:这段时间因为维护的项目存在大量日志打印,严重拖慢整体响应时间,在做性能优化的工作中对这块内容进行了升级换代,由以前的log4j升级为log4j2,以实现日志异步打印.接下来记录一下这个费时半个月的 ...
- 「SDOI2017」树点涂色 解题报告
「SDOI2017」树点涂色 我sb的不行了 其实一开始有一个类似动态dp的想法 每个点维护到lct树上到最浅点的颜色段数,然后维护一个\(mx_{0,1}\)也就是是否用虚儿子的最大颜色 用个set ...
- [SDOI2013]森林 主席树+启发式合并
这题的想法真的很妙啊. 看到题的第一眼,我先想到树链剖分,并把\(DFS\)序当成一段区间上主席树.但是会发现在询问的时候,可能会非常复杂,因为你需要把路径拆成很多条轻链和重链,它们还不一定连续,很难 ...
- sk-learn 决策树的超参数
一.参数criterion:特征选择标准,[entropy, gini].默认gini,即CART算法. splitter:特征划分标准,[best, random].best在特征的所有划分点中找出 ...
- 详解散列hashCode在HashMap中的使用原理
1散列的价值在于它的速度:散列使得查询变快,它将键key保存在某处,而我们知道存储一组数组最快的数据结构是数组,所以用它来表示键的信息(注意,数组保存的是键的信息,不是键本身),由于数组是固定的,当我 ...
- 【JS】使用变量作为object的key-方法汇总
1.方法一 var a = 'id'; var str = '{'+a+' : 12}' var obj = eval("("+str+")"); 结果: ob ...
- 实现IOC功能的简单Spring框架
需求分析 设计一个含有IOC的简单Spring,要求含有对象注册.对象管理以及暴露给外部的获取对象功能. 项目设计 对于注册的对象用一个类BeanInfo来描述其信息,包括对象标识.全类名以及属性名与 ...
- C++预编译头文件 – stdafx.h
预编译头文件的由来 也许请教了别的高手之后,他们会告诉你,这是预编译头,必须包含.可是,这到底是为什么呢?预编译头有什么用呢? 咱们从头文件的编译原理讲起.其实头文件并不神秘,其在编译时的作用,就是把 ...
- Matplotlib画正弦余弦曲线
参考1:http://www.labri.fr/perso/nrougier/teaching/matplotlib/ 参考2:https://matplotlib.org/api/artist_ap ...
- docker学习------swarm集群虚机异常关机,node状态为down
1.因昨天虚机异常关闭,导致今天上去查看时,node节点状态显示为down 2.查了些相关资料,找到处理办法(因我的节点没有任何数据,所以直接对其进行清除) docker swarm leave -- ...