改善并行的优化手段:
1.重新调度并行SQL,以便它们不会试图并发执行。如果PARALLEL_DEGREE_POLICY被设成AUTO,oracle11G发行版本2可以自动重新调度SQL。
2.调整并行配置的参数以允许更大的并发并行。可能通过增加PARALLEL_THREADS_PER_CPU或PARALLEL_MAX_SERVERS来实现此目的。风险是并行执行的数量将大于系统能够支持的个数,导致SQL性能的下降。
3.增加数据库服务器的能力,可以增加CPU 的个数,RAC集群的实例个数和磁盘阵列的磁盘个数。
4.调整PARALLEL_MIN_PERCENT允许SQL以减少的并行数运行,而不是发出一个错误。
V$PQ_TQSTAT 可以看到每个集合间传输数据的信息
V$PQ_SLAVE
V$PX_SESSION 实时得到系统正在发生的并行执行的视图,可以结合V$SESSION,V$SQL的关联来查询
V$SYSSTAT 包含一些与并行查询降级有关的统计数据
并行过程中的串行,会影响整体的性能
高效的并行依赖于并行子进程处理的均匀分布,可以使用V$PQ_TQSTAT视图来评估并行子进程的负载均衡的效率。
PARALLEL_FORCE_LOCAL可以设置为限制并行处理只针对当前实例
基于索引的查询通常是不能并行的。但是如果涉及的索引是分区表的本地索引,使用该索引的查找可以被并行处理。
并行搜集统计信息
exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'T1',CASCADE=>TRUE,ESTIMATE_PERCENT=>100,DEGREE=>4);
使用并行HINT
/*+ PARALLEL(table,)*/
/*+ NO_PARALLEL(table)*/
/*+ PARALLEL_INDEX(table,[index,[degree]])*/
/*+ NO_PARALLEL_INDEX(table[,index])*/
/*+ PQ_DISTRIBUTE(TABLE,OUT,in)*/
表的并行度
ALTER TABLE TABLE_NAME PARALLEL [N];
修改session的并行度
alter session force parallel query;
alter session force parallel query parallel n;
alter session force parallel dml;
alter session force parallel dml parallel n;
默认并行度=PARALLEL_THREADS_PER_CPU*CPU_COUNT
RAC中的跨节点
*.instance_groups='NBS','NBS1','NBS2','NBS3'
NBS1.parallel.instance_groups='NBS1'
NBS2.parallel.instance_groups='NBS2'
NBS3.parallel.instance_groups='NBS'
该作用为1.2禁止跨节点并行,3节点允许跨节点并行
常用的查询方式:
select slave_name,status from v$pq_slave;
select t.event,t.program,t.seconds_in_wait,t.state from v$session t where username='OWRER' and status='ACTIVE';
select addr,status,user_ublk,used_urec,cr_get from v$transaction;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31419724/viewspace-2131828/
,如需转载,请注明出处,否则将追究法律责任。