oracle的並行世界

巡完南山巡南山發表於2019-06-06

參考文章 How to Enable and Disable Parallelism (文件 ID 2394025.1)

啟用並行


在資料庫級別


設定 PARALLEL_MAX_SERVERS = N。其中 N 是預設值,可以根據以下推薦的公式得出:


預設值 = PARALLEL_THREADS_PER_CPU * CPU_COUNT * concurrent_parallel_users * 5


在例項中,以預設並行度執行的 concurrent_parallel_users 的數量取決於例項的記憶體初始化引數設定。例如,如果設定了 MEMORY_TARGET 或 SGA_TARGET 初始化引數,則 concurrent_parallel_users = 4。如果未設定 MEMORY_TARGET 或 SGA_TARGET,則檢查 PGA_AGGREGATE_TARGET。如果為 PGA_AGGREGATE_TARGET 設定了值,則 concurrent_parallel_users = 2。如果沒有為 PGA_AGGREGATE_TARGET 設定值,則 concurrent_parallel_users = 1。


在會話級別


在會話級別為 DML、DDL 和 QUERY 操作啟用並行,可以使用以下命令:

ALTER SESSION ENABLE PARALLEL DML;

ALTER SESSION ENABLE PARALLEL DDL;

ALTER SESSION ENABLE PARALLEL QUERY;

ALTER SESSION FORCE PARALLEL [DML|DDL|QUERY] PARALLEL <DEGREE>; -- Degree 的值可以是 2,4,8 或者 16 等等...

ALTER SESSION FORCE PARALLEL [DML|DDL|QUERY];


在語句級別


Parallel Hint 可以像下面這樣使用:


/*+ PARALLEL */ - 如果在物件級別沒有設定 DOP,則會使用預設 DOP

(或者) /*+ PARALLEL(4) */

(或者) /*+ PARALLEL(emp, 4) */

12c 中的新 Hint:ENABLE_PARALLEL_DML。這適用於 12c 或更高版本。


/*+ enable_parallel_dml parallel(x) */ -- (x)是可選的,其中 x 是所請求的並行度

例如:insert /*+ parallel(8) enable_parallel_dml */ into t1 select * from t1_1;


注意:

Hint “enable_parallel_dml”可以在/*+ */分隔符中以任何順序出現。


在物件級別


在物件級別啟用並行:


ALTER TABLE <TABLE_NAME> PARALLEL <n>;

ALTER INDEX <INDEX_NAME> PARALLEL <n>;

有關物件級別 DOP 的更多詳細資訊,請參閱 Document 1549214.1


注意:在大多數情況下,表和索引的 DOP 應該匹配。為索引和表設定不同的值可能會產生意外的計劃並影響效能。

 


取消並行


在資料庫級別


要在資料庫級別禁用並行,您必須設定:


PARALLEL_MIN_SERVERS = 0


PARALLEL_MAX_SERVERS = 0


在會話級別


在會話級別為 DML、DDL 和 QUERY 操作禁用並行,使用下面的命令:


ALTER SESSION DISABLE PARALLEL DML;

ALTER SESSION DISABLE PARALLEL DDL;

ALTER SESSION DISABLE PARALLEL QUERY;


在物件級別


禁用物件級別的並行:

ALTER TABLE <TABLE_NAME> PARALLEL 1;

ALTER INDEX <INDEX_NAME> PARALLEL 1;


注意:所有具有並行 hint 的語句仍將並行執行,因為語句級的 PARALLEL hint 優先於會話和物件級別


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26964624/viewspace-2646904/,如需轉載,請註明出處,否則將追究法律責任。

相關文章