对Oracle 并行的误解1--其实你没有用到并行
来源:互联网 发布:饶毅 知乎 编辑:程序博客网 时间:2024/05/21 06:02
我一直认为对DML使用并行,只需要加上parallel的hint就完事了。其实不是,要使用alter session force parallel dml才是真正的并行操作。下面来做个试验:
SQL> drop table test purge;
SQL> create table test as select * from dba_objects;SQL> insert into test select * from test;
SQL> insert into test select * from test;
SQL> commit;
SQL> exec dbms_stats.gather_table_stats(user,'test');
SQL> set timing on
SQL> update test t set object_name='ggg';
318988 rows updated.
Elapsed: 00:00:05.06
SQL> commit;
SQL> update test t set object_name='ggg';
318988 rows updated.
Elapsed: 00:00:03.68 --不使用并行,update的时间
SQL> commit;
SQL> update /*+parallel(t,4)*/ test t set object_name='ggg';
318988 rows updated.
Elapsed: 00:00:03.81
SQL> commit;
SQL> update /*+parallel(t,4)*/ test t set object_name='ggg';
318988 rows updated.
Elapsed: 00:00:03.31 --使用了并行,但效果不明显
SQL> commit;
SQL> alter session force parallel dml;
或者 alter session enable parallel dml;
SQL> update /*+parallel(t,4)*/ test t set object_name='ggg';
318988 rows updated.
Elapsed: 00:00:00.51
SQL> commit;
SQL> update /*+parallel(t,4)*/ test t set object_name='ggg';
318988 rows updated.
Elapsed: 00:00:00.38 --效果非常明显
SQL> commit;
为什么会这样呢?再开一个session,观察下它们的执行计划,使用alter session force parallel dml之前并行使用在全表扫描test表上,使用之后,并行才使用在update上:
SQL> EXPLAIN PLAN FOR update /*+parallel(t,4)*/ test t set object_name='ggg';
Explained.
SQL> select * from table(DBMS_XPLAN.DISPLAY);
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------
Plan hash value: 3695425075
---------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 318K| 7787K| 245 (1)| 00:00:04 | | | |
| 1 | UPDATE | TEST | | | | | | | |
| 2 | PX COORDINATOR | | | | | | | | |
| 3 | PX SEND QC (RANDOM)| :TQ10000 | 318K| 7787K| 245 (1)| 00:00:04 | Q1,00 | P->S | QC (RAND) |
| 4 | PX BLOCK ITERATOR | | 318K| 7787K| 245 (1)| 00:00:04 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| TEST | 318K| 7787K| 245 (1)| 00:00:04 | Q1,00 | PCWP | |
---------------------------------------------------------------------------------------------------------------
12 rows selected.
SQL> alter session force parallel dml;
Explained.
SQL> select * from table(DBMS_XPLAN.DISPLAY);
PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------------------------
Plan hash value: 2059761527
---------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 318K| 7787K| 245 (1)| 00:00:04 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 318K| 7787K| 245 (1)| 00:00:04 | Q1,00 | P->S | QC (RAND) |
| 3 | UPDATE | TEST | | | | | Q1,00 | PCWP | |
| 4 | PX BLOCK ITERATOR | | 318K| 7787K| 245 (1)| 00:00:04 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| TEST | 318K| 7787K| 245 (1)| 00:00:04 | Q1,00 | PCWP | |
---------------------------------------------------------------------------------------------------------------
12 rows selected.
0 0
- 对Oracle 并行的误解1--其实你没有用到并行
- 对Oracle 并行的误解3--其实建主键没有用到并行
- 对Oracle 并行的误解2--其实会锁全表
- ORACLE 的并行执行
- ORACLE的并行技术
- 并行开发其实很容易
- 并行恢复对oracle容灾的影响
- 有并行的CPU,没有并行的人
- oracle 并行
- Oracle的并行查询尝试
- oracle的Parallel 并行技术
- oracle的Parallel 并行技术
- Oracle使用并行的坑
- Oracle表的并行度
- 并行
- 并行
- Oracle 对表设置并行度对执行计划的影响
- X86体系结构对并行端口的操作
- 学习
- Linux内核源代码情景分析-内存管理
- IOS开发之protocol
- android 判断文件是否存在
- =====Material Design 的时代要来了 所有app都扛不住======
- 对Oracle 并行的误解1--其实你没有用到并行
- android 检查服务是否在运行
- 面试之“类工厂方法”
- springMVC <spring:message>国际化
- 图片以及图片阴影移动
- STL之二分查找:hdu 5178 ( BestCoder Round #31 1001 )
- UVALive - 4850 Installations 贪心+枚举
- iOS 消息推送原理及实现总结
- 使用cocos2d-js制作游戏新手引导(一)