(57)【要約】【課題】マルチスレッドでリアルタイム処理を行う場合に、スループットの低下を防止できるコミット制御システムを提供する。【解決手段】マルチスレッドでデータベース５０ａ，５０ｂのデータに対する処理を実行し、処理を確定させるためにデータベースに対するコミットを実行するコミット実行装置２０と、コミット実行装置２０が、データベース５０ａ，５０ｂに対するコミットを実行するタイミングを制御するコミット制御装置１０とを備えたコミット制御システム１であって、コミット制御装置１０は、コミット実行装置２０のデータに対する処理が異常終了した場合に、コミット実行装置２０が処理したデータの件数と、処理したデータに関する情報に基づいて、コミットのタイミングを決定する。【選択図】図１
2011039879.tif 000002
【特許請求の範囲】
【請求項１】
マルチスレッドでデータに対する処理を実行し、前記処理を確定させるために前記データに対するコミットを実行するコミット実行装置と、
前記コミット実行装置が、前記コミットを実行するタイミングを制御するコミット制御装置と、を備えたコミット制御システムであって、
前記コミット制御装置は、前記コミット実行装置の前記データに対する処理が異常終了した場合に、各スレッドが処理したデータの件数と、処理したデータに関する情報とに基づいて、コミットのタイミングを制御する、コミット制御システム。
【請求項２】
請求項１に記載のコミット制御システムにおいて、
前記処理したデータに関する情報には、データ毎に割り当てられた優先度の情報が含まれる、コミット制御システム。
【請求項３】
請求項１に記載のコミット制御システムにおいて、
前記処理したデータに関する情報には、処理対象となるデータの種別が含まれる、コミット制御システム。
【請求項４】
請求項１から請求項３のいずれかに記載のコミット制御システムにおいて、
前記コミット制御装置は、前記コミット実行装置が前記コミットを実行するまでに各スレッドが処理すべきデータ件数の閾値を変更した場合に、一定時間内に再び前記閾値を変更しなかった場合には、前記閾値を段階的に元に戻す、コミット制御システム。
【請求項５】
マルチスレッドでデータに対する処理を実行し、前記処理を確定させるために前記データに対するコミットを実行するコミット実行装置が、前記コミットを実行するタイミングを制御するコミット制御装置であって、
前記コミット実行装置の前記データに対する処理が異常終了した場合に、各スレッドが処理したデータの件数と、処理したデータに関する情報とに基づいて、前記コミットのタイミングを制御するコミット判定部を備えたコミット制御装置。
【請求項６】
マルチスレッドでデータに対する処理を実行し、前記処理を確定させるために前記データに対するコミットを実行するコミット実行装置であって、
データ処理情報記憶部に、各スレッドが処理したデータの件数と、処理したデータに関する情報を格納するデータ処理部と、
前記データに対する処理が異常終了した場合に、コミット制御装置が、前記各スレッドが処理したデータの件数と、前記処理したデータに関する情報とに基づいて決定したコミットのタイミングに従ってコミットを実行するコミット処理実行部を備えた、コミット実行装置。
【請求項７】
コミット実行装置が、マルチスレッドでデータに対する処理を実行すると共に、データ処理情報記憶部に、各スレッドが処理したデータの件数と、処理したデータに関する情報を格納する工程と、
コミット制御装置が、前記コミット実行装置の前記データに対する処理が異常終了した場合に、前記各スレッドが処理したデータの件数と、処理したデータに関する情報とに基づいて、前記処理を確定させるために前記データに対するコミットのタイミングを制御する工程と、
前記コミット実行装置が、前記コミット制御装置が決定したタイミングに従って、前記コミットを実行する工程と、を備えたコミット制御方法。
【請求項８】
コンピュータを、
マルチスレッドでデータに対する処理を実行し、前記処理を確定させるために前記データに対するコミットを実行するコミット実行装置が、前記コミットを実行するタイミングを制御するコミット制御装置として機能させるプログラムであって、
前記コミット実行装置の前記データに対する処理が異常終了した場合に、各スレッドが処理したデータの件数と、処理したデータに関する情報とに基づいて、コミットのタイミングを制御するコミット判定部として機能させる、プログラム。
【請求項９】
コンピュータを、
マルチスレッドでデータに対する処理を実行し、前記処理を確定させるために前記データに対するコミットを実行するコミット実行装置として機能させるプログラムであって、
データ処理情報記憶部に、各スレッドが処理したデータの件数と、処理したデータに関する情報を格納するデータ処理部と、
前記データに対する処理が異常終了した場合に、コミット制御装置が、前記各スレッドが処理したデータの件数と、前記処理したデータに関する情報とに基づいて決定したコミットのタイミングに従ってコミットを実行するコミット処理実行部として機能させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コミット制御システム、コミット制御装置、コミット実行装置、コミット制御方法、及びプログラムに関する。
【背景技術】
【０００２】
大量のデータをリアルタイム処理するトランザクションにおいて、マルチスレッドで複数のスレッドによるデータ処理を同時に行い、適切なタイミングでデータベースのコミットを行うことにより、コミットの処理時間を短縮してスループットを向上させる方法がある。コミットを実行するタイミングは、例えば、コミットを実行するまでにトランザクションが処理すべきデータ件数などの閾値を予め決めておき、その閾値に到達した時点とする方法が知られている（例えば、特許文献１，２）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−４６４５２号公報
【特許文献２】特開平１１−３４５１５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、上記のようにマルチスレッドで複数のデータ処理を同時に行うトランザクションでは、処理済みのデータ件数だけでなく、処理したデータの優先度やデータベースなどの資源の種別（業務種別など）の情報も総合的に判断して、スレッドごとに適切なコミット時点を決定する必要がある。その理由は、マルチスレッドで同期してデータを処理するトランザクションで資源競合などにより異常が発生している場合、データ件数などの閾値を変更するよりも、優先度やデータベースなどの資源の種別の情報に基づいて、資源競合が起こらないようにコミットをした方が、スループットの低下を防げるからである。
【０００５】
また、特許文献１には、ロールバックが発生した場合に閾値を変更することが記載されている。また、特許文献２にも、ロールバックジャーナルの空き容量に従って、閾値を変動させることが記載されている。しかし、リアルタイム処理のトランザクションは、２４時間３６５日処理を継続するため、コミット実行の閾値を変更した場合、一定の時間が経過したら閾値を元に戻さないと、スループットが著しく低下する恐れがある。
【０００６】
そこで本発明の目的は、マルチスレッドでリアルタイム処理を行う場合に、スループットの低下を防止できるコミット制御システム、コミット制御装置、コミット実行装置、コミット制御方法、及びプログラムを提供することである。
【課題を解決するための手段】
【０００７】
本発明に係るコミット制御システムは、マルチスレッドでデータに対する処理を実行し、処理を確定させるためにデータに対するコミットを実行するコミット実行装置と、コミット実行装置が、コミットを実行するタイミングを制御するコミット制御装置とを備えたコミット制御システムであって、コミット制御装置は、コミット実行装置のデータに対する処理が異常終了した場合に、各スレッドが処理したデータの件数と、処理したデータに関する情報に基づいて、コミットのタイミングを制御する。
【発明の効果】
【０００８】
本発明によれば、コミット実行装置の各スレッドによる処理済みのデータ件数だけでなく、処理したデータに関する情報にも基づいて、コミットのタイミングを決定することができるので、マルチスレッドでデータを処理するトランザクションで資源競合などにより異常が発生している場合に、スループットの低下を防ぐことができる。
【図面の簡単な説明】
【０００９】
【図１】本発明によるコミット制御システムの構成を示すブロック図である。
【図２】本発明によるコミット制御システムの動作のフローチャートである。
【図３】本発明によるコミット制御システムの動作のフローチャートである。
【図４】本発明によるコミット制御システムの動作のフローチャートである。
【図５】コミット判定条件記憶部の閾値を元に戻す処理について説明するグラフである。
【発明を実施するための形態】
【００１０】
次に、本発明を実施するための最良の形態について、図面を参照して詳細に説明する。
図１は、本発明によるコミット制御システムの構成を示すブロック図である。図に示すように、コミット制御システム１は、コミット制御装置１０、コミット実行装置２０、コミット判定条件記憶部３０、データ処理情報記憶部４０を備えている。コミット制御システム１は、データベース５０ａ，５０ｂの更新におけるコミットを制御する。コミット制御装置１０、コミット実行装置２０、コミット判定条件記憶部３０、及びデータ処理情報記憶部４０は、互いに通信回線を介して接続されている。また、これらは同一の装置に実装されていてもよい。
【００１１】
コミット制御装置１０は、初期化部１０１、閾値初期化部１０２、トランザクション開始部１０３、コミット判定部１０４、コミット開始部１０５を備えている。コミット制御装置１０は、例えば汎用的なパーソナルコンピュータに所定のプログラムを実行させたものである。初期化部１０１、閾値初期化部１０２、トランザクション開始部１０３、コミット判定部１０４、コミット開始部１０５は、プログラムに従ってコンピュータのプロセッサが行う動作のモジュールを表しており、これらは一体としてコミット制御装置１０のプロセッサの機能を構成する。
【００１２】
コミット実行装置２０は、コミット実行部２０ａ，２０ｂ，２０ｃを備えている。コミット実行部２０ａ，２０ｂ，２０ｃは、それぞれマルチスレッドで同期して処理を実行する各々のスレッドに相当する。コミット実行部２０ａ，２０ｂ，２０ｃは、それぞれ初期化部２０１、データ処理部２０２、閾値判定部２０３、正常終了処理部２０４、資源操作部２０５、異常終了処理部２０６、コミット処理実行部２０７、コミット成功処理部２０８、コミット失敗処理部２０９を備えている。コミット実行装置２０は、例えば汎用的なパーソナルコンピュータに所定のプログラムを実行させたものである。コミット実行部２０ａ，２０ｂ，２０ｃ、初期化部２０１、データ処理部２０２、閾値判定部２０３、正常終了処理部２０４、資源操作部２０５、異常終了処理部２０６、コミット実行部２０７、コミット成功処理部２０８、コミット失敗処理部２０９は、プログラムに従ってコンピュータのプロセッサが行う動作のモジュールを表しており、これらは一体としてコミット実行装置２０のプロセッサの機能を構成する。
【００１３】
コミット判定条件記憶部３０は、メモリ等の記憶装置である。コミット判定条件記憶部３０には、コミット実行装置２０のコミット実行部２０ａ，２０ｂ，２０ｃそれぞれが、コミットを実行するまでに処理すべきデータ件数の閾値、閾値変更時刻、閾値初期化時間が格納される。閾値変更時刻は、コミット制御装置１０がデータ件数の閾値を変更したときの時刻である。 閾値初期化時間は、コミット制御装置１０がデータ件数の閾値を変更してから元に戻すまでの時間である。コミット判定条件記憶部３０のデータ件数の閾値、閾値初期化時間、閾値変更時刻は、コミット制御装置１０の起動時に設定され、閾値変更時刻は０で初期化される。
【００１４】
データ処理情報記憶部４０は、メモリ等の記憶装置である。データ処理情報記憶部４０には、コミット実行装置２０のコミット実行部２０ａ，２０ｂ，２０ｃそれぞれが、処理したデータ件数、処理したデータの優先度の累積値、操作するデータベースに格納されている情報資源の種別（ここでは、業務種別）の情報が格納される。優先度は、処理したデータのヘッダに格納されたデータの優先度（高中低を３〜１で表現）の累積値である。業務種別は、コミット実行装置２０でデータを処理する業務アプリケーションの種別であり、操作するデータベースなどの資源の種別と対応している。データベース５０ａ，ｂには、ぞれぞれの業務アプリケーションの種別に対応したデータが格納されている。データ処理情報記憶部４０の処理済みデータ件数、優先度、業務種別は、コミット実行装置２０の起動時に設定され、データ件数、優先度は０で初期化される。
【００１５】
次に、本実施形態によるコミット制御システム１の動作について、図２〜４のフローチャートを用いて説明する。
まず、ステップＳ１で、コミット制御装置１０の起動時に、初期化部１０１が、コミット実行装置２０の各コミット実行スレッド（コミット実行部２０ａ，２０ｂ，２０ｃ）に対応したコミット判定条件記憶部３０とデータ処理情報記憶部４０のデータ領域を作成する。また、コミット判定条件記憶部３０のデータ件数の閾値と閾値初期化時間を所定の初期値に設定すると共に、閾値変更時刻を０に設定する（表１）。表１のコミット実行スレッドＡ，Ｂ，Ｃはそれぞれコミット実行部２０ａ，２０ｂ，２０ｃに対応している。ここでは例として、それぞれのデータ件数の閾値を１０００件、閾値初期化時間を３０分に設定している。
【表１】
2011039879.tif 000003
【００１６】
次に、ステップＳ２で、コミット実行装置２０の起動時に、初期化部２０１が、データ処理情報記憶部４０の業務種別を設定し、処理したデータ件数と優先度の累積値を０に設定する（表２）。表２のコミット実行スレッドＡ，Ｂ，Ｃはそれぞれコミット実行部２０ａ，２０ｂ，２０ｃに対応している。ここでは例として、コミット実行部２０ａ，２０ｃ（スレッドＡ、Ｃ）の業務種別に資源Ａを、コミット実行部２０ｂ（スレッドＢ）の業務種別に資源Ｂを設定している。データベース５０ａには、資源Ａに対応するデータが格納されており、データベース５０ｂには、資源Ｂに対応するデータが格納されている。
【表２】
2011039879.tif 000004
【００１７】
次に、ステップＳ３で、コミット制御装置１０のトランザクション開始部１０３が、トランザクション処理開始の通知をコミット実行部２０ａ，２０ｂ，２０ｃに通知し、コミット実行部２０ａ，２０ｂ，２０ｃは、それぞれデータの処理を開始する。
【００１８】
次に、ステップＳ４において、初期化部２０１がデータ処理情報記憶部４０のデータ件数と優先度の累積値を０に初期化した後、コミット実行部２０ａ，２０ｃのデータ処理部２０２がデータベース５０ａ内のデータを、コミット実行部２０ｂのデータ処理部２０２がデータベース５０ｂ内のデータを処理し、データ処理情報記憶部４０のデータ件数と優先度の累積値を更新する。
【００１９】
次に、ステップＳ５において、コミット実行部２０ａ，２０ｂ，２０ｃそれぞれの閾値判定部２０３が、データ処理情報記憶部４０の処理したデータ件数が、コミット判定条件記憶部３０のデータ件数の閾値を超えていないか判定する。超えている場合、ステップＳ６に進み、超えていない場合はステップＳ７に進む。
【００２０】
ステップＳ６では、コミット実行部２０ａ，２０ｂ，２０ｃのうち、ステップＳ６へ進んだコミット実行部の正常終了処理部２０４が、正常終了の通知をコミット制御装置１０に通知する。
【００２１】
一方、ステップＳ７では、コミット実行部２０ａ，２０ｂ，２０ｃのうち、ステップＳ７へ進んだコミット実行部の資源操作部２０５において、データベース５０ａ，５０ｂの操作を行い、操作に成功した場合には、ステップＳ４に戻る。操作に失敗した場合には、ステップＳ８に移行する。
【００２２】
ステップＳ８では、コミット実行部２０ａ，２０ｂ，２０ｃのうち、ステップＳ８へ進んだコミット実行部の異常終了処理部２０６がロールバックを実行し、異常終了の通知をコミット制御装置１０に通知する。
【００２３】
コミット制御装置１０は、コミット実行部２０ａ，２０ｂ，２０ｃからの正常終了、または異常終了が通知されるのを待機している（図３のステップＳ１１）。
【００２４】
コミット制御装置１０のコミット判定部１０４は、コミット実行部２０ａ，２０ｂ，２０ｃのいずれかから異常終了が通知された場合には、ステップＳ１２へ進む。
【００２５】
ステップＳ１２で、コミット判定部１０４は、データ処理情報記憶部４０を参照し、異常終了が通知されたコミット実行スレッド（コミット実行部２０ａ，２０ｂ，２０ｃ）の中に、同じ業務種別のものが２つ以上含まれる場合はステップＳ１４へ進み、それ以外の場合はステップＳ１３に進む。
【００２６】
ステップＳ１３では、コミット判定部１０４は、異常終了したスレッドのコミット判定条件記憶部３０のデータ件数の閾値を変更し、閾値変更時刻を登録すると共に、当該スレッドにリトライ指示を通知する。コミット判定条件記憶部３０のデータ件数の閾値を変更する場合、閾値をデータ処理情報記憶部４０のデータ件数以下の値に変更する。閾値変更時刻には、現在時刻を設定する。
【００２７】
リトライ指示を受けたスレッドは、ステップＳ４へ戻りリトライを開始する。例えば、コミット実行スレッドＡ，Ｂ（コミット実行部２０ａ，２０ｂ）が異常終了、コミット実行スレッドＣ（コミット実行部２０ｃ）が正常終了し、データ処理情報記憶部４０が表３のようになっている場合、コミット判定条件記憶部３０は表４のように変更され、スレッドＡ，Ｂにリトライ指示が通知される。
【表３】
2011039879.tif 000005
【表４】
2011039879.tif 000006
【００２８】
ステップＳ１４では、コミット判定部１０４は、異常終了したスレッドのうち同じ業務種別のものについて、優先度の累積値を処理したデータ件数で割った値がもっとも大きいスレッドにまずリトライ指示を出す。リトライ指示を受けたスレッドは、ステップＳ４へ戻りリトライを開始する。コミット判定部１０４は、このスレッドからリトライの正常終了が通知されたら、優先度の累積値をデータ件数で割った値が次に大きいスレッドにリトライ指示を出す。このように、優先度の累積値を処理したデータ件数で割った値が大きいものから順にリトライ指示を出し、同じ業務種別のスレッドによるデータ処理が並行して実行されないようにする。これにより、資源競合を防止することができる。また、この時、コミット判定条件記憶部３０のデータ件数の閾値は変更しない。例えば、コミット実行スレッドＡ，Ｃ（コミット実行部２０ａ，２０ｃ）が異常終了、コミット実行スレッドＢ（コミット実行部２０ｂ）が正常終了し、データ処理情報記憶部４０が表５のようになっている場合、コミット判定条件記憶部３０は変更されず（表１の状態）、まず、スレッドＡにリトライ指示が通知される。スレッドＡのリトライが正常終了したら、スレッドＣにリトライ指示が通知される。
【表５】
2011039879.tif 000007
【００２９】
コミット制御装置１０は、全てのコミット実行スレッド（コミット実行部２０ａ，２０ｂ，２０ｃ）から正常終了が通知されるまで、ステップＳ１２〜１４を繰り返す。
【００３０】
すべてのコミット実行スレッドから正常終了が通知されたら、コミット開始部１０５が全てのコミット実行スレッドにコミット実行命令を通知する（ステップＳ１５）。
【００３１】
各々のコミット実行スレッド（コミット実行部２０ａ，２０ｂ，２０ｃ）は、コミット処理実行部２０７においてコミットを実行する（ステップＳ１６）。
【００３２】
コミット実行部２０ａ，２０ｂ，２０ｃは、コミットが成功したら、コミット成功処理部２０８においてコミット制御装置１０に正常終了を通知する。コミットに失敗した場合には、コミット失敗処理部２０９において、ロールバックを実行し、コミット制御装置１０に異常終了を通知する（ステップＳ１７〜Ｓ１９）。
【００３３】
コミット制御装置１０は、全てのコミット実行スレッド（コミット実行部２０ａ，２０ｂ，２０ｃ）から正常終了が通知されたら、図２のステップＳ３に戻る。一方、少なくとも１つのコミット実行スレッドから異常終了が通知された場合には、コミット制御装置１０は、全てのコミット実行スレッドから正常終了が通知されるまで、ステップＳ１２〜１４を繰り返す。ただし、この時点では、データ処理情報記憶部４０のデータ件数とコミット判定条件記憶部３０のデータ件数の閾値は同じ値になっているので、ステップＳ１３において、コミット判定条件記憶部３０のデータ件数の閾値を変更する場合には、データ件数の閾値を半分の値に変更する。
【００３４】
次に、図４のフローチャートを用いて、コミット制御装置１０が、一定時間が経過したらコミット判定条件記憶部３０の閾値を元に戻す処理について説明する。
【００３５】
コミット制御装置１０の閾値初期化部１０２は、図２のステップＳ３の処理の前に、コミット判定条件記憶部３０の閾値変更時刻が０以外の値に設定されている全てのスレッドについて、閾値変更時刻に閾値初期化時間を加えた時刻が、現在時刻を越えていないか判定する（ステップＳ２１）。
【００３６】
現在時刻を越えている場合は、閾値初期化部１０２は、対象スレッドのデータ件数閾値に、初期値の１０分の１を加算する。ただし初期値を超えない範囲で行う（ステップＳ２２）。ただし、対象スレッドがリトライ中の場合は、閾値の加算は行わない。
【００３７】
加算の結果、閾値が初期値まで戻った場合は、閾値変更時刻に０を設定する（ステップＳ２３，２４）。
【００３８】
図５を用いて、表４に示すコミット判定条件記憶部３０の状態から、スレッドＡ，Ｂの閾値を元に戻す場合の手順を説明する。
まず、閾値変更時刻(12:00:00)から閾値初期化時間（３０分）経過後(12:30:00)に、閾値の加算処理が開始される。１回の加算処理では、初期値（１０００件）の１０分の１にあたる１００件が加算されるため、スレッドＢは、２回目の加算処理で閾値が初期値に戻る。また、スレッドＡは、５回目の加算処理で閾値が初期値に戻る。
【００３９】
以上のように、本実施形態によれば、コミット実行装置２０のコミット実行部２０ａ，２０ｂ，２０ｃによる処理済みのデータ件数だけでなく、処理したデータの優先度や、操作するデータベースの業務種別の情報にも基づいて、コミットのタイミングを決定することができる。これにより、マルチスレッドでデータを処理するトランザクションで資源競合などにより異常が発生している場合に、スループットの低下を防ぐことができる。
【００４０】
また、コミットの閾値を変更した場合に、一定時間閾値が再度変更されずに経過したら、閾値を段階的に元に戻すようにしたので、リアルタイム処理においてスループットが低下するのを防止できる。
【００４１】
なお、本実施形態では、コミット実行装置２０のコミット実行スレッドの数が３つであるが、スレッド数はいくつであっても良い。
【符号の説明】
【００４２】
１  コミット制御システム、１０  コミット制御装置、２０  コミット実行装置、２０ａ，２０ｂ，２０ｃ  コミット実行部、３０  コミット判定条件記憶部、４０  データ処理情報記憶部、５０ａ，５０ｂ  データベース、１０１  初期化部、１０２  閾値初期化部、１０３  トランザクション開始部、１０４  コミット判定部、１０５  コミット開始部、２０１  初期化部、２０２  データ処理部、２０３  閾値判定部、２０４  正常終了処理部、２０５  資源操作部、２０６  異常終了処理部、２０７  コミット処理実行部、２０８  コミット成功処理部、２０９  コミット失敗処理部
【図１】
2011039879.tif 000008
【図２】
2011039879.tif 000009
【図３】
2011039879.tif 000010
【図４】
2011039879.tif 000011
【図５】
2011039879.tif 000012