各位新朋友~记得先点蓝字关注我哦~
Oracle中degree表示表的并行度,并行度默认为1
表并行度查询
select table_name,degree from dba_tables;

修改并行度
alter table <table_name> parallel;
值为default,并行度为参数cpu_count* parallel_threads_per_cpu对应的值
alter table <table_name> parallel <N>;
值为N,可以大于cpu_count,并且实际并行度为N
create table <> ….. parallel <N>;
值为N,可以大于cpu_count,并且实际并行度为N
取消并行度
alter table <table_name> noparallel;alter table <table_name> parallel 1;
除了degree并行度之外,另外一个在11g之后不推荐使用,但也会影响并行度,dba_tables.instances,默认值也是为1,可以用命令修改:
alter table <table_name> parallel (degree <N>|<default> instances <N>|<default> );
并行度计算:
degree <default>且instances <default> ,并行度为default
degree <default> 且instances <N> ,并行度为N
degree <N> 且instances < default > ,并行度为N
degree <N> 且instances <N> ,并行度为N*N
并行对性能的影响
只有当进行全表扫描的时候,并行度才会生效。
优点
在全表扫描时能够最大限度地利用服务器的多个cpu资源,使多个cpu同时工作,能够更快得到结果。
缺点
改变SQL执行计划,从原来索引范围扫描变成全表扫描,性能下降

取消并行之后

如何使用并行
不建议直接修改表的并行度,建议使用hint方式修改有并行度需求的SQL语句
1. /*+ parallel */ 或 /*+ parallel(<table>) */
相当于default,并行度为参数cpu_count * parallel_threads_per_cpu
2. *+ parallel() */ 或 /*+ parallel(<table>,<N>) */
用于指定并行度去访问指定表
表并行引发的相关故障
某医院客户反馈数据库连接报错,数据库进程数满了,数据库查询后发现数据库的进程数远远大于会话数

原因分析
表开启了并行,并行进程导致进程被用掉
查询v$px_process发现大量的并行进程

处理方法及结论
根据业务情况,适当修改表的并行度或者使用hint的方式并行,不建议直接修改表的并行度。
美创是国内领先的数据库服务提供商。服务团队拥有PG ACED 1名、Oracle&PG ACE 3人、DSI智库专家5名、DSMM测评师7名、OCM 20余人、数十名Oracle OCP、MySQL OCP、TDSQL TCP、OceanBase OBCP、TiDB PTCP、达梦 DCP、人大金仓、红帽RHCA、中间件weblogic、tuxedo、CISP-DSG、CISSP、CDGA、CDPSE、CZTP、CDSP等认证人员,著有《DBA攻坚指南:左手Oracle,右手MySQL》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》,《Oracle DBA实战攻略》等多本数据库书籍。运维各类数据库合计5000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、MongoDB、Redis、TDSQL、OceanBase、达梦、人大金仓等主流商业和开源数据库。美创拥有完善的运维体系和人员培养体系,并同时提供超融合、私有云整体服务解决方案、数据安全咨询及运营服务方案等,已为金融、政府、企业、能源等多个行业的客户提供量身定制的各类服务,赢得了客户的高度赞誉和广泛认可。






