それぞれがプロシージャを1000/N回呼び出すNセッションをシミュレートしたいので、おそらく次のようなことをします
CREATE OR REPLACE PROCEDURE call_myproc_n_times( p_n IN NUMBER )
AS
p_status NUMBER;
p_ora_error_code VARCHAR2(1000);
p_ora_error_msg VARCHAR2(1000);
BEGIN
FOR i IN 1 .. p_n
LOOP
myproc( 'test',
p_status,
p_ora_error_code,
p_ora_error_msg );
END LOOP;
END;
DECLARE
l_num_sessions number := 10;
l_exec_per_session number := 100;
l_jobno pls_integer;
BEGIN
FOR i IN 1 .. l_num_sessions
LOOP
dbms_job.submit(
l_jobno,
'BEGIN ' ||
' call_myproc_n_times( ' || l_exec_per_session || ' ); ' ||
'END;',
sysdate + interval '1' minute );
END LOOP;
commit;
END;
この例では、データベースのJOB_QUEUE_PROCESSES
を想定して、各セッションが100回連続してプロシージャを実行する10個のセッションを開始します。 は少なくとも10です。これは、Oracleがバックグラウンドで同時に10個のジョブを実行できることを意味します。 CALL_MYPROC_N_TIMES
の作成 手順は厳密には必要ありません。ジョブで実行する文字列の作成が簡単になるだけです。
別の方法は、それぞれがMYPROC
と呼ばれる1000個のジョブを送信することです。 一度、JOB_QUEUE_PROCESSES
に依存します 同時に実行されるジョブの数を制限するパラメーター。それはうまくいくでしょう、より少ない同時セッションをより多く実行したいのであれば、データベースパラメータを変更するのはもっと難しいです-L_NUM_SESSIONS
を調整するのは簡単です 私が投稿したコードで。