tech_memo / ORACLE / Parallel


tech_memo/ORACLE

参考

実行計画の見方

アーキテクチャ

処理概要

  1. ユーザー・セッションまたはシャドウ・プロセスが、コーディネータの役割を引き受けます。
    これは、問合せコーディネータ(QC)またはパラレル実行(PX)コーディネータと呼ばれることもあります。
    QCは、パラレルSQL文を開始するセッションです。
  2. PXコーディネータは、パラレル実行(PX)サーバーというプロセスを必要な数だけ取得します。
    PXサーバー(パラレル・スレーブ・プロセス(PQプロセス))は、セッションを開始するかわりにパラレルで処理を実行する個々のプロセスです。
  3. SQL文は、全表スキャンまたはORDER BY句などの、一連の操作として実行されます。
    各操作は、可能な場合はパラレルで実行されます。
  4. PXサーバーで文の実行が完了すると、PXコーディネータで、パラレルで実行できない処理の部分が実行されます。
    たとえば、SUM()演算を含むパラレル問合せでは、各PXサーバーで計算された小計それぞれを合計する必要があります。
  5. 最後に、PXコーディネータによって結果がユーザーに返されます。
  • parallel.png
    和名略称
    問い合わせコーティネータPXコーティネータ、QC
    パラレル実行サーバ、パラレル・スレーブ・プロセスPXサーバ、PQプロセス、QS

操作内パラレルと操作間パラレル

  • 操作内パラレル(イントラパラレル)
  • 操作間パラレル(インターパラレル)
  • parallel2.gif

パラメータ

名前意味デフォルト
PARALLEL_MAX_SERVERSPXサーバ(PQプロセス)最大起動数CPU_COUNT×PARALLEL_THREADS_PER_CPU×10
初期化パラメータ初期化パラメータPGA_AGGREGATE_TARGETが未設定のときは、CPU_COUNT×PARALLEL_THREADS_PER_CPU×5
PARALLELE_MIN_PERCENT要求した数のPQプロセスが利用できない場合の挙動
・0:獲得できた数でパラレル実行するが、1つも確保できなければシリアル実行する
・1-100:要求した数に対して、指定した割合が確保できない場合はエラー(ORA-12827: 使用可能なパラレル問合せスレーブが足りません。)とする(50の場合は、要求した数の半分が確保できればパラレル実行する)
0
PARALLEL_DEGREE_POLICY自動並列度、文のキューイング、インメモリー・パラレル実行を使用可能にするかどうかを指定MANUAL
MANUAL
自動並列度、文のキューイング、インメモリー・パラレル実行を使用禁止にします。これによって、パラレル実行の動作をOracle Database 11g リリース2(11.2)以下の動作に戻します。
LIMITED
一部の文に対して自動並列度を使用可能にしますが、文のキューイングおよびインメモリー・パラレル実行は使用禁止になります。自動並列度は、PARALLEL句を使用しているDEFAULTの並列度で明示的に修飾されている表または索引にアクセスする文に対してのみ適用されます。DEFAULTの並列度で修飾されている表または索引にアクセスしない文は、MANUAL動作のままになります。
AUTO
自動並列度、文のキューイング、インメモリー・パラレル実行を使用可能にします。

パラレル実行方法

  • 表や索引に対してパラレル属性を定義する
    create table tablename … parallel 4;
    
  • alter session force parallelでセッションに対して設定する
    alter session force parallel query parallel 4; 
    -- 実行するクエリー --
    
  • ヒント句をSQLに埋め込む
    select /* parallel (emp) */ * from emp;
    
  • 初期化パラメータを変更する
    alter system set parallel_degree_policy=limited;
    または
    alter system set parallel_degree_policy=auto;
    
  • SQL文のパラレル実行を可能にする
    SQL> alter session enable parallel dml|ddl|query;
    
  • パラレルDMLを直接指定する
    SQL> INSERT /* APPEND PARALLEL (emp,2) */
         INTO emp SELECT * FROM emp_master@dblink;

自動並列度設定(11gR2から)

  • 初期化パラメータ変更
     alter system set parallel_degree_policy=auto;
  • alter session 文での変更。そのセッション内のみ有効になる
    alter session set parallel_degree_policy=AUTO;