暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle Parallel使用经验谈

IT界数据库架构师的漂泊人生 2020-12-14
6037

记得很多年前,在深圳软件园里给一家公司开发经营分析系统,其中一个同事从富士康出来的它自称是DBA。不过公司给他安排的是数据库开发工程师的职位,参与经营分析系统的开发工作。此时该系统已上线了半,有大量的领导在使用。他老兄使用工具查询开启了并行,没有指定并行数,立刻导致系统不能使用,尤其是领导无法连接进来查看报表数据。

并行技术应该在什么情况下使用呢? 

该技术要在准备完成一件很大的工作任务时,使用常规方法需要1个小时,并且该任务可以拆分多个子任务同时进行。比如说一个10GB的全表扫描,就可以开启并行技术,把表分成5分,每个子任务扫描其中2GB大小,然后再汇总。(不要抠2GB数字)

比如 下面统计全国百家姓的收入排行版

SELECT  SUBSTR(NAME,1,1),SUM(MONEY) 

  FROM   country

group by SUBSTR(NAME,1,1)

order by 2 desc;


 为了快速完成统计 要加并行提升 /*+ parallel(n)*/ 一般n为2,4,6,8 2的指数.

SELECT  /*+ parallel(8)*/ 

          SUBSTR(NAME,1,1),SUM(MONEY) 

FROM country

group by SUBSTR(NAME,1,1)

order by 2 desc;


那么你会发现系统多出了8个进程,8个会话,而且执行计划都看到PX 的字眼.

那富士康的同事没有指定N值 ,这样给的提示 /*+ parallel */  这样的提示系统最大限度使用资源,从而导致其他人无法使用系统. 这点应该写在SQL规范里,禁止选项中.

 

那是不是看到跑得慢的SQL都试一试? 

   绝非如此,不要看到一项提高SQL的技术,就认为它是个润滑油,什么地方都用的去,它有使用的场景.那就是   1 系统资源必须很充分,  2 只有少量的用户使用.

因此只有OLAP系统使用并行技术才能提高速度又没有什么风险. 

当然OLTP场景下也可以,在OLTP数据维护下方可以使用. 比如建索引,CATS移动数据.

create table tmp_xxxx parallel 8 as select * from xxxx;

creae index ix_xxxx_name on xxxx(name) parallel 8;

这样会加快完成速度. 当然小心一点,那就是别完了取消并行技术. 这样的开并行会留在数据字典上的. 日后所有查询该表的SQL自然开启并行技术,所以要关掉它. 

alter table tmp_xxxx noparallel; 

alter index ix_xxxx_name noparallel;


DML并行:

DML是数据修改 INSERT,UPDATE,DELETE下 当要更新1亿条数据的状态值时,想要尽快地下班,别加班傻等到晚上10点. 那就这样干!

alter session enable parallel dml;

 update country set money=money+10000;

commit;

alter session disable parallel dml;


为什么最后要DISABLE它呢? 因为开启DML并行后会加表锁,而且是独占型的锁.会阻止其他人修改数据.


最后您即使给了提升,当优化器不认可使用也是大有的. 因为它优化器觉得还有更好的办法.

小仙再次提醒各位 小心并且注意并行PARALLEL的使用场景:

1 系统资源必须很充分,  主要是IO资源足够空闲,又时候并且多了IO等待很慢. 

2 只有少量的用户使用.这用户不仅是人,还有定时任务产生的会话, ORABBIX定时监控等.

一般系统千万别开PARALLEL ,如果是OLTP 比如报表,数据仓库,大数据,经验分析这类鬼系统,就可以放心地开!


文章转载自IT界数据库架构师的漂泊人生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论