Oracle的並行查詢嘗試

2021-04-13 00:23:57 字數 2020 閱讀 9764

分析表,重新估算統計資訊

analyze table tasharecurrents estimate statistics;

開啟或關閉表的並行選項

alter table tasharecurrents parallel;

--alter table tasharecurrents noparallel;

啟用oracle hint,強制執行計畫,分別記錄有並行和無並行的執行時間

select --/*+ parallel(t)*/

b.fundname **名稱,

sum(nvl(t.lastshares, 0)) 份額,

sum(decode(m.individualorinstitution, '1', 0, t.lastshares)) 機構投資者,

sum(decode(m.individualorinstitution, '1', t.lastshares, 0)) 個人投資者,

count(distinct(decode(m.individualorinstitution, '1', null, t.taaccountid))) 機構投資者數量, -- null的個數不計入count

count(distinct(decode(m.individualorinstitution, '1', t.taaccountid, null))) 個人投資者數量

from tasharecurrents t,

tafundtype b,

taaccoinfo m

where 1 = 1

and t.fundcode = b.fundcode

and t.taaccountid = m.taaccountid

and t.transcfmdate <= to_date('20070430', 'yyyymmdd')

and t.sharevaliddate > to_date('20070430', 'yyyymmdd')

and t.lastshares > 0

group by b.fundname

;執行計畫為

select statement, goal = choose   cost=22780 cardinality=13 bytes=832

sort group by   cost=22780 cardinality=13 bytes=832

sort group by   cost=22780 cardinality=13 bytes=832

sort group by   cost=22780 cardinality=13 bytes=832

hash join   cost=17001 cardinality=6908778 bytes=442161792

table access full object owner=ta object name=tafundtype cost=2 cardinality=13 bytes=195

hash join   cost=16999 cardinality=6908778 bytes=338530122

table access full object owner=ta object name=taaccoinfo cost=2114 cardinality=2590572 bytes=33677436

table access full object owner=ta object name=tasharecurrents cost=14885 cardinality=6908778 bytes=248716008

最後,比較發現並行對該查詢沒有效果,有無並行的執行時間基本相同。初步估計可能跟tasharecurrents的儲存結構有關係。tasharecurrents有500萬行,記錄平均長度約150byte,taaccoinfo約200萬行記錄,記錄平均長度約150byte。兩個表沒有分割槽。

其它相關sqlplus命令:

show parameter opt

alter system set optimizer_mode = all_rows scope = spfile;

Oracle 並行查詢

並行查詢允許將乙個sql select語句劃分為多個較小的查詢,每個部分的查詢併發地執行,然後會將各個部分的結果組合起來,提供最終的答案。我們來看乙個例子 1.執行如下一串sql語句,建立乙個叫big table的表,期間會讓你錄入1的值 想要往big table表裡面插入多少行資料 我錄入的是10...

Oracle 並行查詢

所謂並行執行,是指能夠將乙個大型序列任務 任何dml,一般的ddl 物理的劃分為叫多個小的部分,這些較小的部分可以同時得到處理。何時使用並行執行 1 必須有乙個非常大的任務 2 必須有充足的資源 cpu,i o,memory alter table test a parallel 告訴oracel,...

用Oracle並行查詢發揮多CPU的威力

在乙個單獨的伺服器中安裝更多的cpu成為目前的乙個趨勢。使用對稱多處理伺服器 smp 的情況下,乙個oracle伺服器擁有8個 16個或32個cpu以及幾吉位元ram的sga都不足為奇。oracle跟上了硬體發展的步伐,提供了很多面向多cpu的功能。從oracle8i開始,oracle在每個資料庫函...