(57)【要約】【課題】複数のコネクションを用いてトランザクションを実行する場合において、ＣＯＭＭＩＴの回数を削減し、トランザクションの速度を高速化する。【解決手段】データベースに対し、複数のコネクションを用いてトランザクションを実行するトランザクション制御装置において、トランザクションＡ〜Ｉを接続Ｃ１〜Ｃ３に振り分け、再構築する。そして、それぞれの接続における複数のトランザクションを一まとめにしてＣＯＭＭＩＴを実行する。また、トランザクション制御装置は、データベースの同じデータにアクセスする可能性のあるトランザクション同士を同じ接続にまとめるようにする。【選択図】図１
2009026029.tif 000002
【特許請求の範囲】
【請求項１】
データベースに格納されたデータに対し、複数のコネクションを用いて複数のトランザクションを並列に実行するトランザクション制御装置であって、
前記トランザクションの入力を受け付けるトランザクション入力部と、
前記データベースとの間で前記コネクションを確立するコネクション確立部と、
前記確立されたコネクションごとに、当該コネクションを用いてアクセスする前記データベースのアクセス先を示したアクセス履歴を記憶する記憶部と、
前記入力されたトランザクションを解析し、当該トランザクションの前記データベースにおけるアクセス先を特定するトランザクション解析部と、
前記入力されたトランザクションの処理を実行するトランザクション実行部と、
（１）前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を１つ発見したとき、前記アクセス履歴に対応するコネクションを、当該トランザクションに用いるコネクションとして選択し、当該トランザクションにおける前記データベースへのアクセス先を、前記選択したコネクションに関するアクセス履歴に記録し、前記選択したコネクションを用いて、前記トランザクション実行部に、前記トランザクションのＣＯＭＭＩＴ前までの処理の実行を指示し、前記トランザクション実行部において前記トランザクションのＣＯＭＭＩＴ前までの処理を所定数以上実行したとき、前記コネクションそれぞれにおける前記トランザクションのＣＯＭＭＩＴの実行を指示し、
（２）前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を複数発見したとき、前記記憶部に記憶されたアクセス履歴を消去し、前記トランザクション実行部に、前記コネクションそれぞれにおける前記トランザクションのＣＯＭＭＩＴの実行を指示した後、前記入力されたトランザクションに用いるコネクションとして、前記確立されたコネクションから任意のコネクションを選択し、当該トランザクションにおける前記データベースへのアクセス先を、前記選択したコネクションに関するアクセス履歴に記録するトランザクション制御部と、
を備えることを特徴とするトランザクション制御装置。
【請求項２】
前記トランザクション制御部は、
前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を発見できなかったとき、
前記入力されたトランザクションに用いるコネクションとして、前記確立されたコネクションから任意のコネクションを選択し、当該トランザクションにおける前記データベースへのアクセス先を、前記選択したコネクションに関するアクセス履歴に記録することを特徴とする請求項１に記載のトランザクション制御装置。
【請求項３】
前記トランザクション制御部は、
前回のＣＯＭＭＩＴの実行指示から所定時間経過したとき、前記トランザクション実行部に前記トランザクションそれぞれのＣＯＭＭＩＴの実行を指示することを特徴とする請求項１または請求項２に記載のトランザクション制御装置。
【請求項４】
前記記憶部は、
過去の前記トランザクションの実行結果を蓄積したデータベースキャッシュを備え、
前記トランザクション制御部は、
前記データベースキャッシュにおける実行結果に当該トランザクションのアクセス先を含むデータがあるか否かを判断し、
前記データベースキャッシュにおける実行結果に、当該トランザクションのアクセス先を含むデータがあると判断したとき、前記データベースキャッシュにおける実行結果をもとに当該トランザクションを実行し、当該トランザクションの実行結果を前記データベースキャッシュに蓄積し、
前記データベースキャッシュにおける実行結果に、当該トランザクションのアクセス先を含むデータがないと判断したとき、前記データベースのデータに対し当該トランザクションを実行する請求項１ないし請求項３のいずれか１項に記載のトランザクション制御装置。
【請求項５】
前記トランザクションおよび前記アクセス履歴に示される前記データベースのアクセス先は、ＳＱＬ（Structured Query Language）を用いた条件により記述され、
前記トランザクション制御部は、
前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を探すとき、前記トランザクションおよび前記アクセス履歴におけるＳＱＬのＦＲＯＭ句およびＷＨＥＲＥ句により示される条件を参照して探すことを特徴とする請求項１ないし請求項４のいずれか１項に記載のトランザクション制御装置。
【請求項６】
データベースとの間で確立されたコネクションごとに、当該コネクションを用いてアクセスする前記データベースのアクセス先を示したアクセス履歴を記憶する記憶部を備え、前記データベースに格納されたデータに対し、複数のコネクションを用いて複数のトランザクションを並列に実行するトランザクション制御装置が、
前記トランザクションの入力を受け付けるステップと、
前記データベースとの間で前記コネクションを確立するステップと、
前記入力されたトランザクションを解析し、当該トランザクションの前記データベースにおけるアクセス先を特定するステップと、
（１）前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を１つ発見したとき、
前記アクセス履歴に対応するコネクションを、当該トランザクションに用いるコネクションとして選択し、当該トランザクションにおける前記データベースへのアクセス先を、前記選択したコネクションに関するアクセス履歴に記録するステップと、
前記選択したコネクションを用いて、前記トランザクションのＣＯＭＭＩＴ前までの処理を実行するステップと、
前記トランザクションのＣＯＭＭＩＴ前までの処理を所定数以上実行したとき、
前記コネクションそれぞれにおける前記トランザクションのＣＯＭＭＩＴを実行するステップとを実行し、
（２）前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を複数発見したとき、
前記記憶部に記憶されたすべてのアクセス履歴を消去するステップと、
前記コネクションそれぞれにおける前記トランザクションのＣＯＭＭＩＴを実行するステップと、
前記入力されたトランザクションに用いるコネクションとして、前記確立されたコネクションから任意のコネクションを選択し、当該トランザクションにおける前記データベースへのアクセス先を、前記選択したコネクションに関するアクセス履歴に記録するステップと、
を実行することを特徴とするトランザクション制御方法。
【請求項７】
請求項６に記載のトランザクション制御方法をコンピュータであるトランザクション処理装置に実行させることを特徴とするトランザクション制御プログラム。
【請求項８】
請求項７に記載のトランザクション制御プログラムを記憶したコンピュータに読取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トランザクション制御技術に関する。
【背景技術】
【０００２】
従来から、データベースに対する操作単位としてトランザクションが用いられている。このトランザクションとは、データベースに対する一連の操作を１つの処理単位でまとめたものである。例えば、操作言語としてＳＱＬ（Structured Query Language）を用いる場合、トランザクションの開始時にＢＥＧＩＮ（ビギン）、終了時にＣＯＭＭＩＴ（コミット）という操作を発行する。つまり、
BEGIN;
データベースに対する一連の処理
COMMIT; 
というような操作を発行する。このトランザクションでは、各ＳＱＬとして指定された処理は「すべて成功」か「すべて失敗」のいずれかであることが保証される。つまり、一連の処理が途中で終了しないようにする。
【０００３】
このようにしてトランザクションによりデータベースに対し処理を実行する場合、処理を高速にするため、データベースに対し複数のＳＱＬを並列に実行する技術がある。つまり、アプリケーションがデータベースに対し、複数の接続を確立し、各接続を利用して並列にトランザクション処理を実行することで、処理の高速化を図っている。図８は、本発明の比較例となる技術を説明する図である。図８に示すように、例えば、アプリケーションサーバが発行したトランザクション（実行すべきトランザクション）が、トランザクションＡ〜Ｉであるとき、このトランザクションＡ〜Ｉを接続Ｃ１〜Ｃ３の３つの接続に分ける。そして、トランザクションＡ〜Ｉを接続Ｃ１〜Ｃ３で並列実行する。
【特許文献１】特開平９−５０３９３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、前記した技術のようにトランザクションを並列に実行する場合において、１つのトランザクションが比較的短いと、頻繁にＣＯＭＭＩＴが実行されることになる。このＣＯＭＭＩＴは実行負荷の大きい処理であるため、トランザクション実行時に速度の低下を招く。
【０００５】
さらに、このように複数のトランザクションを並列に実行すると、それぞれのトランザクションが最新のデータを参照できないこともある。
【０００６】
例えば、データベースの領域Ａのデータを変更するトランザクションと並列に、別のトランザクションがこの領域Ａのデータを参照する場合において、最初のトランザクションの処理が完了していないと、その別のトランザクションは古い方のデータを参照することになる。つまり、トランザクションは最新のデータを参照できないため、サービス全体に悪影響を与えるおそれがある。そのため、従来、ＤＢＭＳ（データベースマネジメントシステム）において、同じ領域のデータを参照しようとするトランザクションを複数受け付けたときは、いったんそれらのトランザクションをストップし、最初からそのトランザクションをやり直すといった制御を行っていた。しかし、ＤＢＭＳにおいてこのようなトランザクションのやり直しを頻繁に行うと、却って処理速度の低下を招くことになる。
【０００７】
そこで本発明は、前記した課題を解決し、ＣＯＭＭＩＴの回数を削減し、トランザクションの速度を高速化するトランザクション制御手段を提供することを目的とする。
【課題を解決するための手段】
【０００８】
前記した課題を解決するため、請求項１に記載の発明は、データベースに格納されたデータに対し、複数のコネクションを用いて複数のトランザクションを並列に実行するトランザクション制御装置であって、前記トランザクションの入力を受け付けるトランザクション入力部と、前記データベースとの間で前記複数のコネクションを確立するコネクション確立部と、前記確立されたコネクションごとに、当該コネクションを用いてアクセスする前記データベースのアクセス先を示したアクセス履歴を記憶する記憶部と、前記入力されたトランザクションを解析し、当該トランザクションの前記データベースにおけるアクセス先を特定するトランザクション解析部と、前記入力されたトランザクションの処理を実行するトランザクション実行部と、（１）前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を１つ発見したとき、前記アクセス履歴に対応するコネクションを、当該トランザクションに用いるコネクションとして選択し、当該トランザクションにおける前記データベースへのアクセス先を、前記選択したコネクションに関するアクセス履歴に記録し、前記選択されたコネクションを用いて、前記トランザクション実行部に、前記トランザクションのＣＯＭＭＩＴ前までの処理の実行を指示し、前記トランザクション実行部において前記トランザクションのＣＯＭＭＩＴ前までの処理を所定数以上実行したとき、前記コネクションそれぞれにおける前記トランザクションのＣＯＭＭＩＴの実行を指示し、（２）前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を複数発見したとき、前記記憶部に記憶されたアクセス履歴を消去し、前記トランザクション実行部に、前記コネクションそれぞれにおける前記トランザクションのＣＯＭＭＩＴの実行を指示した後、前記入力されたトランザクションに用いるコネクションとして、前記確立されたコネクションから任意のコネクションを選択し、当該トランザクションにおける前記データベースへのアクセス先を、前記選択したコネクションに関するアクセス履歴に記録するトランザクション制御部と、を備えることを特徴とするトランザクション制御装置とした。
【０００９】
請求項６に記載の発明は、データベースとの間で確立されたコネクションごとに、当該コネクションを用いてアクセスする前記データベースのアクセス先を示したアクセス履歴を記憶する記憶部を備え、前記データベースに格納されたデータに対し、複数のコネクションを用いて複数のトランザクションを並列に実行するトランザクション制御装置が、前記トランザクションの入力を受け付けるステップと、前記データベースとの間で前記複数のコネクションを確立するステップと、前記入力されたトランザクションを解析し、当該トランザクションの前記データベースにおけるアクセス先を特定するステップと、（１）前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を１つ発見したとき、前記アクセス履歴に対応するコネクションを、当該トランザクションに用いるコネクションとして選択し、当該トランザクションにおける前記データベースへのアクセス先を、前記選択したコネクションに関するアクセス履歴に記録するステップと、前記選択されたコネクションを用いて、前記トランザクションのＣＯＭＭＩＴ前までの処理を実行するステップと、前記トランザクションのＣＯＭＭＩＴ前までの処理を所定数以上実行したとき、前記コネクションそれぞれにおける前記トランザクションのＣＯＭＭＩＴを実行するステップとを実行し、（２）前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を複数発見したとき、前記記憶部に記憶されたすべてのアクセス履歴を消去するステップと、前記コネクションそれぞれにおける前記トランザクションのＣＯＭＭＩＴを実行するステップと、前記入力されたトランザクションに用いるコネクションとして、前記確立されたコネクションから任意のコネクションを選択し、当該トランザクションにおける前記データベースへのアクセス先を、前記選択したコネクションに関するアクセス履歴に記録するステップと、を実行することを特徴とするトランザクション制御方法とした。
【００１０】
このようにすることで、トランザクション制御装置は、トランザクションを複数のコネクションを用いて並列実行する場合、所定数以上のトランザクションを実行した後でＣＯＭＭＩＴを実行する。従って、ＣＯＭＭＩＴの回数を削減し、トランザクションの速度を高速化することができる。また、このトランザクション制御装置は、コネクションごとのアクセス履歴から、当該トランザクションと同じアクセス先へアクセスする可能性のあるアクセス履歴を１つ発見したとき、そのアクセス履歴に示されるコネクションを用いてトランザクションを実行するようにする。つまり、同じアクセス先へアクセスする可能性があるトランザクションは同じコネクションを用いるようにする。そして、トランザクション制御装置は、当該トランザクションと同じアクセス先へアクセスする可能性のあるアクセス履歴を複数発見したとき、各コネクションのトランザクションのＣＯＭＭＩＴを実行し、アクセス履歴も消去する。このようにすることで、同じアクセス先へアクセスする可能性のあるトランザクションが複数のコネクションにより並列実行されることがなくなる。つまり、各トランザクションが最新のデータを参照できなくなるのを防止できる。
【００１１】
請求項２に記載の発明は、請求項１に記載のトランザクション制御装置において、前記トランザクション制御部は、前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を発見できなかったとき、前記入力されたトランザクションに用いるコネクションとして、前記確立されたコネクションから任意のコネクションを選択し、当該トランザクションにおける前記データベースへのアクセス先を、前記選択したコネクションに関するアクセス履歴に記録することを特徴とするトランザクション制御装置とした。
【００１２】
このような構成によれば、トランザクション制御装置は、同じアクセス先へアクセスする可能性のあるアクセス履歴を発見できなかったとき、確立された任意のコネクションの中から選択したコネクションを用いてトランザクションを実行する。
【００１３】
請求項３に記載の発明は、請求項１または請求項２に記載のトランザクション制御装置において、前記トランザクション制御部は、前回のＣＯＭＭＩＴの実行指示から所定時間経過したとき、前記トランザクション実行部に前記トランザクションそれぞれのＣＯＭＭＩＴの実行を指示することを特徴とするトランザクション制御装置とした。
【００１４】
このような構成によれば、トランザクション制御装置は、ＣＯＭＭＩＴの回数を削減し、トランザクションの速度を高速化することができる。
【００１５】
請求項４に記載の発明は、請求項１ないし請求項３のいずれか１項に記載のトランザクション制御装置において、前記記憶部は、過去の前記トランザクションの実行結果を蓄積したデータベースキャッシュを備え、前記トランザクション制御部は、前記データベースキャッシュにおける実行結果に当該トランザクションのアクセス先を含むデータがあるか否かを判断し、前記データベースキャッシュにおける実行結果に、当該トランザクションのアクセス先を含むデータがあると判断したとき、前記データベースキャッシュにおける実行結果をもとに当該トランザクションを実行し、当該トランザクションの実行結果を前記データベースキャッシュに蓄積し、前記データベースキャッシュにおける実行結果に、当該トランザクションのアクセス先を含むデータがないと判断したとき、前記データベースのデータに対し当該トランザクションを実行するトランザクション制御装置とした。
【００１６】
このような構成によれば、トランザクション制御装置は、データベースキャッシュに蓄積されたデータにより当該トランザクションが実行可能と判断したとき、このデータベースキャッシュに蓄積されたデータで当該トランザクションを実行するので、トランザクションの速度をさらに高速化できる。
【００１７】
請求項５に記載の発明は、請求項１ないし請求項４のいずれか１項に記載のトランザクション制御装置において、前記トランザクションおよび前記アクセス履歴に示される前記データベースのアクセス先は、ＳＱＬ（Structured Query Language）を用いた条件により記述され、前記トランザクション制御部は、前記記憶部に記憶されたアクセス履歴から、当該トランザクションのアクセス先を含むアクセス履歴を探すとき、前記トランザクションおよび前記アクセス履歴におけるＳＱＬのＦＲＯＭ句およびＷＨＥＲＥ句により示される条件を参照して探すことを特徴とするトランザクション制御装置とした。
【００１８】
このような構成によれば、トランザクション制御装置は、アクセス履歴から、特定したトランザクションのアクセス先を含むアクセス履歴を探すとき、ＳＱＬのＦＲＯＭ句およびＷＨＥＲＥ句を参照して探すことができる。
【００１９】
請求項７に記載の発明は、請求項６に記載のトランザクション制御方法をコンピュータであるトランザクション処理装置に実行させることを特徴とするトランザクション制御プログラムとした。
【００２０】
このようなプログラムによれば、請求項６に記載のトランザクション制御方法を一般的なコンピュータに実行させることができる。
【００２１】
請求項８に記載の発明は、請求項７に記載のトランザクション制御プログラムを記憶したコンピュータに読取り可能な記憶媒体とした。
【００２２】
このような記憶媒体に記憶されたプログラムをコンピュータにインストールすることで、このコンピュータに請求項６に記載のトランザクション制御方法を実行させることができる。
【発明の効果】
【００２３】
本発明によれば、トランザクションにおけるＣＯＭＭＩＴの回数を削減し、トランザクションの速度を高速化することができる。特に、短いトランザクションを扱う場合、トランザクション全体のＣＯＭＭＩＴの回数を大幅に削減できる。
【発明を実施するための最良の形態】
【００２４】
以下、本発明を実施するための最良の形態（以下、実施の形態という）を第１の実施の形態および第２の実施の形態に分けて説明する。まず、各実施の形態のトランザクション制御装置の動作概要を、図１を用いて説明する。図１は、各実施の形態のトランザクション制御装置の動作概要を概念的に示した図である。
【００２５】
例えば、各実施の形態のトランザクション制御装置は、アプリケーションサーバからトランザクションＡ〜Ｉを受け付けると、このトランザクションＡ〜Ｉを接続Ｃ１〜Ｃ３に振り分け、再構築する。つまり、接続（コネクション）Ｃ１においてトランザクションＣ,Ｆ,Ｇを実行した後、この３つのトランザクションＣ,Ｆ,ＧのＣＯＭＭＩＴ（コミット）をまとめて実行する。また、接続Ｃ２においてトランザクションＡ,Ｈを実行した後、このトランザクションＡ,Ｈの２つのＣＯＭＭＩＴをまとめて実行する。さらに、接続Ｃ３においてもトランザクションＢ,Ｄ,Ｅを実行した後、このトランザクションＢ,Ｄ,Ｅの３つのＣＯＭＭＩＴをまとめて実行する。それからトランザクションＩ以降の処理にとりかかる。このようにトランザクション制御装置は実行すべきトランザクションをそれぞれ再構築し、複数のトランザクションを一まとめにしてＣＯＭＭＩＴを実行するのでＣＯＭＭＩＴの実行回数を減らすことができる。なお、トランザクション制御装置は、受け付けたトランザクションのＳＱＬの内容から、データベースの同じデータにアクセスする可能性のあるトランザクション同士を同じ接続にまとめるようにする。つまり、データベースの同じデータにアクセスする可能性のあるトランザクションを複数の接続にまたがって実行しないようにする。このようにすることで、トランザクション制御装置は複数の接続を用いてトランザクションを並列実行する場合であっても、各トランザクションの参照データに不整合が生じるのを防止できる。
【００２６】
≪第１の実施の形態≫
図２を用いて本発明の第１の実施の形態を説明する。図２は、本発明の第１の実施の形態におけるシステムの構成を示した図である。
【００２７】
＜システムの全体構成＞
システムは、アプリケーションサーバ１と、トランザクション制御装置２と、データベース３とを含んで構成される。このアプリケーションサーバ１と、トランザクション制御装置２と、データベース３とは、ＣＰＵ（Central Processing Unit）、ＲＡＭ（Random Access Memory）等のメモリ、入出力インタフェース等を備えるコンピュータにより実現される。このアプリケーションサーバ１と、トランザクション制御装置２と、データベース３とは、図示しないネットワークで通信可能に接続されるものとする。
【００２８】
アプリケーションサーバ１は、例えば、データベース３を用いて大量のログデータ処理を実行するサーバであり、このログデータ処理のためのトランザクションをトランザクション制御装置２へ送信し、このトランザクション制御装置２経由でデータベース３に対し処理を実行する。このトランザクション制御装置２はデータベース３との間でコネクション（接続）を複数確立し、この接続を用いてデータベース３に対し、トランザクションを実行する。
【００２９】
このデータベース３は、ＤＢＭＳを備え、このアプリケーションサーバ１からのトランザクションの対象であるログデータ（アプリケーションサーバ１における加工途中のログデータ等）を格納する。例えば、このデータベース３は、図２に示すように、（key0,key1, val（value））＝（0,1,A）,（0,2,B）,（1,1,C）というデータを持つtab_aを格納する。
【００３０】
なお、ここでは、トランザクション制御装置２は、アプリケーションサーバ１とは別個の装置として説明するが、このトランザクション制御装置２の機能をアプリケーションサーバ１のミドルウェアとして組み込んでもよい。
【００３１】
＜トランザクション制御装置＞
トランザクション制御装置２は、入力部２０と、トランザクション入力部２１と、トランザクション解析部２２と、記憶部２３と、トランザクション並列実行部２４と、トランザクション制御部２５と、コネクション確立部２７と、出力部２８とを含んで構成される。このトランザクション制御装置２には、このトランザクション制御装置２へ各種データを入力する入力装置（例えば、キーボードやマウス）や、このトランザクション制御装置２の演算処理結果を出力する出力装置（例えば、液晶モニタ等）が接続されていてもよい。
【００３２】
入力部２０は、このトランザクション制御装置２に対する各種設定の入力等を受け付ける。
【００３３】
トランザクション入力部２１は、アプリケーションサーバ１から送信されたトランザクション（トランザクションＢＴｉ）の入力を受け付ける。このトランザクションは、例えば、図２の吹き出し１１０に示すようにトランザクションＢＴ０,ＢＴ１,ＢＴ２という連続したトランザクションを受け付ける。
【００３４】
このトランザクションＢＴｉは、データベース３に対する書き込みや読み込みに関する条件を示したものであり、例えば、ＳＱＬにより記述される。例えば、トランザクションＢＴ０,ＢＴ１,ＢＴ２はそれぞれ、
・トランザクションＢＴ０：
BEGIN;
SELECT* FROM tab_a WHERE key0=0;
UPDATE tab_a SET val=‘D’WHERE key0=0；
COMMIT;
（tab_aのkey0=0のレコードの値をDに更新する）
・トランザクションＢＴ１：
BEGIN;
SELECT* FROM tab_a WHERE key0=0;
COMMIT;
（tab_aのkey0=0を参照する）
・トランザクションＢＴ２：
BEGIN;
SELECT* FROM tab_a WHERE key1=1;
COMMIT;
（tab_aのkey1=1を参照する）
といったものである。なお、この記述言語はＳＱＬ以外の言語を用いるようにしてもよい。
【００３５】
トランザクション解析部２２は、入力されたトランザクションを解析し、このトランザクションのデータベース３におけるアクセス先を特定する。具体的には、トランザクション解析部２２は、入力されたトランザクションのＦＲＯＭ句とＷＨＥＲＥ句とを読み出す。
【００３６】
記憶部２３は、アクセス履歴２３１（２３１Ａ,２３１Ｂ,２３１Ｃ）を記憶する。このアクセス履歴２３１（２３１Ａ,２３１Ｂ,２３１Ｃ）は、このトランザクション制御装置２が確立したコネクション（接続Ｃ１,Ｃ２,Ｃ３）ごとに当該接続を用いたデータベース３のアクセス先を示した情報である。このアクセス履歴２３１は、図２に示すように接続ごとに、当該接続を使ってアクセスしたトランザクションのＦＲＯＭ句とＷＨＥＲＥ句に示された内容が記録される。
【００３７】
例えば、図２に示すアクセス履歴２３１Ａは、接続Ｃ１により、トランザクション実行部２４１（２４１Ａ）が、
SELECT* FROM tab_a WHERE key0=0;
UPDATE tab_a SET val=‘D’WHERE key0=0；
（tab_aのkey0=0のレコードの値をDに更新する）
というトランザクションを実行することを示す。トランザクション制御部２５は、このようなアクセス履歴２３１を参照することで、各接続が、データベース３のどの部分を対象にトランザクションを実行しているのかを把握できる。これにより、トランザクション制御装置２は、各接続で並列してデータベース３の同じ部分にアクセスしないようにできる。
【００３８】
なお、この記憶部２３は、ＲＡＭ、ＨＤＤ（Hard Disk Drive）等の記憶媒体により実現される。
【００３９】
トランザクション並列実行部２４は、コネクション確立部２７により確立された接続を用いてデータベース３のデータに対しトランザクションを実行する。このようなトランザクション並列実行部２４は、接続ごとに、当該トランザクションを実行するトランザクション実行部２４１（２４１Ａ,２４１Ｂ,２４１Ｃ）を備える。このトランザクション実行部２４１は、データベース３に対し、トランザクションそれぞれのＣＯＭＭＩＴ前までの処理を実行する。そして、トランザクション制御部２５（後記）からの指示に基づきこのトランザクションのＣＯＭＭＩＴを実行する。
【００４０】
トランザクション制御部２５は、記憶部２３に記憶されたアクセス履歴２３１を参照して、入力されたトランザクションに用いる接続を選択する。このトランザクション制御部２５は、記憶部２３に記憶されたアクセス履歴２３１から、当該トランザクションのアクセス先を含むアクセス履歴２３１を１つ発見したとき、この発見したアクセス履歴２３１に示される接続を、当該トランザクションに用いる接続として選択する。また、ここで選択した接続のアクセス履歴２３１に当該トランザクションに示されるアクセス先を記録する。さらに、トランザクション制御部２５は、トランザクション実行部２４１においてこのトランザクションのＣＯＭＭＩＴ前までの処理を所定数以上実行したとき、このトランザクションそれぞれのＣＯＭＭＩＴの実行を指示する。つまり、トランザクション制御部２５は、トランザクションのＣＯＭＭＩＴをまとめて実行させる。これによりトランザクションのＣＯＭＭＩＴの回数を削減できる。なお、このＣＯＭＭＩＴの実行の判断には記憶部２３に記憶される閾値（図示せず）を参照する。さらに、このトランザクション制御部２５は、記憶部２３に記憶されたアクセス履歴２３１から、当該トランザクションのアクセス先を含む可能性のあるアクセス履歴２３１を複数発見したとき、トランザクション並列実行部２４に各トランザクションのＣＯＭＭＩＴの実行させたあとで、当該トランザクションに用いる接続を選択する。また、ここで選択した接続のアクセス履歴２３１に当該トランザクションに示されるアクセス先を記録する。
【００４１】
コネクション確立部２７は、外部装置（ここでは、データベース３）との間でコネクション（接続）を確立する。
【００４２】
出力部２８は、このトランザクション制御装置２がデータベース３等、外部装置へデータを出力するときの出力インタフェースである。
【００４３】
なお、このうち、入力部２０、トランザクション入力部２１および出力部２８は、外部とのデータ入出力を行うための入出力インタフェースにより実現される。また、トランザクション解析部２２、トランザクション並列実行部２４、トランザクション制御部２５およびコネクション確立部２７は、ＣＰＵによるプログラム実行処理により実現してもよいし、専用のハードウェアにより実現してもよい。プログラム実行処理により実現する場合、記憶部２３内にトランザクション制御プログラムが格納される。
【００４４】
＜動作手順＞
次に、図２を参照しつつ、図３を用いてトランザクション制御装置２の動作手順を説明する。図３は、図２のトランザクション制御装置の動作手順を示すフローチャートである。
【００４５】
ここでは、トランザクション制御装置２において実行するトランザクションが１つの列として並び、そのトランザクションの列をＢＴｉ（ｉ＝０,,,∞）とし、各接続に振り分けた後のトランザクションの列をＮＴｊ（ｊ＝０,,,∞）とする。また、トランザクション制御装置２が確立した接続の数、つまりトランザクションの並列実行数をＮとした場合、各接続をＣｋ（ｋ＝１,,,Ｎ）とする。
【００４６】
まず、図２のトランザクション制御装置２は、事前にコネクション確立部２７により接続Ｃｋを確立しておく。そして、トランザクション制御装置２は、ｉ＝０をセットし（Ｓ３００）、トランザクション入力部２１において、トランザクションＢＴｉの入力を受け付ける（Ｓ３０１）。次に、トランザクション解析部２２においてトランザクションＢＴｉを解析し、トランザクションＢＴｉのアクセス先に関する情報を得る（Ｓ３０２）。つまり、トランザクション解析部２２は、このトランザクションＢＴｉにおけるＳＱＬのＦＲＯＭ句やＷＨＥＲＥ句を解析し、データベース３のどのレコードに対するアクセスであるかを解析する。
【００４７】
次に、トランザクション制御部２５は、記憶部２３に、このトランザクションＢＴｉのアクセス先を含む可能性のあるアクセス履歴２３１があるか否かを判断する（Ｓ３０３）。例えば、Ｓ３０１で受け付けたトランザクションＢＴｉが、「SELECT* FROM tab_a WHERE key0=0;（tab_aのkey0=0を参照する）」であるとき、トランザクション制御部２５は、記憶部２３にこの「tab_a」に関する情報が記録されたアクセス履歴２３１があるか否かを判断する。つまり、トランザクション制御部２５は、トランザクションＢＴｉおよびアクセス履歴２３１のＦＲＯＭ句およびＷＨＥＲＥ句により示される条件を参照して、このトランザクションＢＴｉのアクセス先を含む可能性のあるアクセス履歴２３１を探す。
【００４８】
このトランザクションＢＴｉのアクセス先を含む可能性のあるアクセス履歴２３１がなかった場合（Ｓ３０３のＮｏ）、トランザクション制御部２５は、確立されている接続Ｃｋの中から、このトランザクションＢＴｉの実行に用いる接続Ｃｋを選択する（Ｓ３１０）。ここでの接続Ｃｋの選択はランダムに行ってよい。
【００４９】
そして、トランザクション制御部２５は、この選択した接続Ｃｋに関するアクセス履歴２３１に、このトランザクションＢＴｉのアクセス先に関する情報を記録する（Ｓ３１１）。例えば、トランザクション制御部２５は、接続Ｃ３を選択した場合、この接続Ｃ３に関するアクセス履歴２３１Ｃに、このトランザクションＢＴｉのアクセス先に関する情報（SELECT* FROM tab_a WHERE key0=0;（tab_aのkey0=0を参照する）等）を記録する。
【００５０】
そして、トランザクション制御部２５は、Ｓ３１０で選択した接続Ｃｋを用いてトランザクション並列実行部２４にトランザクションＢＴｉのＣＯＭＭＩＴ前までの処理を実行するよう指示する。つまり、Ｓ３１０で選択した接続Ｃｋを用いるトランザクションＮＴｊにおいて、このトランザクションＢＴｉを実行するようにする。これにより、トランザクション並列実行部２４は、Ｓ３１０で選択した接続Ｃｋを用いて、データベース３にアクセスし、トランザクションＢＴｉのコミット（ＣＯＭＭＩＴ）前までの処理を実行する（Ｓ３１２）。
【００５１】
この後、トランザクション制御部２５は、トランザクション並列実行部２４において、所定数以上のトランザクションＢＴｉを実行したか否かを判断し（Ｓ３１３）、まだ所定数以上のトランザクションＢＴｉを実行していなければ（Ｓ３１３のＮｏ）、ｉの値を＋１インクリメントし（Ｓ３１４）、Ｓ３０１へ戻る。つまり、次のトランザクションＢＴｉの処理に移る。
【００５２】
一方、既に所定数以上のトランザクションＢＴｉを実行していれば（Ｓ３１３のＹｅｓ）、トランザクション並列実行部２４はすべての接続ＣｋのトランザクションＮＴｊでＣＯＭＭＩＴを実行する（Ｓ３１５）。つまり、トランザクション並列実行部２４はまだＣＯＭＭＩＴが実行されていなかったすべての接続ＣｋにおいてトランザクションＢＴｉのＣＯＭＭＩＴを実行する。そして、トランザクション制御部２５は、記憶部２３のすべての接続Ｃｋに関するアクセス履歴２３１を消去し（Ｓ３１６）、Ｓ３０１へ戻る。
【００５３】
このように、トランザクション制御装置２は、トランザクションＢＴｉが入力されるたびにＣＯＭＭＩＴを実行することを避け、所定数のトランザクションＢＴｉのＣＯＭＭＩＴをまとめて実行する。従って、全体としてのＣＯＭＭＩＴの回数を削減できる。
【００５４】
なお、Ｓ３０３において、このトランザクションＢＴｉのアクセス先に関する情報が記録されている可能性のあるアクセス履歴２３１があった場合（Ｓ３０３のＹｅｓ）、トランザクション制御部２５は、このアクセス履歴２３１は、１つの接続Ｃｋについてのみか否かを判断する（Ｓ３０４）。例えば、トランザクション制御部２５は、記憶部２３にこの「tab_a」に関する情報が記録されたアクセス履歴２３１が複数あるか否かを判断する。
【００５５】
ここで、このトランザクションＢＴｉのアクセス先に関する情報が記録されているアクセス履歴２３１は、１つの接続Ｃｋについてのみであるとき（Ｓ３０４のＹｅｓ）、トランザクション制御部２５は、当該接続ＣｋをトランザクションＢＴｉの実行に用いる接続として選択する（Ｓ３０５）。そして、Ｓ３１１へ進む。
【００５６】
一方、このトランザクションＢＴｉのアクセス先に関する情報が記録されているアクセス履歴２３１が、複数あったとき（Ｓ３０４のＮｏ）、トランザクション並列実行部２４はすべての接続ＣｋのトランザクションＮＴｊでＣＯＭＭＩＴを実行する（Ｓ３１５）。そして、すべての接続Ｃｋに関するアクセス履歴２３１を消去する（Ｓ３１６）。この後、Ｓ３０１へ戻る。
【００５７】
つまり、トランザクション制御部２５は、記憶部２３に格納されているアクセス履歴２３１の中から、当該トランザクションＢＴｉと同じアクセス先へ既にアクセスしている可能性がある接続Ｃｋ（トランザクションＮＴｊ）を複数発見したとき、まず、すべてのトランザクションＮＴｊにおいてＣＯＭＭＩＴを実行する。そして、トランザクション制御部２５は、各接続Ｃｋのアクセス履歴２３１を消去（クリア）する。そして、トランザクション制御部２５は、このトランザクションＢＴｉの処理を実行する接続Ｃｋを選びなおす。このようにすることで、トランザクション制御部２５は、同じアクセス先へ既にアクセスしている可能性がある複数の接続Ｃｋにおいて並列にトランザクションＢＴｉを実行することがなくなる。つまり、各トランザクションＢＴｉは、データベース３の最新のデータを参照することになるので、データの不整合が生じなくなる。
【００５８】
＜第１の実施の形態の例＞
次に、図２、図３および図４を参照して、トランザクション制御装置２の動作手順を具体的に説明する。図４は、各実施の形態のトランザクションを例示した図である。
【００５９】
ここでは、データベース３に、
create table a(
key0 int8,
key1 int8,
value char(008)
); 
で定義されるテーブルａが格納され、トランザクション制御装置２は、key0およびkey1を介してテーブルａを操作するトランザクションＢＴ１,ＢＴ２,ＢＴ３,ＢＴ４を実行する場合を例に説明する。このトランザクションＢＴ１〜ＢＴ４の内容は、図４に示すとおりである。ここで、トランザクション制御装置２からデータベース３への接続Ｃｋは、図２に示したように接続Ｃ１〜Ｃ３の３つであり、この３つで並列にトランザクションＢＴｉを実行するものとする。
【００６０】
まず、トランザクション制御装置２が、トランザクションＢＴ１を実行する場合、アクセス履歴２３１はすべて空であるので(図３のＳ３０３のＮｏ参照)、どの接続ＣｋでトランザクションＢＴ１のトランザクションを実行してもよい。ここで、例えば、トランザクション制御装置２のトランザクション制御部２５が接続Ｃ３を選んだ場合、この接続Ｃ３についてのアクセス履歴２３１（２３１Ｃ）に、key0の値が「１」のデータに対してアクセスがあったことを記録しておく（Ｓ３１１参照）。そして、トランザクション並列実行部２４のトランザクション実行部２４１（２４１Ｃ）は、トランザクションＢＴ１におけるＳＱＬをトランザクションＮＴ１として実行する（Ｓ３１２参照）。但し、ここではまだＣＯＭＭＩＴは実行しない。
【００６１】
次に、トランザクション制御装置２が、トランザクションＢＴ２を実行する場合、どのアクセス履歴２３１にもkey0の値が「2」のデータに対してアクセスがあったことは記録されていないので、どの接続ＣｋでトランザクションＢＴ２のトランザクションを実行してもよい。ここで、例えば、トランザクション制御装置２のトランザクション制御部２５が接続Ｃ２を選んだ場合、この接続Ｃ２についてのアクセス履歴２３１（２３１Ｂ）に、key0の値が「2」のデータに対してアクセスがあったことを記録しておく。そして、トランザクション並列実行部２４のトランザクション実行部２４１（２４１Ｂ）は、トランザクションＢＴ２におけるＳＱＬをトランザクションＮＴ２として実行する。但し、ここではまだＣＯＭＭＩＴは実行しない。
【００６２】
続いて、トランザクション制御装置２が、トランザクションＢＴ３を実行する場合、既にアクセス履歴２３１にkey0の値が「１」のデータに対してアクセスがあったことが記録されている。このため、トランザクション制御部２５は、トランザクションＢＴ３のトランザクションを接続Ｃ３で実行する。そして、接続Ｃ３についてのアクセス履歴２３１（２３１Ｃ）に、key0の値が「１」のデータに対してアクセスがあったことを記録しておく。そして、トランザクション並列実行部２４のトランザクション実行部２４１（２４１Ｃ）は、トランザクションＢＴ３におけるＳＱＬをトランザクションＮＴ３として実行する。但し、ここではまだＣＯＭＭＩＴは実行しない。
【００６３】
最後に、トランザクション制御装置２が、トランザクションＢＴ４を実行する場合、アクセス履歴２３１Ｃにkey0の値が「１」のデータに対してアクセスがあったことと、アクセス履歴２３１Ｂにkey0の値が「２」のデータに対してアクセスがあったこととが記載されている。しかし、このトランザクションＢＴ４が参照しようとしている、key1の値が「１」のデータが、これらのデータと同じであるとは断定できない。つまり、key1の値が「１」のデータがこれらのデータと同じである可能性がある。従って、トランザクション制御部２５は、記憶部２３にトランザクションＢＴ４のアクセス先を含む可能性のあるアクセス履歴２３１が複数あると判断し（図３のＳ３０３のＹｅｓ→Ｓ３０４のＮｏ参照）、トランザクション並列実行部２４は接続Ｃ１〜Ｃ３のすべてのトランザクションＮＴｊでＣＯＭＭＩＴを実行する（Ｓ３１５参照）。そして、トランザクション制御部２５は、すべての接続Ｃ１〜Ｃ３に関するアクセス履歴２３１Ａ〜２３１Ｃを消去する（Ｓ３１６参照）。その後、トランザクション制御部２５は、いずれかの接続Ｃｋを選択し、トランザクションＢＴ４に関するアクセス履歴２３１を記録する（Ｓ３１１参照）。
【００６４】
なお、ここでは、key0およびkey1の値の関係が不明な場合について説明したが、key0およびkey1の値の関係が予め分かっている場合、以下のようにしてもよい。すなわち、トランザクション制御部２５は、key0およびkey1の値の関係に基づき、各アクセス履歴２３１に記録されたkey0の値が「１」のレコードや、key0の値が「２」のレコードが、トランザクションＢＴ４が参照しようとしているkey1の値が「１」であるレコードと同じか否かを判断する。ここで、トランザクションＢＴ４が参照しようとしているデータが、いずれかのアクセス履歴２３１に記録された参照データと同じと判断された場合、その参照データが記録されたアクセス履歴２３１の接続Ｃｋを用いて、トランザクションＢＴ４を実行する。
【００６５】
≪第２の実施の形態≫
次に、本発明の第２の実施の形態を説明する。図５は、本発明の第２の実施の形態におけるシステムの構成を示した図である。前記した第１の実施の形態と同様の構成要素は同じ符号を付して、説明を省略する。
【００６６】
図５に示すように、第２の実施の形態におけるシステムのトランザクション制御装置２Ａは、データベース３に対するトランザクションの実行結果を蓄積したデータベースキャッシュ２９を備えることを特徴とする。このデータベースキャッシュ２９は、例えば、トランザクション並列実行部２４が、過去にデータベース３に対し実行したトランザクションＢＴｉの結果である（key0,key1,value）＝（0,1,A）,（0,2,B）を記憶する。
【００６７】
このようなトランザクション制御装置２Ａの動作手順を、図６を用いて説明する。図６は、図５のトランザクション制御装置の動作手順を示すフローチャートである。図６のＳ６００、Ｓ６０１はそれぞれ、図３のＳ３００、Ｓ３０１と同じであるので説明を省略し、Ｓ６０２から説明する。
【００６８】
トランザクション制御装置２Ａのトランザクション解析部２２は、入力されたトランザクションＢＴｉにおけるＳＱＬのＦＲＯＭ句やＷＨＥＲＥ句を解析し、このトランザクションＢＴｉのアクセス先に関する情報を得る（Ｓ６０２）。そして、トランザクション制御部２５は、データベースキャッシュ２９上のデータで、このトランザクションＢＴｉが実行可能か否かを判断する（Ｓ６０３）。つまり、トランザクション制御部２５は、データベースキャッシュ２９に、このトランザクションＢＴｉのアクセス先に関する情報があるか否かを判断する。例えば、入力された、トランザクションＢＴｉが「SELECT* FROM tab_a WHERE key0=0;（tab_aのkey0=0を参照する）」であった場合、この「key0=0」の参照結果が、データベースキャッシュ２９に登録されているか否かを判断する。
【００６９】
ここで、トランザクション制御部２５は、データベースキャッシュ２９上のデータでこのトランザクションＢＴｉが実行可能と判断したとき（Ｓ６０３のＹｅｓ）、データベースキャッシュ２９上の該当データを利用してトランザクションＢＴｉを実行する（Ｓ６０４）。そして、Ｓ６１５へ進み、ｉの値を＋１インクリメントする。このＳ６１５の処理は、前記した図３のＳ３１４と同じである。
【００７０】
一方、トランザクション制御部２５は、データベースキャッシュ２９上のデータでこのトランザクションＢＴｉが実行不可能と判断したとき（Ｓ６０３のＮｏ）、Ｓ６０５へ進む。この後のＳ６０５〜Ｓ６０７、Ｓ６１０〜Ｓ６１２、Ｓ６１４〜Ｓ６１７の処理は、それぞれ前記した図３のＳ３０３〜Ｓ３０５、Ｓ３１０〜Ｓ３１２、Ｓ３１３〜Ｓ３１６の処理と同様なので説明を省略する。なお、Ｓ６０５において、トランザクション制御装置２Ａは、まず、データベースキャッシュ２９に蓄積された過去のトランザクションＢＴｉの追加・更新結果をすべてデータベース３へ反映する。それから、トランザクション制御部２５は、このトランザクションＢＴｉの実行に用いる接続Ｃｋを選択し（Ｓ６１０）、この選択された接続Ｃｋを用いて、データベース３に対しトランザクションＢＴｉを実行する（Ｓ６１２）。このようにすることで、トランザクションＢＴｉは、このトランザクションＢＴｉよりも前に実行すべきトランザクションの内容が反映されたデータベース３に対し、処理を実行することができる。
【００７１】
なお、Ｓ６１２においてトランザクション並列実行部２４がトランザクションＢＴｉを実行した後、このトランザクションの実行結果をデータベースキャッシュ２９上に記録する（Ｓ６１３）。このようにトランザクション制御装置２Ａは、データベースキャッシュ２９に蓄積されたトランザクションの実行結果を用いるので、トランザクション処理を高速化できる。また、フローチャートでの説明は省略したが、トランザクション並列実行部２４においてＣＯＭＭＩＴを実行中に、トランザクションＢＴｉの入力を受け付けたときには、データベースキャッシュ２９のデータを用いてトランザクションＢＴｉを実行する。これにより、ＣＯＭＭＩＴの実行によりトランザクションＢＴｉが停止するのを防止できる。
【００７２】
＜第２の実施の形態の例＞
次に、図４、図５および図６を参照して、第２の実施の形態の具体例を説明する。第２の実施の形態のデータベース３にはテーブルａが格納され、入力されるトランザクションＢＴｉは図４に示したトランザクションＢＴ１〜ＢＴ４である場合を例に説明する。
【００７３】
トランザクション制御装置２Ａ（図５参照）のトランザクション解析部２２は、入力されたトランザクションＢＴ１におけるＳＱＬのＦＲＯＭ句やＷＨＥＲＥ句を解析する（図６のＳ６０２参照）。そして、トランザクション制御部２５は、データベースキャッシュ２９上のデータで、このトランザクションＢＴ１が実行可能か否かを判断する（Ｓ６０３参照）。このトランザクションＢＴ１は、単なるレコードの追加操作であり、トランザクション制御部２５はデータベースキャッシュ２９上にレコードを追加すればよい。つまり、データベース３を直接参照する必要はない。従って、トランザクション制御部２５は、データベースキャッシュ２９上のデータで、このトランザクションＢＴ１が実行可能と判断する（Ｓ６０３のＹｅｓ参照）。そして、トランザクション制御部２５はこのトランザクションＢＴ１を実行し（Ｓ６０４参照）、データベースキャッシュ２９上にレコードを追加する。
【００７４】
次に、トランザクション解析部２２は、トランザクションＢＴ２について解析し（Ｓ６０２参照）、トランザクション制御部２５は、このトランザクションＢＴ２がデータベースキャッシュ２９上のデータで実行可能か否かを判断する（Ｓ６０３参照）。例えば、このトランザクションＢＴ２は、key0が「２」であるレコードに対してvalueの値を「１」に更新するものである。従って、データベースキャッシュ２９上にkey0が「２」のレコードがあるか否かを判断する（Ｓ６０３参照）。ここで、トランザクション制御部２５は、データベースキャッシュ２９上のデータでこのトランザクションＢＴ２が実行可能と判断したとき（Ｓ６０３のＹｅｓ参照）、データベースキャッシュ２９上のkey0が「２」であるレコードに対してvalueの値を「１」に更新する（Ｓ６０４参照）。
【００７５】
一方、トランザクション制御部２５が、データベースキャッシュ２９上のデータでこのトランザクションＢＴ２が実行不可能と判断したとき（Ｓ６０３のＮｏ参照）、どの接続Ｃｋにおけるアクセス履歴２３１においてもkey0が「２」のデータに対するアクセスは記録されていないため（Ｓ６０５のＮｏ参照）、このトランザクションＢＴ２の実行に用いる接続Ｃｋをランダムに選択してよいと判断できる。そこで、例えば、トランザクション制御部２５は、このトランザクションＢＴ２の実行に用いる接続Ｃｋとして接続Ｃ２を選択すると（Ｓ６１０参照）、この選択した接続Ｃ２に関するアクセス履歴２３１Ｂに、key0が「２」のデータに対するアクセスがあったことを記録しておく（Ｓ６１１参照）、その後、トランザクション実行部２４１（２４１Ｂ）は、このトランザクションＢＴ２におけるＳＱＬをトランザクションＮＴ２として実行する。但し、ＣＯＭＭＩＴはまだ実行しない。
【００７６】
次に、トランザクション解析部２２は、トランザクションＢＴ３について解析し（Ｓ６０２参照）、トランザクション制御部２５は、トランザクションＢＴ３について、データベースキャッシュ２９上のデータで実行可能か否かを判断する（Ｓ６０３参照）。このトランザクションＢＴ３は、key0が「１」であるレコードに対してvalueの値を参照するものである。よって、トランザクション制御部２５は、データベースキャッシュ２９上のトランザクションＢＴ１の実行結果のデータを利用してトランザクションＢＴ３を実行可能と判断する（Ｓ６０３のＹｅｓ参照）。そして、トランザクション制御部２５は、データベースキャッシュ２９上からトランザクションＢＴ１の実行結果のデータを利用してトランザクションＢＴ３を実行する（Ｓ６０４参照）。つまり、トランザクション制御装置２Ａは、データベース３へアクセスすることなくトランザクションＢＴ２を実行する。
【００７７】
次に、トランザクション解析部２２は、トランザクションＢＴ４について解析し（Ｓ６０２参照）、トランザクション制御部２５は、トランザクションＢＴ４について、データベースキャッシュ２９上のデータで実行可能か否かを判断する（Ｓ６０３参照）。この段階で、データベースキャッシュ２９上にはkey0が「１」であるレコードと、key0が「２」であるレコードへのトランザクションＢＴｉの実行結果が蓄積されている。しかし、これらのレコードが、このトランザクションＢＴ４のアクセス先であるkey1が「１」であるレコードと同じか否かは分からない。従って、このトランザクションＢＴ４について、データベースキャッシュ２９上のデータで実行不可能と判断する（Ｓ６０３のＮｏ参照）。そして、トランザクション制御装置２Ａは、まず、データベースキャッシュ２９上の過去のトランザクションＢＴｉの実行結果をすべてデータベース３へ反映する。つまり、key0が「１」であるデータの挿入や、key0が「２」であるデータに対する更新をデータベース３に対して実行する。また、このkey1が「１」であるレコードへのトランザクションＢＴｉの実行結果は、まだアクセス履歴２３１に記録されていないので（Ｓ６０５のＮｏ）、トランザクション制御部２５は、このトランザクションＢＴ４の実行に用いる接続Ｃｋをランダムに選択し（Ｓ６１０参照）、選択した接続Ｃｋに関するアクセス履歴２３１にトランザクションＢＴ４のアクセス先に関する情報を記録する（Ｓ６１１参照）。
【００７８】
そして、トランザクション並列実行部２４は、選択した接続Ｃｋを用いてトランザクションＢＴ４のＣＯＭＭＩＴ前までの処理を実行し（Ｓ６１２参照）、トランザクション制御部２５は、データベースキャッシュ２９上にこのトランザクションＢＴ４においてアクセスしたデータを記録する（Ｓ６１３参照）。
【００７９】
このようにすることで、トランザクション制御装置２Ａは、アプリケーションサーバ１から同じデータをアクセス先とするトランザクションＢＴｉを受け付けたとき、データベース３にアクセスする必要がなくなる。つまり、トランザクションを高速に実行できる。
【００８０】
なお、前記した各実施の形態において、トランザクション制御装置２,２Ａは、トランザクションを所定回数以上実行したときに、このトランザクションのＣＯＭＭＩＴを実行することとしたが、これに限定されない。例えば、トランザクション制御装置２,２Ａが前回のＣＯＭＭＩＴの実行から所定時間経過したときに、前記トランザクションのＣＯＭＭＩＴを実行するようにしてもよい。
【００８１】
さらに、前記した各実施の形態において、トランザクションはデータベース３に対し処理を行うトランザクションとしたが、これ以外の処理を行うトランザクションであってもよい。
【００８２】
本実施の形態に係るトランザクション制御装置２,２Ａは、前記したような処理を実行させるトランザクション制御プログラムによって実現することができ、そのプログラムをコンピュータによる読み取り可能な記憶媒体（ＣＤ−ＲＯＭ等）に記憶して提供することが可能である。また、そのプログラムを、ネットワークを通して提供することも可能である。
【実施例】
【００８３】
次に、図７を用いて本発明の実施例を説明する。図７は、本発明の実施例であるアクセス内容検査システムを説明する図である。ここでは、第２の実施の形態のトランザクション制御装置２Ａ（図５参照）をアクセス内容検査システム７０に実装した場合について説明する。このアクセス内容検査システム７０は、クライアント７６とサーバ７１との間のメッセージと、サーバ７１とデータベース７５との間のメッセージを検査し、クライアント７６からデータベース７５への不正アクセスの有無を検査する。
【００８４】
アクセス内容検査システム７０は、メッセージの検査を行う検査用マシン７２と、過去のメッセージ保存用のデータベース７３とを備える。この検査用マシン７２は、アプリケーションサーバ１およびトランザクション制御装置２Ａ（図５参照）の機能を備えるマシンである。つまり、この検査用マシン７２は、過去のメッセージ保存用のデータベース７３の参照結果を蓄積するデータベースキャッシュ（データベースキャッシュ２９）を備える。また、過去のメッセージ保存用のデータベース７３は、データベース３（図５参照）に相当する。この検査用マシン７２は、クライアント７６からサーバ７１へのメッセージと、このメッセージに基づきサーバ７１からデータベース７５へ送信されるメッセージとを取得すると、過去のメッセージ保存用のデータベース７３に蓄積された過去のメッセージを参照して、このメッセージが不正アクセスに関するメッセージか否かを判断する。
【００８５】
この検査用マシン７２の環境は、
CPU：Pentium4 Xenon 3.06 GHz,
メモリ：2 Gbytes,
ディスク：1 disk,
OS(Operating System):Fedora 5,
DBMS:PostgreSQL 8.1.4,
DBの初期データサイズ：600MB,
SUN:jdk1.50+JDBC3.0
である。
【００８６】
この過去のメッセージ保存用のデータベース７３に格納されるテーブルの定義は、
create table status_tab(
order_id   integer,
status     integer,
price      integer,
item_name  text
);
である。
【００８７】
またトランザクションは、以下の３種類である（$nは変数）。
BT0：
BEGIN;
SELECT* FROM STATUS_TAB WHERE order_id=$1;
COMMIT; 
BT1：
BEGIN;
INSERT INTO STATUS_TAB VALUES ($1,$2,$3,$4)；
COMMIT; 
BT2：
BEGIN;
UPDATE STATUS_TAB SET status     =$1,
price    =$2,
item_name=$3,
WHERE order_id=$4;
COMMIT;
【００８８】
また、比較例では、検査用マシン７２はデータベースキャッシュを用いるが、トランザクション制御装置２Ａの機能は実装しなかった。つまり、トランザクション再構築によるＣＯＭＭＩＴの回数削減は行わなかった。ここでの測定内容としては、検査対象のサーバ７１におけるレスポンスを測定した。なお、ここでのレスポンスとは、クライアント７６がサーバ７１に処理を要求してから、アクセス内容検査システム７０による検査を含むすべての処理を完了するまでにかかる時間のことをいう。このレスポンスを３０分間連続して測定したところ、その平均値は、
比較例：2124［msec］
本実施例：2020［msec］
であった。但し、検査用マシン７２でメッセージの検査を行わない場合のサーバ７１からのレスポンスの平均値は1976.5［msec］である。このため実質、検査用マシン７２での検査に要する時間は、1976.5［msec］を差し引いた
比較例：148［msec］
本実施例：45［msec］
である。従って、本実施例によれば、比較例よりも検査に要する時間が約70％短縮されることが確認された。
【図面の簡単な説明】
【００８９】
【図１】各実施の形態のトランザクション制御装置の特徴を概念的に示した図である
【図２】本発明の第１の実施の形態におけるシステムの構成を示した図である。
【図３】図２のトランザクション制御装置の動作手順を示すフローチャートである。
【図４】各実施の形態のトランザクションを例示した図である。
【図５】本発明の第２の実施の形態におけるシステムの構成を示した図である。
【図６】図５のトランザクション制御装置の動作手順を示すフローチャートである。
【図７】本発明の実施例であるアクセス内容検査システムを説明する図である。
【図８】本発明の比較例となる技術を説明する図である。
【符号の説明】
【００９０】
１      アプリケーションサーバ
２,２Ａ      トランザクション制御装置
３      データベース
２０    入力部
２１    トランザクション入力部
２２    トランザクション解析部
２３    記憶部
２４    トランザクション並列実行部
２５    トランザクション制御部
２７    コネクション確立部
２８    出力部
２９    データベースキャッシュ
２３１（２３１Ａ,２３１Ｂ,２３１Ｃ）  アクセス履歴
２４１（２４１Ａ,２４１Ｂ,２４１Ｃ）  トランザクション実行部
【図１】
2009026029.tif 000003
【図２】
2009026029.tif 000004
【図３】
2009026029.tif 000005
【図４】
2009026029.tif 000006
【図５】
2009026029.tif 000007
【図６】
2009026029.tif 000008
【図７】
2009026029.tif 000009
【図８】
2009026029.tif 000010