基于并行查询要启动并行进程、分配任务与系统资源、合并结果集,都是比较消耗硬件资源的,
优化时通常在逻辑上没有明显进步空间才使用硬件优化方式
,故启用Parallel前应该考虑:
1、当前数据库设备有充足硬件资源,
2、查询表的数据量很大,超过一千万,可通过改变Parallel明显提高效率,
3、系统的当前负载较低,执行任务时不影响其它业务的使用,
1、开启parallel功能的语句
alter session enable parallel dml;
语法:/*+parallel(table_short_name,cash_number)*/
2、测试不同的parallel
A、默认不开parallel
测试结果
1、14.708s
2、15.462s
3、13.852s
select count(*)
from user_tables t
left join user_tab_comments v
on t.TABLE_NAME = v.TABLE_NAME
where Length(comments)<>8
order by num_rows desc;
B、打开parallel
测试结果
1、9.179s
2、10.917s
3、9.098s
alter session enable parallel dml;
select /*+parallel(t,32)(v,32)*/ count(*) --多表示例
from user_tables t
left join user_tab_comments v
on t.TABLE_NAME = v.TABLE_NAME
where Length(comments)<>5
order by num_rows desc;
3、查看Oracle能利用的最大并行度
- cpu_count表示cpu数
- parallel_threads_per_cpu表示每个cpu允许的并行进程数
- default情况下,并行数为cpu_count*parallel_threads_per_cpu
SQL> show parameters cpu
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 80
parallel_threads_per_cpu integer 2
resource_manager_cpu_allocation integer 80