2011-08-23 8 views
5

あなたがここに見ることができるように私は、この並列度を動的に指定できますか?

INSERT/*+ APPEND PARALLEL (tst, 6) */ INTO test_table tst 
       (
        ************** 
        ************** 
        ************** 
       ) 
    SELECT /*+ PARALLEL (a, 6) */ DISTINCT 
        ************** 
        ************** 
        ************** 
     FROM src_table a; 

のようなものを並列処理を使用して選択し、SQLクエリを持って、私は度ハードコードされているが、私は多くのことから、それを行うにはしたくありませんこのコードが実行されているすべてのDBでCPUが同じではありません。

My requirement:利用可能なCPU数についてはV$PARAMETERを照会し、照会にはresult-2という値を使用する必要があります。かかわらず、使用可能なCPUの、このような何か...

DECLARE 
    degree  varchar2(1); 
BEGIN 
select value-2 INTO degree from v$parameter where name='cpu_count'; 

      INSERT/*+ APPEND PARALLEL (tst, degree) */ INTO test_table tst 
      (
       ************** 
       ************** 
       ************** 
      ) 
SELECT /*+ PARALLEL (a, degree) */ DISTINCT 
       ************** 
       ************** 
       ************** 
    FROM src_table a; 
END; 

しかし、私はそれがために期待どおりに動作していないと私は32個の並列スレッドを参照してください。これは正しい方法ですか?そうでない場合は、私の要件のための他の解決策はありますか?

答えて

3

のVivek、

あなたがPL/SQLファンクションまたはプロシージャ内で、あなたのINSERT文を構築するために、動的SQLを使用することができます。そうすることで、あなたがすでに取得している変数 "degree"を利用することができます。

ような何か:

DECLARE 
    degree varchar2(1); 
BEGIN 
    select value-2 
    INTO degree 
    from v$parameter 
    where name='cpu_count';    

    EXECUTE IMMEDIATE('INSERT /*+ APPEND PARALLEL (tst, '||degree||') */ '|| 
        ' INTO test_table tst ('|| 
        '  ************** '|| 
        '  ************** '|| 
        '  ************** '|| 
        ' ) '|| 
        'SELECT /*+ PARALLEL (a, '||degree||') */ '|| 
        '  DISTINCT '|| 
        '  ************** '|| 
        '  ************** '|| 
        '  ************** '|| 
        ' FROM src_table a'); 
END; 
+0

ええと....私はこのオプションをどうやって逃しましたか? Olieに感謝します。 – Vivek

2

自動的に並列処理を決定するために、Oracleを使用しないのはなぜは?

とのセッションのための学位を強制しないのはなぜ
+0

どうすればいいですか? 「デフォルト」を使用することによって?はいの場合は、使用可能なすべてのCPUを使用しないでください。 – Vivek

+0

@Vivek 'default'は別のものです。 Oracleは 'parallel_degree_policy'パラメータを' AUTO'に設定するとDOPを動的に決定できます。 – psur

1

:あなたは粒状あなたが好きな度合いを定義することができます微ほのめかしなければ

alter session force parallel dml parallel <dop>; 
alter session force parallel query parallel <dop>; 

関連する問題