
No.2ベストアンサー
- 回答日時:
#1です。
リアルで15分は掛かりすぎですよね。
トレースを取るなどして、何にそれほど時間が掛かっているのかを解決すべきかと思います。
(10gなので Automatic Workload Repository(AWR)辺りで)
ご質問への解としては、一案として。
(結構、込み入った事をしています)
仮に、問題のSPを SP_OSOI とします。
4発パラレルでリソースを食い合う事無く、15分で終わる事が大前提となります。
まず、制御用テーブルを作ります。
NON-UNIQUEインデックスとして2つのSESSION-IDを持ちます。
(※PKでも大丈夫かな)
この値としては、userenv('SESSIONID') が入ります。
1つは、呼び出し側セッションのSESSION-ID、もう1つは(後述する)JOB起動されたセッションのSESSION-IDです。
それ以外は、処理済みフラグです。
SP_OSOIのラッパSP_OSOI_WRAPを作ります。
ラッパの仕事は、パラメータの授受と制御用テーブルの更新。
パラメータはSP_OSOI本来のパラメータ以外に、ラッパを呼び出す側から受け取るSESSION-IDです。
ラッパの中でSP_OSOI実行前に制御用テーブルにINSERTし、実行後に制御用テーブルを処理済みとして更新します。
呼び出し側のメインSPは、DBMS_JOBと動的SQLを使ってSP_OSOI_WRAPを4発実行します。
DBMS_JOB自体が非同期で実行するセッションとなるので、4発シリアルでもスルっと一瞬で流れるはずです。
その後は、JOBの時間を即時にすれば、SP_OSOIは、DBMS_JOBによって(ほぼ)パラレルで処理が流れます。
4発実行の後、LOOPで、自分のSESSION-IDがすべて処理済みになるまで制御用テーブルをSELECTし続けます。
ここは、CPU食いまくる処理になるのでLOOP内で5分くらいずつSLEEPした方がいいでしょう。
SLEEPの閾値をどの辺にするかによりますが、パラレルなので15~20分くらいで終わるはずです。
(理論的には)
No.1
- 回答日時:
いくつか補足が必要です。
・バッチ処理なのかリアルタイムなのか
・遅いプロシージャは1つ?
・それを現在4回シリアルに実行している?
・それを単純に1回のパラレル処理にして、業務要件は担保できる?
以下は、バッチと想定した場合の解です。
バッチであれば、その遅いプロシージャを単純に並行で動かすだけなら、同時間に4発動くようにスケジュールすればよいだけでは?
OracleのJOB管理でも可能ですし、Windows系ならタスクスケジューラ、Unix系ならcron。
それ以外で、JP1などの統合運用ツールを導入しているのであれば、それでもよいと思います。要するに現在の運用ポリシーに則った方法であれば何でもOKです。
この場合、既に「メインプロシージャからシリアル4回呼び出し」で作りこんであるなら、メインプロシージャは不要になります。
それと、これはご質問に対する回答ではありませんが、「長時間になる」のは、仕方がない事なのか、チューニングの余地があるのか、を考慮すべきではないかと思います。
OTNでチューニング関連のマニュアルをダウンロードできますが、興味があるなら、何かチューニング系の本を購入する事をお薦めします。
この回答への補足
utakataXEXさん、ご回答と共に
また、私の至らない点を補足していただきありがとうございます。
質問に回答いたします。
・バッチ処理なのかリアルタイムなのか
⇒リアルタイムです。1プロシージャ15分程度かかっておりますが、
4回動かすため60分かかっております。
・遅いプロシージャは1つ?
⇒一つです。
・それを現在4回シリアルに実行している?
⇒シリアルで実行しています。
・それを単純に1回のパラレル処理にして、業務要件は担保できる?
⇒問題ありません。
何か助言していただけることがありましたら、宜しくお願い致します。
ネットなどでもチューニングについては、調べておりますが、
チューニングについては、別途相談させていただきたいと思っております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CPU・メモリ・マザーボード PコアとEコアの使い分け 3 2023/07/30 22:09
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- その他(お金・保険・資産運用) 愛人契約 1 2022/09/17 08:19
- プリンタ・スキャナー ブラザ-製プリンタ-DCP-J582N不具合改善アドバイス依頼 2 2022/10/17 15:40
- Visual Basic(VBA) Excel VBA 大量のレコードからある列の重複数をカウントする方法?拡張編 7 2022/08/22 13:43
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- その他(プログラミング・Web制作) 監視カメラを水平につないでパノラマの映像を作りたい 1 2022/09/06 15:26
- SEX・性行為 えちえちのときの陰毛処理について質問です! 彼女がvio剃っていないと嫌ですか?毛量などは減らしたり 7 2023/02/06 20:06
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて 重複したものがあれば行を削除するとい 1 2023/02/27 18:49
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DELETE文でFROM句を省略した場合
-
他の処理でselectさせないよう...
-
SQLでスキーマ名(所有者名)の...
-
Data Pump で大量データインポ...
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
CLOB型へのINSERT
-
TruncateしたテーブルへのInser...
-
Access レコードを追加できませ...
-
運用中のALTER TABLE
-
b-tree について
-
DICの何番に相当するでしょうか?
-
AccessのInsertクエリのあとつ...
-
検索結果の列数を動的に変更したい
-
datapumpの実行方法について
-
viewのバックアップ
-
SQLでCREATE TABLE文の作成
-
IS NULL
-
truncate文で全テーブルを一気...
-
INDEXの無効化
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DELETE文でFROM句を省略した場合
-
RDBのテーブル種類の違い
-
object browser で処理を中断す...
-
同じSELECT文同士でのデ...
-
accessでイベントを中止するよ...
-
他の処理でselectさせないよう...
-
[性能改善]AccessのDBに大量の...
-
トランザクションの考え方の疑問点
-
年度毎にシーケンスの初期化?
-
PL/SQLでmdb(Access)ファイルへ...
-
PL/SQLの平行処理について
-
チューニング対象のSQLの見つけ...
-
ActiveX DLLでのオラクルのトラ...
-
統計情報の取得=コミットですか?
-
UPDATE がうまくいかない
-
PL/SQLでの処理について
-
処理速度の見積もり時間について。
-
C#でトランザクション開始後参...
-
DBリンクエラーについて
-
1件あたりの処理時間を検討する...
おすすめ情報