天天看點

Oracle 11.2中控制并行的新參數

在Oracle 11.2中引入了幾個新的并行查詢參數。對于資料倉庫應用來說經常利用并行處理來快速有效地處理資訊尤其是查詢非常大的表或加入了複雜的算式更應該使用并行查詢。在Oracle之前的版本中我們不得不或多或秒的來決定自動并行度。決定一個最佳并行度是非常困難的。真實最佳并行度依賴于資料塊在磁盤上的實體位置以及伺服器的CPU數量(cpu_count)為了解決并行查詢的這些問題

在Oracle11.2中引入了以下新的并行查詢參數

1.parallel_degree_policy

parallel_degree_policy參數可以被設定為manual,auto或limited在Oracle11.1中parallel_degree_policy預設設定為manual(禁用了automatic degree of parallelism,statement queuing與in-memory parallel execution)

但我們可以手動指定并行度

parallel_degree_policy=auto就會啟用以下新功能:

并行度(DOP)将會基于SQL語句中的操作類型和表的大小來自動計算。例如對大表排序的并行度(DOP)可能比對小表操作的并行度高。

如果請求或請求的并行度(DOP)因為并行服務程序正處于繁忙狀态而不能獲得滿足那麼Oracle直到有足夠的并行子程序可用之前将不會執行語句而不是降低并行度或串行執行SQL語句。在11gr2之前的版本中當沒有足夠的并行程序服務程序滿足所請求的并行度(DOP)時可以會出現以下三種情況中的一種:

SQL語句将會降低并行度(DOP)來以并行方式執行

SQL語句以串行方式來執行

如果parallel_min_percent被設定将收到"ORA-12827:insufficient parallel query slaves available"

Oracle并行子程序可能使用buffered IO而不是直接IO。例如"in-memory parallel execution"

parallel_degree_policy設定為limited

對某些語句啟用自動并行度但statement queuing與in-memory parallel execution被禁用。隻會對通路使用parallel子句來設定DEFAULT并行度的表或索引應用自動并行度。

因為表的并行度是1,而不是default,現在使用parallel子句來修改表t1的并行度

2.parallel_min_time_threshold

parallel_min_time_threshold參數用來指定SQL語句是否并行執行一個門檻值也就是當優化器根據統計資訊所估算的執行時間如果大于這個參數值就是使用并行如果估算的執行時間小于這個參數值就會串行執行。這個參數值預設值是10秒。并且自動并行度隻要在parallel_degree_policy參數被設定為auto或limited時才會生效。從下面的資訊可以看到到語句的執行時間小于10秒時優化器以是串行而不是并行方式來執行的

再次增加表t1的資料記錄

可以看到執行時間為9.05秒Oracle使用串行執行繼續向表t1增加記錄

現在可以看到當parallel_degree_policy=auto,parallel_min_time_threshold=auto時sql執行時間超長10秒時就會使用自動并行。

3.parallel_degree_limit

使用自動并行度時Oracle會自動決定是否以并行方式來執行SQL語句以及所使用的并行度。優化根據語句所請求的資源來決定一個語句的并行度。然而優化器所使用的并行度是受限制的以防止并行程序擊垮系統。也就是是系統中所能使用的并行度的上限為parallel_degree_limit參數值。它有三個參數值可以選擇

CPU

最大并行度由系統中的CPU數量來限制。其計算公式為parallel_degree_limit=parallel_thread_per_cpu*cpu_count

當然你也可以将parallel_degree_limit的值設定為一個具體的值以達到明确控制實際并行度的目的。

IO

優化器能使用的最大并行度由系統的I/O能力來限制。這個值等于系統總吞吐量除以每個程序的最大I/O帶寬。但在Oracle 11.2中為了将parallel_degree_limit設定為IO必須執行dbms_resource_manager.calibrate_io過程來收集系統的I/O統計資訊。這個過程将會計算系統的總吞吐量與每個程序的最大IO帶寬。

具體數字

當自動并行度被激活時指定一個SQL語句所能使用的最大并行度。這個參數隻有當parallel_degree_policy設定為auto或limited時才生效。

4.parallel_force_local

parallel_force_local參數控制RAC環境中的并行執行。預設情況下優化器可以從RAC中的任何節點或所有節點中選擇并行執行SQL語句的并行程序。當parallel_force_local設定為true時那麼并行程序就隻能是與查詢協調者(執行sql語句的節點)在同一個RAC節點中也就是說并行程序是不能跨節點的.