(57)【要約】      （修正有）【課題】バッチジョブを処理する際の演算負荷を最適に制御することができる、バッチ処理制御技術を提供する。【解決手段】バッチジョブを処理するバッチ処理プログラムを制御するバッチ処理制御プログラムであって、ジョブリストから読み出したバッチジョブをジョブキューに登録し、１以上所定閾値以下の前記バッチ処理プログラムを並列起動する。その際、コンピュータの演算負荷が第１負荷閾値以上であるときは前記所定閾値を減算し、演算負荷が前記第１負荷閾値以下の第２負荷閾値未満であるときは前記所定閾値を加算する。【選択図】図３
2015060491.tif 000002
【特許請求の範囲】
【請求項１】
バッチジョブを処理するバッチ処理プログラムを制御する処理をコンピュータに実行させるバッチ処理制御プログラムであって、
前記バッチ処理プログラムは、前記コンピュータに、ジョブキューから前記バッチジョブを１件取り出してそのバッチジョブを処理するステップを実行させるように構成されており、
前記バッチ処理制御プログラムは、前記コンピュータに、
未処理の前記バッチジョブを列挙するジョブリストから前記バッチジョブを読み出す読出ステップ、
前記ジョブリストから読み出したバッチジョブを前記ジョブキューに登録する登録ステップ、
１以上所定閾値以下の前記バッチ処理プログラムを並列起動する起動ステップ、
前記コンピュータの演算負荷が第１負荷閾値以上であるときは前記所定閾値を減算する減算ステップ、
前記コンピュータの演算負荷が前記第１負荷閾値以下の第２負荷閾値未満であるときは前記所定閾値を加算する加算ステップ、
を前記ジョブリスト内の前記バッチジョブがなくなるまで繰り返し実行させる
ことを特徴とするバッチ処理制御プログラム。
【請求項２】
前記バッチ処理プログラムは、前記コンピュータに、前記ジョブキュー内にバッチジョブが存在するか否かを常時監視させるように構成されており、
前記バッチ処理制御プログラムは、前記減算ステップにおいて、前記コンピュータに、前記並列起動した前記バッチ処理プログラムを前記減算する数だけ終了させ、
前記バッチ処理制御プログラムは、前記加算ステップにおいて、前記コンピュータに、前記バッチ処理プログラムを前記加算する数だけさらに並列起動させる
ことを特徴とする請求項１記載のバッチ処理制御プログラム。
【請求項３】
前記バッチ処理プログラムは、前記コンピュータに、前記バッチ処理プログラムを終了させる命令を前記ジョブキューから読み出したときは当該バッチ処理プログラムを終了させるように構成されており、
前記バッチ処理制御プログラムは、前記減算ステップにおいて、前記コンピュータに、前記並列起動した前記バッチ処理プログラムのうちいずれか１つを終了させる命令を前記減算する数だけ投入させる
ことを特徴とする請求項２記載のバッチ処理制御プログラム。
【請求項４】
前記第１負荷閾値と前記第２負荷閾値はともに、前記コンピュータの最大演算負荷を指定する値に設定されている
ことを特徴とする請求項１から３のいずれか１項記載のバッチ処理制御プログラム。
【請求項５】
前記バッチ処理制御プログラムは、前記コンピュータに、前記ジョブリスト内の前記バッチジョブがなくなった時点で前記所定閾値の現在値を記憶装置に格納させ、
前記バッチ処理制御プログラムは、前記起動ステップにおいて、前記コンピュータに、前記記憶装置に格納されている前記所定閾値の値を前記起動ステップにおける前記所定閾値の値として採用させる
ことを特徴とする請求項１から４のいずれか１項記載のバッチ処理制御プログラム。
【請求項６】
前記バッチ処理制御プログラムは、前記コンピュータに、前記ジョブキューに登録した前記バッチジョブが処理中である旨のフラグを前記ジョブリストに書き込ませ、
前記バッチ処理プログラムは、前記読出ステップにおいて、前記コンピュータに、前記処理中である旨のフラグが付与されていない前記バッチジョブを前記ジョブリストから読み出させる
ことを特徴とする請求項１から５のいずれか１項記載のバッチ処理制御プログラム。
【請求項７】
請求項６記載のバッチ処理制御プログラムを実行するコンピュータを複数有することを特徴とするバッチ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バッチジョブを処理するバッチ処理プログラムを制御する技術に関する。
【背景技術】
【０００２】
計算機システムにおいて、バッチジョブは一般に演算負荷が高く、他のジョブと比較して長い処理時間を必要とする。そのため例えば、バッチジョブが本来想定していた時間以内で完了せず、他のジョブやプログラムに不具合が生じる可能性がある。
【０００３】
下記特許文献１は、トランザクション処理をホスト間で負荷分散させる技術を記載している。同文献においては、トランザクション監視機構１０６が業務処理プログラム１１０１のクラス毎の処理多重度を監視し、自ホストのＣＰＵが過負荷でなく、かつトランザクションを処理する業務処理プログラムのクラスの処理多重度が最大値に達していない場合に限り、自ホストのトランザクション処理システム１１０にトランザクションを処理させている（要約参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平９−１３８７７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記特許文献１記載の技術においては、メッセージ処理要求を処理するクラスの処理多重度が規定数に達した時点で、それ以上の多重処理を実施しないようにしている（特許文献１の図５におけるＳ２３〜Ｓ２５）。しかし、個々のジョブの処理負荷はジョブ毎に異なる場合があるため、処理多重度が上限に達しても演算負荷は余裕がある場合もあると考えられる。同様に、処理多重度が上限に達していなくても演算負荷の余裕がなくなる場合もあると考えられる。
【０００６】
また上記特許文献１記載の技術においては、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）使用率が閾値を超えている場合は過負荷状態であると判断してメッセージを他ホストに処理させ（図７のＳ４３、図８のＳ５４、００２９〜００３０）、定常状態である場合に限り処理多重度が上限値以内に収まっているか否かを判定する（図７のＳ４４、図８のＳ５２、００２９〜００３０）。しかし、メッセージを他ホストに処理させたとしても、現在ＣＰＵが過負荷状態になっているホストが過負荷状態のまま処理を継続することには変わりなく、その他の処理に影響を及ぼす可能性がある。
【０００７】
本発明は、上記のような課題に鑑みてなされたものであり、バッチジョブを処理する際の演算負荷を最適に制御することができる、バッチ処理制御技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係るバッチ処理制御プログラムは、演算負荷が第１閾値以上であるときはバッチ処理プログラムの並列起動個数を下げ、第２閾値未満であるときは上げる。
【発明の効果】
【０００９】
本発明に係るバッチ処理制御プログラムによれば、演算負荷に応じてバッチ処理プログラムの並列起動個数を適切に調整することができる。これにより、バッチ処理を実施するコンピュータの演算負荷を最適に制御することができる。
【図面の簡単な説明】
【００１０】
【図１】実施形態１に係るバッチ処理制御プログラム１２０を実行するコンピュータ１００およびその周辺構成を示す図である。
【図２】ジョブリスト２１０とジョブキュー２２０の構成例を示す模式図である。
【図３】バッチ処理制御プログラム１２０の動作を説明するフローチャートである。
【図４】バッチ処理プログラム１３０の動作を説明するフローチャートである。
【図５】実施形態３に係るバッチ処理システム１０００の構成図である。
【発明を実施するための形態】
【００１１】
＜実施の形態１＞
図１は、本発明の実施形態１に係るバッチ処理制御プログラム１２０を実行するコンピュータ１００およびその周辺構成を示す図である。コンピュータ１００は、バッチジョブを処理するコンピュータであり、ＣＰＵ１１０、バッチ処理制御プログラム１２０、バッチ処理プログラム１３０、記憶装置２００を備える。
【００１２】
ＣＰＵ１１０は、バッチ処理制御プログラム１２０とバッチ処理プログラム１３０を実行する演算装置である。バッチ処理プログラム１３０は、バッチジョブを処理する手順を実装したプログラムである。バッチ処理制御プログラム１２０は、バッチ処理プログラム１３０がバッチジョブを処理する過程を制御する処理を実装したプログラムである。
【００１３】
バッチ処理制御プログラム１２０とバッチ処理プログラム１３０は、記憶装置２００またはその他の記憶装置内に格納することができる。以下では記載の便宜上、これらプログラムを動作主体として説明する場合があるが、実際にこれらプログラムを実行するのはＣＰＵ１１０である。
【００１４】
記憶装置２００は、ジョブリスト２１０とジョブキュー２２０を格納する。ジョブリスト２１０は、未処理（処理に着手していない）のバッチジョブを列挙するリストであり、例えば後述の図２で説明するようなテーブル形式のデータとして構成されている。ジョブキュー２２０は、バッチ処理プログラム１３０に処理させるバッチジョブ（またはその識別子）を一時的に格納するためのキューである。ジョブキュー２２０のデータ形式や実装方式は任意であり、同様の機能を実装することができればよい。
【００１５】
図２は、ジョブリスト２１０とジョブキュー２２０の構成例を示す模式図である。図２（ａ）はジョブリスト２１０の構成例を示し、図２（ｂ）はジョブキュー２２０の構成例を示す。
【００１６】
ジョブリスト２１０は、ジョブＩＤ２１１とステータス２１２を有する。ジョブＩＤ２１１は、各バッチジョブを識別するためのＩＤである。ステータス２１２は、当該バッチジョブの処理状態を示すフラグであり、「未処理」「処理中」「処理済」のいずれかの値を取る。ジョブリスト２１０内の各レコードは、例えばコンピュータ１００に対してバッチジョブを実行するよう依頼する他のコンピュータなどが生成する。
【００１７】
バッチ処理制御プログラム１２０は、バッチ処理プログラム１３０が実行すべきバッチジョブ（ステータス２１２が「未処理」であるバッチジョブ、未処理ジョブとも呼ぶ）をジョブリスト２１０から読み出し、ジョブキュー２２０に登録する。バッチ処理プログラム１３０は、ジョブキュー２２０内に登録されているバッチジョブを順次読み出して実行する。
【００１８】
バッチ処理制御プログラム１２０は、バッチジョブＩＤの他、バッチ処理プログラム１３０を終了させるよう指示する終了命令をジョブキュー２２０に登録することもできる。終了命令を読み出したバッチ処理プログラム１３０は、自身を終了させる。すなわちバッチ処理制御プログラム１２０は、ジョブキュー２２０を介して間接的にバッチ処理プログラム１３０を終了させる。これは、実行中のプロセスを他のプロセスから直接的に介入してそのプロセスを終了させる処理はコストが高く、計算機リソースに負担をかけるからである。ただし計算機リソースに余裕があれば、必ずしもジョブキュー２２０を介する必要はなく、バッチ処理制御プログラム１２０がバッチ処理プログラム１３０を直接的に終了させてもよい。
【００１９】
図３は、バッチ処理制御プログラム１２０の動作を説明するフローチャートである。以下、図３の各ステップについて説明する。
【００２０】
（図３：ステップＳ３００）
ＣＰＵ１１０は、所定周期でバッチ処理制御プログラム１２０を起動するか、またはバッチ処理制御プログラム１２０を常時起動させておいて本フローチャートを繰り返し実施する。必要に応じて、繰り返し毎に適当な時間間隔を設けてもよい。
【００２１】
（図３：ステップＳ３０１）
バッチ処理制御プログラム１２０は、バッチ処理プログラム１３０を並列起動する個数Ｎを初期化する。Ｎの前回値が（例えば記憶装置２００内などに）保存されている場合はその値を採用し、前回値がない場合は規定値を用いる。
【００２２】
（図３：ステップＳ３０２〜Ｓ３０３）
バッチ処理制御プログラム１２０は、バッチ処理プログラム１３０をＮ個並列に起動する（Ｓ３０２）。バッチ処理制御プログラム１２０は、ジョブリスト２１０内の未処理ジョブがなくなるまで、以下のステップＳ３０４〜Ｓ３０６を繰り返し実施する。
【００２３】
（図３：ステップＳ３０４）
バッチ処理制御プログラム１２０は、ジョブリスト２１０から未処理ジョブを適当な件数（例えばＭ件）読み出し、ジョブキュー２２０にその未処理ジョブ（または未処理ジョブのＩＤ）を登録する。バッチ処理制御プログラム１２０は、ジョブキュー２２０に登録したバッチジョブのステータス２１２を「処理中」に変更する。
【００２４】
（図３：ステップＳ３０５）
バッチ処理制御プログラム１２０は、ＣＰＵ１１０の演算負荷（例えばＣＰＵ使用率）を所定閾値と比較することにより、ＣＰＵ１１０が過負荷状態にあるか否かを判定する。過負荷状態にある場合、バッチ処理制御プログラム１２０はＮを減算するとともに、終了命令をジョブキュー２２０に登録する。Ｎを減算する個数は任意（例えば１減算）でよいが、終了命令の個数はＮを減算した数と合わせる必要がある。Ｎの個数と並列起動されているバッチ処理プログラム１３０の個数を合わせるためである。
【００２５】
（図３：ステップＳ３０６）
バッチ処理制御プログラム１２０は、ＣＰＵ１１０の演算負荷を所定閾値と比較することにより、ＣＰＵ１１０が低負荷状態にあるか否かを判定する。本ステップにおける閾値は、ステップＳ３０５における閾値と同じ値かまたはこれよりも小さい値である。ＣＰＵ１１０が低負荷状態にある場合、バッチ処理制御プログラム１２０はＮを加算し、バッチ処理プログラム１３０を追加起動する。Ｎを加算する個数は任意（例えば１加算）でよいが、バッチ処理プログラム１３０を追加起動する個数はＮを加算した数と合わせる必要がある。
【００２６】
（図３：ステップＳ３０７〜Ｓ３０８）
バッチ処理制御プログラム１２０は、現在起動しているバッチ処理プログラム１３０を全て終了させるため、Ｎ個の終了命令をジョブキュー２２０に登録する（Ｓ３０７）。バッチ処理制御プログラム１２０は、現在のＮの値を例えば記憶装置２００内に保存する（Ｓ３０８）。この値はステップＳ３０１を次回実施するときに用いられる。
【００２７】
図４は、バッチ処理プログラム１３０の動作を説明するフローチャートである。以下、図４の各ステップについて説明する。
【００２８】
（図４：ステップＳ４００〜Ｓ４０１）
バッチ処理プログラム１３０は、バッチ処理制御プログラム１２０から起動されることによって本フローチャートを開始する（Ｓ４００）。バッチ処理プログラム１３０は、以下のステップＳ４０２〜Ｓ４０４を繰り返し実施する（Ｓ４０１）。必要に応じて、繰り返し毎に適当な時間間隔を設けてもよい。
【００２９】
（図４：ステップＳ４０２〜Ｓ４０３）
バッチ処理プログラム１３０は、バッチキュー２２０から１件分のバッチバッチまたは終了命令を読み出す（Ｓ４０２）。バッチ処理プログラム１３０はジョブキュー２２０から読み出したものが終了命令である場合は自身を終了させて本フローチャートを終了し、バッチジョブである場合はステップＳ４０４へ進む（Ｓ４０３）。
【００３０】
（図４：ステップＳ４０４）
バッチ処理プログラム１３０は、ステップＳ４０２においてジョブキュー２２０から読み出したバッチジョブを処理する。バッチジョブの具体的な内容は、ジョブリスト２１０内の適当なフィールドに記述してもよいし、ジョブＩＤ２１１をキーとして適当なデータベースなどを参照することによりその内容を取得できるようにしてもよい。処理が完了した時点で、ジョブリスト２１０内の対応するレコードのステータス２１２を「処理済」に変更する。処理済のジョブは、例えばバッチジョブをジョブリスト２１０に登録したコンピュータがジョブリスト２１０から削除してもよいし、バッチ処理制御プログラム１２０またはバッチ処理プログラム１３０がジョブリスト２１０から削除してもよい。
【００３１】
＜実施の形態１：まとめ＞
以上のように、本実施形態１に係るバッチ処理制御プログラム１２０は、バッチ処理プログラム１３０をＮ個並列起動し、ＣＰＵ１１０が過負荷状態であるときは並列起動個数を減算し、低負荷状態であるときは並列起動個数を加算する。これにより、個々のバッチジョブの処理負荷が異なる場合やＣＰＵ１１０の処理能力がコンピュータ１００毎に異なる場合であっても、ＣＰＵ１１０の演算負荷に応じてバッチ処理負荷を最適に調整することができる。
【００３２】
また本実施形態１において、バッチ処理プログラム１３０は、いったん起動すると終了命令を受け取るまでジョブキュー２２０内に新たなバッチジョブが登録されているか否かを監視し続けるように構成されている。これにより、いったん起動したバッチ処理プログラム１３０を何度も起動する必要がなくなるので、バッチ処理制御プログラム１２０の処理負荷を抑制し、ＣＰＵ１１０の処理性能をできる限りバッチ処理に振り向けることができる。
【００３３】
また本実施形態１において、バッチ処理制御プログラム１２０とバッチ処理プログラム１３０は、ジョブキュー２２０を介して間接的に終了命令を送受信するように構成されている。起動中のプロセスを他のプロセスから終了させる処理は計算機リソースのコストが高いので、ジョブキュー２２０を介して間接的にバッチ処理プログラム１３０を終了させることにより、バッチ処理制御プログラム１２０の処理負荷を抑制し、ＣＰＵ１１０の処理性能をできる限りバッチ処理に振り向けることができる。
【００３４】
また本実施形態１において、バッチ処理制御プログラム１２０は、Ｎの現在値を記憶装置２００などに格納し、その値を次回に採用する。これにより、未処理バッチジョブがいったんなくなって図３のフローチャートが終了した場合であっても、最適化またはこれに近い状態となっているＮの値を再利用することができる。
【００３５】
＜実施の形態２＞
実施形態１においては、バッチ処理プログラム１３０の並列起動個数Ｎを増減することにより、ＣＰＵ１１０を過負荷状態と低負荷状態の間で最適に調整することを説明した。この構成を利用して、ＣＰＵ１１０の処理性能をできる限り引き出すように図ることができる。具体的には、ステップＳ３０５における判定閾値とステップＳ３０６における判定閾値を、ともに使用率１００％（またはこれに近い値）に設定するとよい。
【００３６】
例えば、ＣＰＵ１１０の使用率が１００％に達しており、ステップＳ３０５において過負荷状態と判定されたものと仮定する。このときバッチ処理制御プログラム１２０は、終了命令を発行してバッチ処理プログラム１３０の並列起動個数Ｎを減算する。これによりＣＰＵ１１０の使用率は、いずれかのバッチ処理プログラム１３０が終了命令を読み出した時点でいったん低下すると考えられる。
【００３７】
その後、ステップＳ３０６における閾値は１００％（またはこれに近い値）に設定されているので、ＣＰＵ１１０は低負荷状態と判定される。したがってバッチ処理制御プログラム１２０は、バッチ処理プログラム１３０の並列起動個数を即座に加算することになると考えられる。
【００３８】
すなわち、ステップＳ３０５における判定閾値とステップＳ３０６における判定閾値を、ともにＣＰＵ使用率の最高値（またはこれに近い値）に設定することにより、ＣＰＵ１１０の使用率は常にＣＰＵ負荷最上限の近傍で前後することになるので、ＣＰＵ１１０の処理性能をできる限りバッチ処理に振り向けることができる。
【００３９】
＜実施の形態３＞
図５は、本発明の実施形態３に係るバッチ処理システム１０００の構成図である。バッチ処理システム１０００は、実施形態１〜２で説明したコンピュータ１００と同様の構成を備える複数のコンピュータ（図５においてはコンピュータ１００ａと１００ｂ）と記憶装置２００を有する。各コンピュータと記憶装置２００との間は適当なネットワークを介して接続されている。
【００４０】
コンピュータ１００ａと１００ｂは、それぞれ独立して実施形態１〜２で説明した動作を実施する。これにより、バッチ処理性能をさらに高めることができる。コンピュータ１００ａと１００ｂが同一のジョブに対して処理を開始しないようにするためには、各コンピュータ上におけるバッチ処理制御プログラム１２０が未処理バッチジョブのみを取り出すようにするとともに、いずれかのバッチ処理制御プログラム１２０がジョブリスト２１０に対してアクセスしているときはその他のバッチ処理制御プログラム１２０が同リストにアクセスできないように排他制御をかけるなどすればよい。排他制御をかける手法は当該分野においてよく知られているため、詳細は説明しない。
【符号の説明】
【００４１】
１００：コンピュータ、１１０：ＣＰＵ、１２０：バッチ処理制御プログラム、１３０：バッチ処理プログラム、２００：記憶装置、２１０：ジョブリスト、２２０：ジョブキュー。
【図１】
2015060491.tif 000003
【図２】
2015060491.tif 000004
【図３】
2015060491.tif 000005
【図４】
2015060491.tif 000006
【図５】
2015060491.tif 000007