oracle 并行操作
来源:互联网 发布:himall2.4完整版源码 编辑:程序博客网 时间:2024/04/30 09:27
ORACLE并行操作学习
目录(?)[+]
1 并向操作
对于一个大的任务,一般的做法是利用一个进程,串行的执行,如果系统资源足够,可以采用parallel技术,把一个大的任务分成若干个小的任务,同时启用n个进程/线程,并行的处理这些小的任务,这些并发的进程称为并行执行服务器(parallel executeion server),这些并发进程由一个称为并发协调进程的进程来管理,可以让多个CPU同时处理一个计算任务,充分使用系统资源,提高计算效率。
1.1 使用场景
资源充分,并向操作设计为充分,完全地利用一台机器所有资源,在OLAP,DW系统中,用户少,这正是想要的。但是OLTP系统(用户多,且事务很快就不合适了)
1.1.1 使用条件
1) 大任务: 执行时间必须是分钟,小时级别。参与运算的数据量大。在当前系统初定于参与运算数据量大于10GB或者SQL运行时间超过30分钟可考虑使用并行。
2) 资源丰富(CPU,内存,磁盘IO):并向查询会过度使用资源,负面地影响总体性能和运行时间。
对于联机分析系OLTP系统,很不适用并向查询了,OLTP系统的执行都是小任务;其本身的并发访问很多,资源竞争激烈,相应时间比串行还长。
1.2 使用语句
1.2.1 并向查询
并行查询允许将一个sql select语句划分为多个较小的查询,每个部分的查询并发地运行,然后将各个部分的结果组合起来,提供最终的结果,多用于全表扫描,索引全扫描等,大表的扫描和连接、创建大的索引、分区索引扫描、大批量插入更新和删除
SQL> select /*+ parallel(t1 8) */ count(*) from t1;
SQL> select degree from user_tables where table_name='T1';
DEGREE
--------------------
DEFAULT
并行度为Default,其值由下面2个参数决定
SQL> show parameter cpu
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 2
parallel_threads_per_cpu integer 2
cpu_count表示cpu数
parallel_threads_per_cpu表示每个cpu允许的并行进程数
default情况下,并行数为cpu_count*parallel_threads_per_cpu
取消并行设置
SQL> alter table t1 noparallel;
SQL> select degree from user_tables where table_name='T1';
DEGREE
----------------------------------------
1
数据字典视图
v$px_session
sid:各个并行会话的sid
qcsid:query coordinator sid,查询协调器sid
1.2.2 并向DML
并行dml包括insert,update,delete,merge,在pdml期间,oracle可以使用多个并行执行服务器来执行insert,update,delete,merge,多个会话同时执行,同时每个会话(并发进程)都有自己的undo段,都是独立的一个事务,这些事务要么由pdml协调器进程提交,要么都rollback。
在一个有充足I/o带宽的多cpu主机中,对于大规模的dml,速度可能会有很大的提升,尤其是在大型的数据仓库环境中。
并行dml需要显示的启用
SQL> alter session enable parallel dml;
Disable并行dml
SQL> alter session disable parallel dml;
1.2.3 并向DDL
并向DDL才是并向的重点。提供了dba使用全部机器资源的能力,常用的pddl有
1) 重建索引 ALTER INDEX REBUILD
2) 创建索引 CREATE INDEX
3) CREATE TABLE AS SELECT
4) ALTER TABLE MOVE
5) ALTER TABLE SPILT PARTITON
在上述DDLsql语句后面加上parallel子句
例
SQL> alter table t1 move parallel;
Table altered
SQL> create index T1_IDX on T1 (OWNER, OBJECT_TYPE)
2 tablespace SYSTEM
3 parallel;
1.2.4 最优化部署方法
1) 数据尽可能分布在多个物理设备
a) 逻辑卷Strip 机制
b) Oracle 的ASM
c) 将多个分区隔离在多个磁盘上
d) 一个表空间多个物理文件
2) 并向度设置
a) 一般来说,并行度越大SQL的执行效率越高,但是不建议设置超过CPU核数的并行度。在当前的RAC中,考虑到同时会有多个任务在跑,为了不影响其他任务,并行度需要严格控制在32个以下,一般的建议值是8和16。
b) 另外,建议并行度设置为2的n次方,如2/4/8/16/32等。
2 启动并向
可以用hint、alter session或者设置对象并行属性三种方式设置启用并行。三种方式任意一种就可以使并行生效,如果多种方式同时存在的话,则优先级顺序是:hint -> alter session -> table/index degree。
hint
alter session
table/index degree
Query
select /*+ parallel(a,8) */count(1) from table_name a;
alter session force query parallel 8;
select count(1) from table_name a;
alter table table_name parallel 8;
select count(1) from table_name a;
DML
默认情况下,parallel dml是禁用的,需要先用alter session启用:
alter session enable parallel dml;
update /*+ parallel(a,8) */ table_name a set col1=1;
alter session force parallel dml parallel 8;
update table_name a set col1=1;
alter session enable parallel dml;
alter table table_name parallel 8;
update table_name a set col1=1;
以上三步缺一不可。
DDL
无
alter session force parallel ddl parallel 8;
create table table_name as select * from ……
create table table_name parallel 8 as select * from ……
create index index_name …… parallel 8;
注意:
1) 上述的alter session enable只是表示让当前会话支持并行,最终并行需要通过hint或者table/index degree来实现;而alter session force表示强制并行,无需hint等配合使用。
2) 建议在hint或者alter session中控制并行,不要通过修改表或者索引的属性(degree)来控制。在查询频繁的情况下,把表或者索引的并行度改大可能会导致严重的性能问题。
3 实例
3.1 并向查询
方法一: 明确并向数
alter table T_CDT_DO_LASTACT_SECTOR_EXT PARALLEL 2;
方法二: 让Oracle考虑
alter table T_CDT_DO_LASTACT_SECTOR_EXT PARALLEL;
3.2 效果-一步步变快
1) 非并向
create table test_111
as
select *from T_CDT_DO_LASTACT_SECTOR_EXT
执行时间 45秒
2) 并向度2
alter table T_CDT_DO_LASTACT_SECTOR_EXT PARALLEL 2;
create table test_111
as
select *from T_CDT_DO_LASTACT_SECTOR_EXT
执行时间 26秒
3) 并向度2
alter table T_CDT_DO_LASTACT_SECTOR_EXT PARALLEL;
create table test_111
as
select *from T_CDT_DO_LASTACT_SECTOR_EXT
执行时间 30秒
select SID FROM V$MYSTAT WHERE ROWNUM=1 得到本会话ID
SELECT SID,QCSID,SERVER#,DEGREE FROM V$PX_SESSION WHERE QCSID=133 在另一个会话监控
select value from v$sys_optimizer_env where Name='cpu_count';
结果是2,即目前cpu个数是2哦。
此时并向度为4? 怎么来的?
4) 并向ddl
create table test_111 parallel
as
select *from T_CDT_DO_LASTACT_SECTOR_EXT
并向DML性能改善一点
4 注意
4.1 最大并行度设置值
可以到CPU*2,但是效果未必会好。,并行度和CPU核心数相当比较好。
4.2 HASH JOIN
在处理大量数据查询,例如出现HASH JOIN的情况下,并行查询非常有效果的。也就是说并行查询在数据仓库这样的应用中会“大显身手”。
降低 consistent gets数。
4.3 对于insert ……select ……如何设置并行
insert……select….包含两个部分,query和dml,可以为这两个部分分别设置并行度。因为insert操作是dml,因此还需要通过alter session方式把pdml启用,如:
altersession enable parallel dml;
insert/*+ append parallel(a,4) */ into table_a a
select/*+ parallel(b,8) */ * from table_b b where ……;
4.4 查看本次会话的并向操作历史统计
select * fromv$pq_sesstat;
4.5 并行有什么弊端?
1) 并行dml会浪费空间,并行度越高,浪费越厉害
2) 被并行dml影响的表需要提交或者回滚后才能被后续的SQL使用,否则会报错,这可能会影响事务的一致性。
3) 并行容易触发异常或者bug,降低系统和程序的稳定性
- ORACLE并行操作
- ORACLE并行操作学习
- oracle 并行操作
- Oracle 并行操作
- Oracle并行操作——从串行到并行
- Oracle并行操作——并行查询(Parallel Query)
- Oracle并行操作——从串行到并行
- 深入理解Oracle的并行操作
- 2013.12.18oracle 并行操作??疑问
- 深入理解Oracle的并行操作
- 深入理解Oracle的并行操作
- oracle并行查询操作的执行计划
- oracle 并行
- oracle 并行parallel操作,会大大提高sql执行效率
- 深入理解Oracle的并行操作【好文认真读】
- oracle 并行调整
- oracle 并行专题
- Oracle合并行 解析
- 网络游戏特有的要素之二带宽
- Linux下画原理图和PCB
- 发现 button设置背景图片 iOS7 与 iOS8 差异
- Eclipse中安装MAVEN插件
- 深入java--注解
- oracle 并行操作
- ReportStudio进阶教程(三十二) - 地图开发(六)修改Cognos地图文件
- 去鱼尾纹的最好方法 美在“睛”细之处,做个花样女人
- Projection Matrix and Linear Regression
- B. OR in Matrix
- 2014-12-15记录
- C++ post socket获得中文乱码问题
- 用友UAP Mobile移动平台架构与实践
- 软件架构