您好,登錄后才能下訂單哦!
這篇文章主要講解了“Oracle并行查詢介紹以及測試效果”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Oracle并行查詢介紹以及測試效果”吧!
并行概念
所謂并行執行,是指能夠將一個大型串行任務(任何DML,一般的DDL)物理的劃分為叫多個小的部分,這些較小的部分可以同時得到處理。
何時使用并行執行:
1、必須有一個非常大的任務
2、必須有充足的資源(CPU,I/O,MEMORY)
并行查詢
并行查詢允許將一個SQL SELECT 語句劃分為多個較小的查詢,每個查詢并發的運行。最后將每個較小查詢得到的結果組合起來,得到最終結果。
啟動并行查詢幾種方式:
1、在查詢中使用一個hint提示:
select /*+ parallel(4) */ count(*) from test_a ;---指定一個并行度為4的并行查詢。
2、利用alter table修改表:
alter table test_a parallel 4;--告訴oracle,在創建這個表的執行計劃時,使用并行度4。
數據測試
昨天自己在PL/SQL里面自己做了一下測試,我們先看看,我的數據庫表里tskuplu表有24548條記錄。
首先我先用正常查詢的方法,查詢所有的出來后發現是103秒,如圖:
然后我再用并行查詢的方法,設置為3進程后查詢,耗時85秒。如圖:
到這時我瞬間覺得一下子節省了接近18秒的時候,覺得真不錯,不過我后來又用普通查詢再查一次的時候,也是80多秒,瞬間心情不好了。為了再驗證一下并行查詢,今天我又開始進行了一下測試。
我們今天先運行并行查詢看看效果,79秒。
然后再執行了一下普通的查詢,結果時間也差不多,這里我就沒放圖,在想這個并行查詢是不是沒有執行的原因 ,于是我們就改了下另一種方式,把表結構修改了下,
通過上面修改了表的自動并行查詢方法,我們直接用普通查詢看看查詢的效果,結果是97秒
通過v$px_process查詢后發現并行也已經執行了,但是結果并不令人滿意。
結論
通過上面的測試,我覺得可能我的測試機器也有一定的問題,所以來說并行查詢并沒有對查詢有實質性的提高,本來我覺得如果有實質性的提高,那樣我接下來要做的程序中可以考慮用并行查詢提出所有,再通過緩存處理,現在來看,還是用自己寫的分頁查詢來實現比較合適。
總結一下并行查詢的常見問題(摘自網上)
1、看看并行選件是否安裝
Select * FROM V$OPTION
where parameter like 'Parallel%';
看看
Parallel execution是不是TRUE
2、如果是TRUE,執行語句后查看
select * from V$pq_sesstat;
where name like '%Parallelized';
如果Queries Parallelized>>0就說明是執行了并行
3、可以強制使用PARALLEL,和CPU數量無關,不過在單個CPU下使用并行沒有什么好處
alter session force parallel query;
4、你是怎么知道語句沒有使用PARALLEL?
如果你用EXPLAIN ,那么有兩個腳本看執行計劃UTLXPLS.UTLXPLP前一個是看串行計劃的,后一個才能看到并行計劃,如果你使用SET AUTOTRACE,那么你如果看到P->S,那么說明計劃已經是并行的了。
1.與并行查詢有關的參數有哪些?
parallel_adaptive_multi_user boolean
啟用或禁用一個自適應算法,旨在提高使用并行執行方式的多用戶環境的性能。通過按系統負荷自動降低請求的并行度,在啟動查詢時實現此功能。當 PARALLEL_AUTOMATIC_TUNING = TRUE 時,其效果最佳。
TRUE | FALSE 如果 PARALLEL_AUTOMATIC_TUNING = TRUE,則該值為 TRUE;否則為 FALSE
parallel_automatic_tuning boolean
如果設置為 TRUE,Oracle 將為控制并行執行的參數確定默認值。除了設置該參數外,你還必須為系統中的表設置并行性。 TRUE | FALSE FALSE
parallel_execution_message_size integer
指定并行執行 (并行查詢、PDML、并行恢復和復制) 消息的大小。如果值大于 2048 或 4096,就需要更大的共享池。如果 PARALLEL_AUTOMATIC_TUNING =TRUE,將在大存儲池之外指定消息緩沖區。
2148 - 無窮大。 如果 PARALLEL_AUTOMATIC_TUNING 為 FALSE,通常值為 2148;如果PARALLEL_AUTOMATIC_TUNING 為 TRUE ,則值為 4096 (根據操作系統而定)。
parallel_max_servers integer
指定一個例程的并行執行服務器或并行恢復進程的最大數量。如果需要,例程啟動時分配的查詢服務器的數量將增加到該數量。
0 -256 由 CPU_COUNT, PARALLEL_AUTOMATIC_TUNING 和 PARALLEL_ADAPTIVE_MULTI_USER 確定
parallel_min_percent integer
指定并行執行要求的線程的最小百分比。設置該參數,可以確保并行執行在沒有可用的恰當查詢從屬時,會顯示一個錯誤消息,并且該查詢會因此而不予執行。
parallel_min_servers integer
指定為并行執行啟動例程后,Oracle 創建的查詢服務器進程的最小數量。
0 - PARALLEL_MAX_SERVERS。
parallel_threads_per_cpu integer
說明一個 CPU 在并行執行過程中可處理的進程或線程的數量,并優化并行自適應算法和負載均衡算法。如果計算機在執行一個典型查詢時有超負荷的跡象,應減小該數值
任何非零值。 根據操作系統而定 (通常為 2)
2.當前時刻有那些并行查詢在跑?
14:13:46 SQL> desc v$px_session
名稱 是否為空? 類型
----------------------------------------- -------- ------------------
SADDR RAW(4)
SID NUMBER
SERIAL# NUMBER
QCSID NUMBER
QCSERIAL# NUMBER
QCINST_ID NUMBER
SERVER_GROUP NUMBER
SERVER_SET NUMBER
SERVER# NUMBER
DEGREE NUMBER
REQ_DEGREE NUMBER
3.怎么才能讓查詢有并行執行?
如果建表時指定了并行度,例:
Create TABLE LI2.PAR_T
(
a VARCHAR2 (5)
)
PARALLEL 5;
那么對該表做全表掃描時就會并行
14:26:05 SQL> set autot on
14:26:11 SQL> select * from par_t;
未選定行
已用時間: 00: 00: 00.02
Execution Plan
----------------------------------------------------------
0 Select STATEMENT Optimizer=CHOOSE (Cost=1 Card=82 Bytes=328)
1 0 TABLE ACCESS* (FULL) OF 'PAR_T' (Cost=1 Card=82 Bytes=328) :Q6000
1 PARALLEL_TO_SERIAL Select /*+ NO_EXPAND ROWID(A1) */ A1."A" FRO
M "PAR_T" PX_GRANULE(0, BLOCK_RANGE,
如果該表沒有指定并行度,可以在查詢時用hint 實現,例:
select /*+ full(t) parallel(t,5) */ * from your_table t where ...;
4.為什么本該并行執行的查詢沒有并行執行呢?
系統的并行度由parallel_max_servers 決定,如果它的并行度為5.如果有一個并行度為5的查詢在跑,那么系統在這條查詢運行完成前是不能再跑并行查詢的,該并行查詢將會以非并行方式運行.
5如果有并行度低于系統最大并行數的查詢在跑,那接下來的并行查詢會怎么跑呢?
When you specify parallel degree 4 oracle tries to allocate 4 producer slaves and 4 consumer slaves. The producers can feed any of the consumers.
If there are only 2 slaves available then we use these.
If there is only 1 slave available then we go serial
If there are none available then we use serial.
If parallel_min_percent is set then we error ora 12827 instead of using a lower number of slaves or going serial
6.設定parallel_max_servers 多大為好?
在多CPU的環境中,一般把CPU-1或CPU的數量做個最大并行數,因為并行查詢運行時還需要一個進程協調各并行進程.對于單CPU沒什么好說的.
7.并行查詢能提高系統的性能嗎?
并行查詢運行時,很容易會使機器運行在高負荷下,令系統對其它事務的處理時間大大加長.并行查詢一般適合在非業務高峰值人工執行,并不適合在程序中指定運行并行查詢.
PINNER:
并行不等于快速,僅僅是適合在數據倉庫環境,低業務請求與低并發操作的時候
典型的OLTP系統,如果我們的系統,是絕對不允許并行查詢出現的。
感謝各位的閱讀,以上就是“Oracle并行查詢介紹以及測試效果”的內容了,經過本文的學習后,相信大家對Oracle并行查詢介紹以及測試效果這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。