并行度是指Oracle在进行并行处理时,会启动几个并行进程来同事执行任务。
注意:并非并行度越高,并行进程越多,执行速度就会越快,这里面受限的因素很多,比如系统资源、CPU数量、以及RAC架构下并行进程可能分配到各个实例上去执行,而进行的实例间数据交换的问题。
使用并行(DEGREE)
为了使SQL在执行时使用并行,可以通过以下两种方式实现
1)在对象(表、索引等)上创建并行度
2)使用Hint(暗示)方式
对象上创建并行度
一、查看对象上的并行度
1)表上的并行度
select degree from user_tables where table_name=‘T1’;
2)索引上的并行度
select degree from user_indexes where table_name=‘T1’;
二、创建对象上的并行度
1)创建表上的并行度
create table t2(…) parallel 4;–并行度为4
2)创建索引上的并行度
create index idx_t2 on t2(id) parallel 4;
注:B树索引、位图索引以及全文索引都可以建立并行度
对象上并行度使用效果对比
未使用并行度效果:
使用并行度为2效果:
使用并行度为6效果:
对比总结:
1)并行度为1等同于没有并行度。
2)并行度并非越高越好,有时反而起反作用。
3)有并行度是没有并行度的几倍甚至几十倍,数据量越大效果越明显。
修改并行度:
1)表上修改
alter table t2 parallel 3;–修改并行度为3
alter table t2 parallel ; --不设置,oracle会将其设置为默认值
并行度默认值的计算方法
1)非RAC架构
服务器CPU数 * 每个CPU启用的线程数=并行度
2)RAC环境
所有参与并行处理的实例CPU总数 * 每个CPU启用的线程数=并行度
1)查看实例数(RAC多个实例)
show parameter parallel_server_instances;
2)查看cpu个数和 每个cpu启用的线程
show parameter cpu
计算方法:1322=并行度
但是 基本上都不这样设置,因为太多的并行服务会消耗大量的系统资源而影响其他用户的操作,不过我们可以设置一个参数:
parallel_adaptive_multi_user=true;
此时oracle会根据系统的资源使用情况,动态的进行调整
1)更改表不采用并行度
alter table t1 noparallel;
2)使用Hint
select /*+parallel(t1,4) */ * from t1;–并行度为4
注:Hint是人为干预Oracle对SQL的执行计划,当Hint与对象发生冲突时,Oracle将采用Hint方式,Hint方式高于对象属性。
由于Hint方法使SQL执行计划固定了下来,但是数据库中的数据以及系统资源是不断变化的,所以一般不建议使用hint的方式。不过凡事都不绝对,例如一个系统有一些分页操作的SQL,通过这些SQL查询最前N条数据为目的,并且还有一些报表SQL,需要全部执行完毕为目的,这种情况,我们可以设置回话级的参数来优化:
alter session set optimizer_mode=First_rows_n;–分页
alter session set optimizer_mode=all_rows;–报表
3)索引上使用并行度
3.1创建索引并行度
create bitmap index t1_bitmap_idx on t1(id) parallel 4;
create index t1_text_idx on t1(name) indextype is ctxsys.context parallel t;
3.2查看索引并行度
select index_name ,index_type,degree from user_indexes where table_name=‘T1’;
注:1、对于分区表,并行度不能在分区级别上设置,只能在表(索引)级设置,可以通过查看分区属性就知道分区没有并行度这个属性
desc user_tab_partitions;
2、索引上的并行度只有在访问索引时才可以被使用
select count(id) from t1;–使用并行度
select * from t1 where id>100;–不使用并行度
select * from t1 where id=100;–不使用并行度
select object_id from t1 where id=100;–不使用并行度
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23490154/viewspace-1348936/,如需转载,请注明出处,否则将追究法律责任。