Oracle Parallel使用經驗談

Oracle Parallel使用經驗談

祖仙教小凡仙 海鯊數據庫架構師 數據庫

記得不少年前,在深圳軟件園裏給一家公司開發經營分析系統,其中一個同事從富士康出來的它自稱是DBA。不過公司給他安排的是數據庫開發工程師的職位,參與經營分析系統的開發工做。此時該系統已上線了半,有大量的領導在使用。他老兄使用工具查詢開啓了並行,沒有指定並行數,馬上致使系統不能使用,尤爲是領導沒法鏈接進來查看報表數據。
並行技術應該在什麼狀況下使用呢?
該技術要在準備完成一件很大的工做任務時,使用常規方法須要1個小時,而且該任務能夠拆分多個子任務同時進行。好比說一個10GB的全表掃描,就能夠開啓並行技術,把表分紅5分,每一個子任務掃描其中2GB大小,而後再彙總。(不要摳2GB數字)
好比 下面統計全國百家姓的收入排行版session

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規範裏,禁止選項中.ide

那是否是看到跑得慢的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並行後會加表鎖,並且是獨佔型的鎖.會阻止其餘人修改數據.code

最後您即便給了提高,當優化器不承認使用也是大有的. 由於它優化器以爲還有更好的辦法.
小仙再次提醒各位 當心而且注意並行PARALLEL的使用場景:
1 系統資源必須很充分, 主要是IO資源足夠空閒,又時候而且多了IO等待很慢.
2 只有少許的用戶使用.這用戶不只是人,還有定時任務產生的會話, ORABBIX定時監控等.
通常系統千萬別開PARALLEL ,若是是OLTP 好比報表,數據倉庫,大數據,經驗分析這類鬼系統,就能夠放心地開!索引

相關文章
相關標籤/搜索