https://blog.51cto.com/wyzwl/1948035
一、並行機制的簡述
並行處理的機制實際上就是把一個要掃描的數據集分成很多小數據集,Oracle會根據初始化參數 PARALLEL_MIN_SERVERS=n的值啟動幾個並行服務進程同時處理這些小數據集,最后將這些結果匯總,作為最終的處理結果返回給用戶。
二、並行使用場景
1、Parallel query(並行查詢)
執行並行查詢是需要符合以下條件:
A、SQL語句中有Hint提示,比如Parallel或者 Parallel_index。
B、SQL語句中引用的對象被設置了並行屬性。
C、多表關聯中,至少有一個表執行全表掃描(Fulltable scan)或者跨分區的Index range SCAN。
2、Parallel DDL(並行DDL操作,如建表,建索引等)
如:createtable xx parallel 4 as select * from xxx;
create index xxx on tab_xx(column) parallel 4;
3、Parallel DML(並行DML操作,如insert、update、delete等)
如:insert/*+parallel(t 2) */ into t select /*+parallel(t1 2) */ * from t1;
下面從以上三個場景各舉一例來說一下並行易踩的坑。
三、並行對執行計划的影響
某日,開發突然找過來:喂、DBA嗎?有個測試環境的SQL執行計划和生產環境不一樣,嚴重影響測試進度。記得當時差不多是這樣的,對方向我扔了一條執行計划有問題的SQL,然后不說話。作為一個菜鳥,趕緊把生產執行計划和測試環境對比了一下,發現果真不一樣,折騰了好久,才發現該SQL中的某個表並行度為8,導致了執行計划異常。記得該表是TB級的大小,是個多表管理的查詢語句,並行度為8之后走了全表掃描(Full table scan),可以想象是又多慢。因為是測試環境,誰做什么操作之后沒有關閉並行就不深究了。下面看一下oracle聯機文檔:http://download.oracle.com/docs/cd/E11882_01/server.112/e10821/ex_plan.htm#PFGRF94687對並行處理的執行計划的解讀。
