バッチ ジョブが実行される時間帯に応じて PDQ リソースの割り当てを微調整するために、曜日 / 時間帯の規則に基づいて PDQPRIORITY を設定するユーティリティがあります。
PDQPRIORITY=$(throttle); export PDQPRIORITY
ただし、これはスクリプトの開始時に修正されるため、実行時間の長いジョブが進行中に調整されたり調整されたりすることはありません。これを修正するために、次のことを試しました。
CREATE PROCEDURE informix.set_pdq() RETURNING VARCHAR(50);
DEFINE pdq, dow SMALLINT;
DEFINE hr SMALLINT;
LET dow = WEEKDAY(CURRENT);
LET hr = TO_CHAR(CURRENT, '%H');
IF (dow == 0 OR dow == 6 OR hr < 8 OR hr > 14) THEN
LET pdq = 100;
SET PDQPRIORITY 100; -- SET PDQ does not accept a variable name arg.
ELIF (hr >= 8 AND hr <= 10) THEN
LET pdq = 40;
SET PDQPRIORITY 40;
ELIF (hr >= 11 AND hr <= 12) THEN
LET pdq = 60;
SET PDQPRIORITY 60;
ELIF (hr >= 13 AND hr <= 14) THEN
LET pdq = 80;
SET PDQPRIORITY 80;
END IF;
RETURN "PDQPriority set to " || pdq;
END PROCEDURE;
SQL のさまざまな間隔で、以下を追加しました。
EXECUTE PROCEDURE set_pdq();
ただし、失敗することはありませんが、SET PDQ のスコープは SPL に対してローカルのようです。onstat -g mgm
割り当てられた元のリソースへの変更は報告されません。したがって、これらのset_pdq()
呼び出しを追加しても効果はないようです。プログラムの開始時に割り当てられたリソースは固定されたままです。
コードは、シェルに埋め込まれた SQL です。つまり、次のようになります。
dbaccess -e $DBNAME << EOSQL
SELECT .. INTO TEMP ..;
EXECUTE PROCEDURE set_pdq();
SELECT .. INTO TEMP ..;
--etc
EOSQL
そのため、バッククォートまたは $( ) 補間は、ヒア ドキュメントが dbaccess に渡されるスクリプトの開始時に発生します。(それは明らかなものを排除しましたSET PDQPRIORITY $(throttle);
:)
うわー、それはすぐに言葉になりました。これらのバッチジョブを完全に書き直すことを伴わない、これを達成する方法を誰か提案できますか? 一時テーブルへの依存度が高いため、SQL を小さな断片に分割することはできません。