[実施の形態1]
本実施の形態では、正系ノード103におけるコネクションの解放に合わせて、副系ノード107において一括して当該コネクションに係るアクセスプランを一括して消去する例について説明する。
図1に、ネットワーク構成の第1例を示す。本実施の形態におけるデータベースシステムは、ミラーリングによって二重化されている。この観点から、図示したデータベースシステムは、二重化データベースシステムと呼ばれることもある。データベースシステムは、正系のデータベース101を稼動させている正系ノード103と、副系のデータベース105を稼動させている副系ノード107とを含む。そして、正系ノード103と副系ノード107とは、LAN(Local Area Network)を介して接続されている。
正系のデータベース101は、現用のデータベースである。副系のデータベース105は、待機中のデータベースである。正系ノード103に異常が発生したときには、副系のデータベース105が正系のデータベース101における稼動状態を引き継ぐので、データベースシステムとしての運用が継続されるようになっている。つまり、ノードの切り替えによって、図1に示した副系のデータベース105は、新たな正系のデータベースになる。
また、LANには、アプリケーション部111aを有するアプリケーションサーバ113aと、アプリケーション部111bを有するアプリケーションサーバ113bとが接続されている。アプリケーション部111a及びアプリケーション部111bは、データベースを利用するプログラムモジュールの例である。アプリケーション部111a及びアプリケーション部111bが、ユーザの業務においてデータベースを操作するアプリケーションである場合には、業務アプリケーション部と呼ばれることもある。
正系のデータベース101は、データベース管理システム121とデータ記憶部123とを有している。データベース管理システム121とデータ記憶部123との間では、例えば内部のバスを介してデータが伝送される。一方、副系のデータベース105は、データベース管理システム131とデータ記憶部133とを有している。データベース管理システム131とデータ記憶部133との間では、例えば内部のバスを介してデータが伝送される。この例で、正系のデータベース101及び副系のデータベース105は、リレーショナル型データベースである。
データベース管理システム121は、データ記憶部123に格納されているデータを管理するとともに、データベースへのアクセス要求を受け付け、そのアクセス要求に応える処理を行なう。
データ記憶部123に格納されるデータは、共有データということもある。データ記憶部123に格納されるデータは、例えばテーブルの構造を定義するデータ及びテーブルの実体データを含む。
データベース管理システム131は、データベース管理システム121の代替の役割を果たすために、データベース管理システム121と同様の処理能力を有する。更に、データベース管理システム131は、待機中における処理も行なう。また、データ記憶部133に格納されているデータは、データ記憶部123に格納されているデータと同期している。つまり、図1の例では、データベースシステムにおけるデータ記憶部は、データ記憶部123及びデータ記憶部133で二重化されている。
図2に、ネットワーク構成の第2例を示す。データベースシステムは、データベース管理システム121を稼動させている正系ノード103と、データベース管理システム131を稼動させている副系ノード107とを含む。そして、正系ノード103と副系ノード107とは、LANを介して接続されている。
更に、データベースシステムは、データ記憶部201を有するストレージ装置203を有している。ストレージ装置203は、LANを介して正系ノード103と副系ノード107とに接続されている。データベース管理システム121とデータ記憶部201とによって、図1における正系のデータベース101と同様に現用のデータベースとしての機能を果たす。そして、正系ノード103に異常が発生したときには、データベース管理システム131がデータベース管理システム121に代わって処理を受け継ぐ。そして、データベース管理システム131とデータ記憶部201とによって、図1における副系のデータベース105と同様に待機中のデータベースとしての機能を果たす。
このように、図2に示した例では、データベース管理システムは、データベース管理システム121及びデータベース管理システム131で二重化されているが、データ記憶部201は二重化されていない。
また、図1の場合と同様に、LANには、アプリケーション部111aを有するアプリケーションサーバ113aと、アプリケーション部111bを有するアプリケーションサーバ113bとが接続されている。
尚、図1及び図2では、二重化されたデータベースの例を示したが、三重以上に多重化されたデータベースに本実施の形態を適用するようにしてもよい。
続いて、シーケンスの例について説明する。図3に、実施の形態1に係るシーケンスの例を示す。この例は、アプリケーションサーバ113aのアプリケーション部111aによる業務において、正系ノード103及び副系ノード107を有する二重化データベースシステムを利用することを想定している。
アプリケーションサーバ113aのアプリケーション部111aから正系ノード103のデータベース管理システム121へのアクセス要求、及びアプリケーションサーバ113aのアプリケーション部111aから副系ノード107のデータベース管理システム131へのアクセス要求は、例えばSQL文の形式で記述される。但し、SQL以外のデータベース言語を用いた問合せ文によってデータベースへのアクセスを要求するようにしてもよい。また、この例におけるシーケンスは、SQLの仕様に基づく。
アプリケーションサーバ113aのアプリケーション部111aは、最初にCONNECT文を正系ノード103のデータベース管理システム121へ送る(S301)。CONNECT文は、データベースシステムへの接続を要求するためのSQL文である。
正系ノード103のデータベース管理システム121は、CONNECT文を受け付けると、要求元であるアプリケーションサーバ113aのアプリケーション部111aとのコネクションを確立させる(S303)。このとき、確立されたコネクションを識別するためのコネクションIDが割り振られる。そして、正系ノード103のデータベース管理システム121は、「成功」を示すコードをアプリケーションサーバ113aのアプリケーション部111aへ返す(S305)。
コネクションが確立している状態で、アプリケーションサーバ113aのアプリケーション部111aは、SELECT文(A)を正系ノード103のデータベース管理システム121へ送る(S307)。このSELECT文(A)は、S303で確立されたコネクションを前提としている。この例で、SELECT文(A)は、タイプAのSELECT文を意味する。
正系ノード103のデータベース管理システム121は、SELECT文(A)を受け付けると、SELECT文(A)に従って、データを抽出する(S309)。このとき、SELECT文(A)に基づくアクセスプラン(A)が生成され、生成されたアクセスプラン(A)が実行される。
アクセスプランは、データベースで管理されているデータ(例えば、テーブル)へのアクセスにおける処理の実行内容を規定した情報である。アクセスプランは、SQL文による要求を達成するための演算の内容と手順を定めている。演算は、例えばテーブルスキャン、インデックススキャン、レコードIDによるデータの抽出あるいはソートなどである。
生成されたアクセスプラン(A)が実行された結果、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。正系ノード103のデータベース管理システム121は、生成されたアクセスプラン(A)を正系ノード103のデータベース管理システム121内のキャッシュ領域に一時的に記憶する。そして、正系ノード103のデータベース管理システム121は、抽出されたデータ(A)をアプリケーションサーバ113aのアプリケーション部111aへ返す(S311)。この例で、データ(A)は、SELECT文(A)に基づいて抽出されたデータを意味する。
また、S309に示したデータの抽出において、正系ノード103のデータベース管理システム121は、SELECT文(A)、アクセスプラン(A)及びS303で割り振られたコネクションIDを含む保存データを生成し、生成された保存データを副系ノード107のデータベース管理システム131へ送る(S313)。このとき保存データに加えられたコネクションIDは、SELECT文(A)の前提となっているコネクションを特定する。
副系ノード107のデータベース管理システム131は、保存データを受信すると、保存データに含まれるアクセスプランと当該アクセスプランに付随するデータを保存する(S315)。本実施の形態では、このように正系ノード103のデータベース管理システム121で生成されたアクセスプランと当該アクセスプランに付随するデータが副系ノード107のデータベース管理システム131に送られ、副系ノード107のデータベース管理システム131で保存される。
更に、アプリケーションサーバ113aのアプリケーション部111aは、SELECT文(A)に続くアクセス要求として、SELECT文(B)を正系ノード103のデータベース管理システム121へ送る(S317)。このSELECT文(B)も、S303で確立されたコネクションを前提としている。この例で、SELECT文(B)は、タイプAとは異なるタイプBのSELECT文を意味する。
正系ノード103のデータベース管理システム121は、SELECT文(B)を受け付けると、SELECT文(B)に従って、データを抽出する(S319)。このとき、SELECT文(B)に基づくアクセスプラン(B)が生成され、生成されたアクセスプラン(B)が実行される。その結果、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。このとき、正系ノード103のデータベース管理システム121は、生成されたアクセスプラン(B)を正系ノード103のデータベース管理システム121内のキャッシュ領域に一時的に記憶する。そして、正系ノード103のデータベース管理システム121は、抽出されたデータ(B)をアプリケーションサーバ113aのアプリケーション部111aへ返す(S321)。この例で、データ(B)は、SELECT文(B)に基づいて抽出されたデータを意味する。
また、S319に示したデータの抽出において、正系ノード103のデータベース管理システム121は、SELECT文(B)、アクセスプラン(B)及びS303で割り振られたコネクションIDを含む保存データを生成し、生成された保存データを副系ノード107のデータベース管理システム131へ送る(S323)。このとき保存データに加えられたコネクションIDは、SELECT文(B)の前提となっているコネクションを特定する。
副系ノード107のデータベース管理システム131は、保存データを受信すると、保存データに含まれるアクセスプランと当該アクセスプランに付随するデータを保存する(S325)。上述したアクセスプラン(A)に加えて、アクセスプラン(B)も保存される。このように、正系ノード103のデータベース管理システム121は、新たなSQL文に対しては、アクセスプランを生成するとともに、生成されたアクセスプランを副系ノード107のデータベース管理システム131に送る。副系ノード107のデータベース管理システム131は、受信したアクセスプランを蓄積する。
そして、同じSQL文を再び受け付けた場合のシーケンスに移る。アプリケーションサーバ113aのアプリケーション部111aは、SELECT文(B)に続くアクセス要求として、再びSELECT文(A)を正系ノード103のデータベース管理システム121へ送る(S327)。S327において送られるSELECT文(A)は、S307において送られたSELECT文(A)と同じである。再び送られるSELECT文(A)も、S303で確立されたコネクションを前提としている。
正系ノード103のデータベース管理システム121は、SELECT文(A)を受け付けると、SELECT文(A)に従って、データを抽出する(S329)。このとき、S309において生成されたアクセスプラン(A)がキャッシュ領域から読み出され、読み出されたアクセスプラン(A)が実行される。つまり、SELECT文(A)に基づいてアクセスプラン(A)を生成する処理は、省かれる。そして、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。正系ノード103のデータベース管理システム121は、抽出されたデータ(A)をアプリケーションサーバ113aのアプリケーション部111aへ返す(S331)。
この例では、S309からS329の間に、データベースにおける実データが更新されていないという前提で、S309で抽出されたデータ(A)が再びS329で抽出される様子を示している。尚、データベースにおける実データが更新されていれば、同じアクセスプランを実行しても、異なるデータが抽出されることがある。
端子A、端子B及び端子Cを介して、図4に示したシーケンスへ移る。S303で確立されたコネクションを前提とした一連のアクセスが終わると、アプリケーションサーバ113aのアプリケーション部111aは、DISCONNECT文を正系ノード103のデータベース管理システム121へ送る(S401)。DISCONNECT文は、データベースシステムとの接続を切断させるためのSQL文である。
正系ノード103のデータベース管理システム121は、DISCONNECT文を受け付けると、要求元であるアプリケーションサーバ113aのアプリケーション部111aとのコネクションを解放する(S403)。このとき、解放されたコネクションを前提として受け付けたSQL文に基づくアクセスプランを、キャッシュ領域から消去する。
そして、正系ノード103のデータベース管理システム121は、「成功」を示すコードをアプリケーションサーバ113aのアプリケーション部111aへ返す(S405)。
正系ノード103のデータベース管理システム121は、S403に示したコネクションの解放において、解放されたコネクションを特定するコネクションIDを含む通知データを副系ノード107のデータベース管理システム131へ送る(S407)。
副系ノード107のデータベース管理システム131は、通知データを受信すると、自ら保存したアクセスプランの中から、通知データに含まれるコネクションIDに対応付けられているアクセスプランを探索する。そして探索されたアクセスプランと当該アクセスプランに付随するデータを消去する(S409)。
本実施の形態では、正系ノード103のデータベース管理システム121内のキャッシュ領域におけるアクセスプランが消去されるタイミングで、副系ノード107のデータベース管理システム131において保存されている同じアクセスプランも消去される。従って、副系ノード107のデータベース管理システム131におけるアクセスプランの蓄積量が、一方的に増加し続けることが抑制される。
図4の例は、コネクションの解放までにノードの切り替えが起こらないことを想定している。次に、コネクションの解放に至る前にノードの切り替えが起こる場合のシーケンスについて説明する。
図5に、端子A、端子B及び端子Cを介して図3から続くシーケンスの例を示す。正系ノード103のデータベース管理システム121が停止すると、ノードの切り替えが行なわれる(S501)。例えば、アプリケーションサーバ113aのアプリケーション部111aから正系ノード103のデータベース管理システム121へのアクセス要求に対して、所定時間内に正系ノード103のデータベース管理システム121から応答が無い場合に、アプリケーションサーバ113aのアプリケーション部111aは正系ノード103のデータベース管理システム121が停止したと判断する。そして、アプリケーションサーバ113aのアプリケーション部111aは副系ノード107のデータベース管理システム131にCONNECT文を送り、アプリケーションサーバ113aのアプリケーション部111aと副系ノード107のデータベース管理システム131との間の新たなコネクションが確立される。ノードが切り替えられると、副系ノード107が新たな正系ノードとなる。また、図1の例で、副系ノード107における副系のデータベース105が、新たな正系のデータベースとなる。つまり、新たな正系ノードで稼動する新たな正系のデータベースは、図1に示したデータベース管理システム131とデータ記憶部133によって実現されることになる。そして、データベース管理システム131は、データベース管理システム121における処理を受け継ぐ。
ノードの切り替え後に、アプリケーションサーバ113aのアプリケーション部111aが、再びSELECT文(A)を新たな正系ノードのデータベース管理システム131へ送ると想定する(S503)。S503において送られるSELECT文(A)は、図3のS307及びS327において送られたSELECT文(A)と同じである。
新たな正系ノードのデータベース管理システム131は、SELECT文(A)を受け付けると、SELECT文(A)に従って、データを抽出する(S505)。このとき、図3のS315において保存されたアクセスプラン(A)が実行される。つまり、SELECT文(A)に基づいてアクセスプラン(A)を生成する処理は、省かれる。そして、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。新たな正系ノードのデータベース管理システム131は、抽出されたデータ(A)をアプリケーションサーバ113aのアプリケーション部111aへ返す(S507)。
この例では、S309からS505の間に、データベースにおける実データが更新されていないという前提で、S309及びS329で抽出されたデータ(A)が再びS505で抽出される様子を示している。
SELECT文(B)についてもSELECT文(A)と同様のシーケンスとなる。例えば、SELECT文(A)に続くアクセス要求として、アプリケーションサーバ113aのアプリケーション部111aがSELECT文(B)を新たな正系ノードのデータベース管理システム131へ送ると想定する(S509)。S509において送られるSELECT文(B)は、図3のS317において送られたSELECT文(B)と同じである。
新たな正系ノードのデータベース管理システム131は、SELECT文(B)を受け付けると、SELECT文(B)に従って、データを抽出する(S511)。このとき、図3のS325において保存されたアクセスプラン(B)が実行される。つまり、SELECT文(B)に基づいてアクセスプラン(B)を生成する処理は、省かれる。そして、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。新たな正系ノードのデータベース管理システム131は、抽出されたデータ(B)をアプリケーションサーバ113aのアプリケーション部111aへ返す(S513)。
このように、副系ノード107のデータベース管理システム131において予め保存しておいたアクセスプランを用いれば、ノードの切り替え後においてアクセスプランを生成する処理が省かれ、処理時間が短くなる。
図3乃至図5に示したシーケンスの例では、コネクションを前提とするアクセス要求の例として、SELECT文を示したが、コネクションを前提とするアクセス要求は、INSERT文、DELETE文、あるいはUPDATE文などの他のSQL文であってもよい。INSERT文、DELETE文、あるいはUPDATE文においても、SELECT文の場合と同様に、アクセスプランと当該アクセスプランに付随するデータが処理される。
つまり、正系ノード103のデータベース管理システム121が新たなINSERT文を受け付けた場合には、正系ノード103のデータベース管理システム121は、受け付けたINSERT文に基づくアクセスプランを生成し、生成されたアクセスプランを実行することによって、テーブルへのレコードの挿入を行う。そして、正系ノード103のデータベース管理システム121は、当該INSERT文、当該アクセスプラン及び前提となっているコネクションを特定するコネクションIDを含む保存データを、副系ノード107のデータベース管理システム131へ送る。副系ノード107のデータベース管理システム131は、保存データに含まれる当該アクセスプランと当該アクセスプランに付随するデータを保存する。
同様に、正系ノード103のデータベース管理システム121が新たなDELETE文を受け付けた場合には、正系ノード103のデータベース管理システム121は、受け付けたDELETE文に基づくアクセスプランを生成し、生成されたアクセスプランを実行することによって、テーブルにおけるレコードの削除を行う。そして、正系ノード103のデータベース管理システム121は、当該DELETE文、当該アクセスプラン及び前提となっているコネクションを特定するコネクションIDを含む保存データを、副系ノード107のデータベース管理システム131へ送る。副系ノード107のデータベース管理システム131は、保存データに含まれる当該アクセスプランと当該アクセスプランに付随するデータを保存する。
同様に、正系ノード103のデータベース管理システム121が新たなUPDATE文を受け付けた場合には、正系ノード103のデータベース管理システム121は、受け付けたUPDATE文に基づくアクセスプランを生成し、生成されたアクセスプランを実行することによって、テーブルにおけるレコードの更新を行う。そして、正系ノード103のデータベース管理システム121は、当該UPDATE文、当該アクセスプラン及び前提となっているコネクションを特定するコネクションIDを含む保存データを、副系ノード107のデータベース管理システム131へ送る。副系ノード107のデータベース管理システム131は、保存データに含まれる当該アクセスプランと当該アクセスプランに付随するデータを保存する。
そして、SELECT文に基づくアクセスプランを消去するのと同じように、副系ノード107のデータベース管理システム131は、INSERT文に基づくアクセスプラン、DELETE文に基づくアクセスプラン及びUPDATE文に基づくアクセスプランを消去する。
また、ノードの切り替え後の新たな正系ノードのデータベース管理システム131は、SELECT文を受け付けた場合に、既に保存してあるアクセスプランを用いるのと同様に、INSERT文、DELETE文あるいはUPDATE文を受け付けた場合に、既に保存してあるアクセスプランを用いる。
次に、正系ノード103におけるデータベース管理システム121のモジュール構成について説明する。図6に、正系ノード103におけるデータベース管理システム121のモジュール構成例を示す。データベース管理システム121は、主系処理部601を有している。主系処理部601は、稼動系として、SQL文を受け付け、SQL文に応じた処理を行なう。主系処理部601は、受付部603、接続部605、第1探索部607、生成部609、保存処理部611、送信部613、実行部615、返信部617、切断部619、通知部621及び調整部623を有している。
受付部603は、データベースを利用するプログラムモジュール(例えば、アプリケーションサーバ113aのアプリケーション部111a)からSQL文を受け付ける。接続部605は、CONNECT文の送信元であるプログラムモジュールとのコネクションを確立させる接続処理を行なう。第1探索部607は、キャッシュ領域633内でアクセスプランを探索する。生成部609は、SQL文に基づいてアクセスプランを生成する。保存処理部611は、生成されたアクセスプランをキャッシュ領域633に保存する。送信部613は、データを副系ノード107のデータベース管理システム131へ送信する。実行部615は、アクセスプランを実行する。返信部617は、アクセスプランを実行した結果を、SQL文の送信元へ返信する。切断部619は、DISCONNECT文の送信元であるプログラムモジュールとの間のコネクションを解放させる切断処理を行なう。通知部621は、通知データを、副系ノード107のデータベース管理システム131に送信する。調整部623は、記憶領域631の空き容量を調整する。
データベース管理システム121は、記憶領域631を有している。記憶領域631は、例えば正系ノード103のメインメモリあるいはキャッシュメモリに設けられる。そして、記憶領域631には、キャッシュ領域633が設けられる。この例では、キャッシュ領域633a乃至キャッシュ領域633cが設けられている。キャッシュ領域633は、コネクション毎に設けられ、コネクションIDに対応付けられている。この例では、キャッシュ領域633に、コネクションIDを含むヘッダ部が付加されている。
また、データベース管理システム121は、統計部641、第1データ格納部643及び第1同期処理部645も有している。統計部641は、データベースの利用状況に基づく統計データ(例えばテーブルのページ数、テーブルのレコード数、あるいはインデックスにおけるキー値の数など)を生成する。第1データ格納部643は、統計部641で生成された統計データを格納する。生成部609は、アクセスプランを生成する際に、第1データ格納部643に格納されている統計データを用いる。第1同期処理部645は、第1データ格納部643に格納されている統計データを副系ノード107のデータベース管理システム131と同期させる処理を行なう。尚、統計部641、第1データ格納部643及び第1同期処理部645については、実施の形態5において説明する。
上述した主系処理部601、受付部603、接続部605、第1探索部607、生成部609、保存処理部611、送信部613、実行部615、返信部617、切断部619、通知部621、調整部623、統計部641及び第1同期処理部645は、ハードウエア資源(例えば、図36)と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
上述した記憶領域631及び第1データ格納部643は、ハードウエア資源(例えば、図36)を用いて実現される。
図7に、キャッシュ領域633のテーブル構成例を示す。キャッシュ領域633は、コネクション毎に、当該コネクションにおいて受け付けられたSQL文と、当該SQL文に基づいて生成されたアクセスプランとを対応付けて記憶する。図7に示した例では、キャッシュ領域633に第1テーブル701及び第2テーブル703が含まれている。第1テーブル701には、SQL文単位のレコードが設けられている。第2テーブル703には、アクセスプラン単位のレコードが設けられている。そして、第1テーブル701におけるレコードと、第2テーブル703におけるレコードとが対応付けられている。
この例では、第1テーブル701におけるレコードに、当該レコードに格納されるSQL文のIDと、当該SQL文と、当該SQL文に対応するアクセスプランのIDとを夫々設定するためのフィールドが設けられている。一方、第2テーブル703におけるレコードには、当該レコードに格納されるアクセスプランのIDと、当該アクセスプランとを夫々設定するためのフィールドが設けられている。例えば、アクセスプランIDは、各レコードに順番に割り振られている。このように、アクセスプランIDによって、第1テーブル701におけるレコードと、第2テーブル703におけるレコードとが対応付けられている。尚、この例で第1テーブル701は、SQL文のハッシュ値をSQL文IDとするハッシュテーブルである。但し、図7とは異なる構成によって、SQL文とアクセスプランとを対応付けるようにしてもよい。
次に、副系ノード107におけるデータベース管理システム131のモジュール構成について説明する。図8に、副系ノード107におけるデータベース管理システム131のモジュール構成例を示す。データベース管理システム131は、副系処理部801を有している。副系処理部801は、待機中に、データベース管理システム121で生成されたアクセスプランを受け取り、ノードの切り替えに先立って、予めアクセスプランを保持する処理を行なう。副系処理部801は、受信部803、記憶処理部805、消去部807及び更新部809を有している。
受信部803は、正系ノード103のデータベース管理システム121からデータを受信する。記憶処理部805は、保存領域823を確保して、確保した保存領域823に保存データに含まれるアクセスプラン他を記憶させる。消去部807は、保存領域823のデータを消去する。更新部809は、新しい統計データに基づいてアクセスプランを更新する。
データベース管理システム131は、記憶領域821を有している。記憶領域821は、例えば副系ノード107のメインメモリあるいはキャッシュメモリに設けられる。そして、記憶領域821には、保存領域823が設けられる。この例では、保存領域823a乃至保存領域823fが設けられている。保存領域823は、保存するアクセスプラン毎に設けられる。そして、保存領域823には、アクセスプラン及びアクセスプランに付随するデータが格納される。
データベース管理システム131は、第2同期処理部831及び第2データ格納部833も有している。第2同期処理部831は、図6の第1同期処理部645を介して、図6の第1データ格納部643に格納されている統計データを取得し、第2データ格納部833に格納させる。第2データ格納部833は、図6の第1データ格納部643に格納されている統計データと同じデータを保持する。つまり、図6の第1同期処理部645と第2同期処理部831との連携によって、図6の第1データ格納部643と図8の第2データ格納部833は、データの同期が図られる。
上述した副系処理部801、受信部803、記憶処理部805、消去部807、更新部809及び第2同期処理部831は、ハードウエア資源(例えば、図36)と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
上述した記憶領域821及び第2データ格納部833は、ハードウエア資源(例えば、図36)を用いて実現される。
図9に、実施の形態1に係る保存領域823の例を示す。この例では、保存領域823において、SQL文と、アクセスプランと、コネクションIDとが対応付けて記憶されている。SQL文は、例えばアクセスプランを紐付けるために用いられる。コネクションIDは、例えばいずれのコネクションにおいて生成されたアクセスプランであるかを判別するために用いられる。
次に、正系ノード103のデータベース管理システム121における処理について説明する。図10に、主系処理部601のメイン処理フローを示す。受付部603は、待機して、データベースを利用するプログラムモジュール(例えば、アプリケーションサーバ113aのアプリケーション部111a)からSQL文を受け付ける(S1001)。
まず、受付部603は、S1001において受け付けたSQL文がCONNECT文であるか否かを判定する(S1003)。S1001において受け付けたSQL文がCONNECT文であると判定した場合には、接続部605は、接続処理を実行する(S1005)。接続処理では、CONNECT文の送信元であるプログラムモジュールとのコネクションを確立させる。接続処理については、図12を用いて後述する。接続処理を終えると、S1001へ戻る。
S1003において、S1001において受け付けたSQL文がCONNECT文ではないと判定した場合には、受付部603は、当該SQL文がSELECT文であるか否かを判定する(S1007)。S1001において受け付けたSQL文がSELECT文であると判定した場合には、主系処理部601は、抽出処理を実行する(S1009)。
但し、SELECT文の送信元であるプログラムモジュールとの間にコネクションが存在しない場合には、抽出処理は実行されない。抽出処理では、例えば指定されたテーブルにおける指定されたレコードから所望のデータを抽出する。抽出処理については、図13を用いて後述する。抽出処理を終えると、S1001へ戻る。
S1007において、S1001において受け付けたSQL文がSELECT文ではないと判定した場合には、受付部603は、当該SQL文がINSERT文であるか否かを判定する(S1011)。S1001において受け付けたSQL文がINSERT文であると判定した場合には、受付部603は、挿入処理を実行する(S1013)。
但し、INSERT文の送信元であるプログラムモジュールとの間にコネクションが存在しない場合には、挿入処理は実行されない。挿入処理では、例えば指定されたテーブルに指定されたレコードを挿入する。挿入処理については、後に補足的に説明する。挿入処理を終えると、S1001へ戻る。
S1011において、S1001において受け付けたSQL文がINSERT文ではないと判定した場合には、受付部603は、当該SQL文がDELETE文であるか否かを判定する(S1015)。S1001において受け付けたSQL文がDELETE文であると判定した場合には、受付部603は、削除処理を実行する(S1017)。
但し、DELETE文の送信元であるプログラムモジュールとの間にコネクションが存在しない場合には、削除処理は実行されない。削除処理では、例えば指定されたテーブルにおける指定されたレコードを削除する。削除処理については、後に補足的に説明する。削除処理を終えると、S1001へ戻る。
S1015において、S1001において受け付けたSQL文がDELETE文ではないと判定した場合には、端子Dを介して、図11のS1101へ移る。受付部603は、図10のS1001において受け付けたSQL文がUPDATE文であるか否かを判定する(S1101)。図10のS1001において受け付けたSQL文がUPDATE文であると判定した場合には、主系処理部601は、更新処理を実行する(S1103)。但し、UPDATE文の送信元であるプログラムモジュールとの間にコネクションが存在しない場合には、更新処理は実行されない。更新処理では、例えば指定されたテーブルにおける指定されたレコードのデータを更新する。更新処理については、後に補足的に説明する。更新処理を終えると、図10のS1001へ戻る。
S1101において、図10のS1001において受け付けたSQL文がUPDATE文ではないと判定した場合には、受付部603は、図10のS1001において受け付けたSQL文がDISCONNECT文であるか否かを判定する(S1105)。図10のS1001において受け付けたSQL文がDISCONNECT文であると判定した場合には、切断部619は、切断処理を実行する(S1107)。但し、DISCONNECT文の送信元であるプログラムモジュールとの間にコネクションが存在しない場合には、切断処理は実行されない。切断処理については、図15を用いて後述する。切断処理を終えると、図10のS1001へ戻る。また、S1105において、図10のS1001において受け付けたSQL文がDISCONNECT文ではないと判定した場合にも、図10のS1001へ戻る。
次に、接続処理について説明する。CONNECT文の送信元であるプログラムモジュールとのコネクションを確立させる点は、従来技術と同様である。以下では、従来技術における処理のうち本実施の形態と関連する処理及び本実施の形態における処理について説明する。図12に、接続処理フローを示す。接続部605は、確立させたコネクションにコネクションIDを割り当てる(S1201)。接続部605は、記憶領域631において当該コネクションに対応するキャッシュ領域633を確保する(S1203)。この例では、確保したキャッシュ領域633のヘッダ部にコネクションIDを設定する。接続部605は、「成功」を示すコードを、CONNECT文の送信元のプログラムモジュールへ返す(S1205)。
次に、抽出処理について説明する。図13に、抽出処理(A)フローを示す。第1探索部607は、前提となっているコネクションに対応するキャッシュ領域633内で、図10のS1001で受け付けたSQL文と同じSQL文(=SELECT文)に対応付けられているアクセスプランを探索する(S1301)。第1探索部607は、図10のS1001で受け付けたSQL文と同じSQL文に対応付けられているアクセスプランがあったか否かを判定する(S1303)。当該コネクションにおいて初めて受け付けたSQL文については、当該SQL文と同じSQL文に対応付けられているアクセスプランはない。一方、当該コネクションにおいて既に受け付けたSQL文については、当該SQL文と同じSQL文に対応付けられているアクセスプランがある。
図10のS1001で受け付けたSQL文と同じSQL文に対応付けられているアクセスプランがなかったと判定した場合には、生成部609は、SQL文(=SELECT文)を解析して、アクセスプランを生成する(S1305)。このとき、生成部609は、第1データ格納部643に格納されている統計データに基づいて、アクセスプランを生成する。
そして、保存処理部611は、保存処理を実行する(S1307)。保存処理では、前提となっているコネクションに対応するキャッシュ領域633に、S1305で生成されたアクセスプランが保存される。
次に、保存処理について説明する。図14に、保存処理フローを示す。保存処理部611は、第2テーブル703の空きレコードを探す(S1401)。保存処理部611は、空きレコードのアクセスプランIDを特定する(S1403)。保存処理部611は、S1305で生成されたアクセスプランを空きレコードに格納する(S1405)。保存処理部611は、SQL文に基づいてSQL文IDを特定する(S1407)。この例で、保存処理部611は、SQL文のハッシュ値を算出し、算出されたハッシュ値をSQL文IDとして用いる。保存処理部611は、第1テーブル701の空きレコードを特定し(S1409)、SQL文ID、SQL文及びアクセスプランIDを空きレコードに格納する(S1411)。保存処理を終えると、図13に示したS1309の処理に戻る。
図13の説明に戻る。送信部613は、SQL文(=SELECT文)、アクセスプラン及びコネクションIDを含む保存データを送信する(S1309)。そして、実行部615は、アクセスプランを実行する(S1311)。返信部617は、アクセスプランを実行した結果として抽出されたデータを、SQL文の送信元へ返す(S1313)。
また、S1303において、図10のS1001で受け付けたSQL文と同じSQL文に対応付けられているアクセスプランがあったと判定した場合には、S1311の処理に移る。以上で、抽出処理(A)についての説明を終える。
尚、図10に示したS1013における挿入処理では、SQL文がINSERT文であり、図13に示した抽出処理(A)と同様の手順でINSERT文に基づくアクセスプランを生成する。そして、送信部613は、当該アクセスプランを保存データに含め、実行部615は、当該アクセスプランを実行する。但し、抽出処理(A)におけるS1313の処理は、行わない。
図10に示したS1017における削除処理では、SQL文がDELETE文であり、図13に示した抽出処理(A)と同様の手順でDELETE文に基づくアクセスプランを生成する。そして、送信部613は、当該アクセスプランを保存データに含め、実行部615は、当該アクセスプランを実行する。但し、抽出処理(A)におけるS1313の処理は、行わない。
図11に示したS1103における更新処理では、SQL文がUPDATE文であり、図13に示した抽出処理(A)と同様の手順でUPDATE文に基づくアクセスプランを生成する。そして、送信部613は、当該アクセスプランを保存データに含め、実行部615は、当該アクセスプランを実行する。但し、抽出処理(A)におけるS1313の処理は、行わない。
次に、切断処理について説明する。DISCONNECT文の送信元であるプログラムモジュールとのコネクションを解放させる点は、従来技術と同様である。以下では、従来技術における処理のうち本実施の形態と関連する処理及び本実施の形態における処理について説明する。
図15に、切断処理(A)フローを示す。切断部619は、解放させたコネクションのIDを無効にする(S1501)。切断部619は、解放させたコネクションのIDがヘッダ部に設定されているキャッシュ領域633を特定し、当該キャッシュ領域633を解放する(S1503)。つまり、当該キャッシュ領域633のデータは消去される。通知部621は、解放させたコネクションのIDを含む通知データを、副系ノード107のデータベース管理システム131に送信する(S1505)。切断部619は、「成功」を示すコードを、DISCONNECT文の送信元のプログラムモジュールへ返す(S1507)。
続いて、副系ノード107のデータベース管理システム131における処理について説明する。図16に、副系処理部801のメイン処理フローを示す。受信部803は、待機して、正系ノード103のデータベース管理システム121からデータを受信する(S1601)。記憶処理部805は、受信したデータが保存データであるか否かを判定する(S1603)。受信したデータが保存データであると判定した場合には、記憶処理部805は、記憶処理を実行する(S1605)。
図17に、記憶処理(A)フローを示す。記憶処理部805は、記憶領域821に新たな保存領域823を確保する(S1701)。記憶処理部805は、保存データに含まれるSQL文、アクセスプラン及びコネクションIDを新たな保存領域823に記憶させる(S1703)。記憶処理を終えると、図16のS1601へ戻る。
図16の説明に戻って、S1603において、S1601において受信したデータが保存データではないと判定した場合には、消去部807は、S1601において受信したデータが通知データであるか否かを判定する(S1607)。S1601において受信したデータが通知データであると判定した場合には、消去部807は、消去処理を実行する(S1609)。
図18に、消去処理(A)フローを示す。消去部807は、通知データに含まれるコネクションIDと同じコネクションIDがヘッダ部に設定されている保存領域823を1つ特定する(S1801)。消去部807は、特定された保存領域823を解放する(S1803)。つまり、保存領域823のデータは消去される。消去部807は、通知データに含まれるコネクションIDと同じコネクションIDがヘッダ部に設定されている保存領域823であって、未特定の保存領域823があるか否かを判定する(S1805)。未特定の保存領域823があると判定した場合には、S1801に戻る。一方、未特定の保存領域823がないと判定した場合には、消去処理(A)を終え、図16のS1601へ戻る。
図16の説明に戻って、S1607において、消去部807は、S1601において受信したデータが通知データではないと判定した場合には、S1601に戻る。
次に、ノードの切り替えによって、副系ノード107から移行した新たな正系ノードについて説明する。図19に、新たな正系ノードにおけるデータベース管理システム131のモジュール構成例を示す。受継ぎ処理部1901は、ノードが切り替えに応じて、旧正系ノードの主系処理部601から処理を受け継ぐ。そして、受継ぎ処理部1901は、記憶領域821の保存領域823に格納されているアクセスプランを用いて、SQL文に応じた処理を行なう。受継ぎ処理部1901は、受付部603、接続部605、第1探索部607、生成部609、保存処理部611、実行部615、返信部617、切断部619及び第2探索部1903を有している。受付部603、接続部605、第1探索部607、生成部609、保存処理部611、実行部615、返信部617及び切断部619は、図6に示した主系処理部601に含まれるモジュールと同様である。
第2探索部1903は、受付部603で受け付けたSQL文と同じSQL文を有する保存領域823を探す。
記憶領域821には、図6の記憶領域631と同様に、キャッシュ領域633が設けられる。キャッシュ領域633の構成は、図7に示した通りである。
上述した受継ぎ処理部1901、受付部603、接続部605、第1探索部607、生成部609、保存処理部611、実行部615、返信部617、切断部619及び第2探索部1903は、ハードウエア資源(例えば、図36)と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
続いて、受継ぎ処理部1901における処理について説明する。ノードの切り替えによって、新たな正系ノードのデータベース管理システム131とSQL文の送信元のプログラムモジュールとの間においてコネクションが確立し、当該コネクションのIDが割り当てられていると想定する。受継ぎ処理部1901におけるメイン処理は、図10に示した主系処理部601のメイン処理と同じである。以下、主系処理部601における処理と異なる点について、抽出処理を例として説明する。
受継ぎ処理部1901は、図13に示した抽出処理(A)に代えて、抽出処理(B)を実行する。図20に、抽出処理(B)フローを示す。抽出処理(A)の場合と同様に、第1探索部607は、前提となっているコネクションに対応するキャッシュ領域633内で、図10のS1001で受け付けたSQL文と同じSQL文(=SELECT文)に対応付けられているアクセスプランを探索する(S2001)。抽出処理(A)の場合と同様に、第1探索部607は、図10のS1001で受け付けたSQL文と同じSQL文に対応付けられているアクセスプランがあったか否かを判定する(S2003)。
図10のS1001で受け付けたSQL文と同じSQL文に対応付けられているアクセスプランがあったと判定した場合には、実行部615は、当該アクセスプランを実行する(S2015)。そして、返信部617は、アクセスプランを実行した結果として抽出されたデータを、SQL文の送信元へ返す(S2017)。
一方、S2003において、図10のS1001で受け付けたSQL文と同じSQL文に対応付けられているアクセスプランがなかったと判定した場合には、第2探索部1903は、図10のS1001で受け付けたSQL文と同じSQL文(=SELECT文)を有する保存領域823を探す(S2005)。第2探索部1903は、図10のS1001で受け付けたSQL文と同じSQL文(=SELECT文)を有する保存領域823があったか否かを判定する(S2007)。
図10のS1001で受け付けたSQL文と同じSQL文(=SELECT文)を有する保存領域823があったと判定した場合には、第2探索部1903は、当該保存領域823に含まれるアクセスプランを読み出す(S2009)。つまり、第2探索部1903は、S1001で受け付けたSQL文に対応付けられているアクセスプランを読み出す。
一方、S2007において、図10のS1001で受け付けたSQL文と同じSQL文(=SELECT文)を有する保存領域823がなかったと判定した場合には、生成部609は、SQL文(=SELECT文)を解析して、アクセスプランを生成する(S2011)。
そして、保存処理部611は、抽出処理(A)の場合と同様に、保存処理を実行する(S2013)。保存処理によって、新たに生成されたアクセスプラン及び保存領域823から読み出したアクセスプランをキャッシュ領域633に記憶させる。そして、実行部615は、当該アクセスプランを実行し(S2015)、返信部617は、抽出されたデータを返す(S2017)。抽出処理(B)を終えると、図10のS1001へ戻る。
尚、図10に示したS1013における挿入処理では、SQL文がINSERT文であり、図20に示した抽出処理(B)と同様の手順でINSERT文に基づくアクセスプランを生成する。そして、送信部613は、当該アクセスプランを保存データに含め、実行部615は、当該アクセスプランを実行する。但し、抽出処理(B)におけるS2017の処理は、行わない。
図10に示したS1017における削除処理では、SQL文がDELETE文であり、図20に示した抽出処理(B)と同様の手順でDELETE文に基づくアクセスプランを生成する。そして、送信部613は、当該アクセスプランを保存データに含め、実行部615は、当該アクセスプランを実行する。但し、抽出処理(B)におけるS2017の処理は、行わない。
図11に示したS1103における更新処理では、SQL文がUPDATE文であり、図20に示した抽出処理(B)と同様の手順でUPDATE文に基づくアクセスプランを生成する。そして、送信部613は、当該アクセスプランを保存データに含め、実行部615は、当該アクセスプランを実行する。但し、抽出処理(B)におけるS2017の処理は、行わない。
本実施の形態によれば、副系ノード107のデータベース管理システム131において、アクセスプランを記憶するための記憶領域821における残量不足を予防できる。
[実施の形態2]
本実施の形態では、同一のSQL文に対応するアクセスプランについて、副系ノード107において重複して記憶しないようにする例について説明する。
図21に、実施の形態2に係るシーケンスの例を示す。この例は、アプリケーションサーバ113aのアプリケーション部111aによる業務及びアプリケーションサーバ113bのアプリケーション部111bによる業務において、正系ノード103及び副系ノード107を有する二重化データベースシステムを利用することを想定している。また、この例では、アプリケーションサーバ113aのアプリケーション部111aと正系ノード103のデータベース管理システム121との間のコネクションと、アプリケーションサーバ113bのアプリケーション部111bと正系ノード103のデータベース管理システム121との間のコネクションとが並存する。
アプリケーションサーバ113aのアプリケーション部111aから正系ノード103のデータベース管理システム121へのアクセス要求、アプリケーションサーバ113aのアプリケーション部111aから副系ノード107のデータベース管理システム131へのアクセス要求、アプリケーションサーバ113bのアプリケーション部111bから正系ノード103のデータベース管理システム121へのアクセス要求、更にアプリケーションサーバ113bのアプリケーション部111bから副系ノード107のデータベース管理システム131へのアクセス要求は、例えばSQL文の形式で記述される。但し、SQL以外のデータベース言語を用いた問合せ文によってデータベースへのアクセスを要求するようにしてもよい。また、この例におけるシーケンスは、SQLの仕様に基づく。
アプリケーションサーバ113aのアプリケーション部111aは、最初にCONNECT文を正系ノード103のデータベース管理システム121へ送る(S2101)。
正系ノード103のデータベース管理システム121は、CONNECT文を受け付けると、要求元であるアプリケーションサーバ113aのアプリケーション部111aとのコネクションを確立させる(S2103)。このとき、確立されたコネクションを識別するためのコネクションIDが割り振られる。そして、正系ノード103のデータベース管理システム121は、「成功」を示すコードをアプリケーションサーバ113aのアプリケーション部111aへ返す(S2105)。
コネクションが確立している状態で、アプリケーションサーバ113aのアプリケーション部111aは、SELECT文(A)を正系ノード103のデータベース管理システム121へ送る(S2107)。このSELECT文(A)は、S2103で確立されたコネクションを前提としている。実施の形態1における例と同様に、SELECT文(A)は、タイプAのSELECT文を意味する。
正系ノード103のデータベース管理システム121は、SELECT文(A)を受け付けると、SELECT文(A)に従って、データを抽出する(S2109)。このとき、SELECT文(A)に基づくアクセスプラン(A)が生成され、生成されたアクセスプラン(A)が実行される。その結果、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。正系ノード103のデータベース管理システム121は、生成されたアクセスプラン(A)を正系ノード103のデータベース管理システム121内のキャッシュ領域633に一時的に記憶する。そして、正系ノード103のデータベース管理システム121は、抽出されたデータ(A)をアプリケーションサーバ113aのアプリケーション部111aへ返す(S2111)。実施の形態1における例と同様に、データ(A)は、SELECT文(A)に基づいて抽出されたデータを意味する。
また、S2109に示したデータの抽出において、正系ノード103のデータベース管理システム121は、SELECT文(A)及びアクセスプラン(A)を含む保存データを生成し、生成された保存データを副系ノード107のデータベース管理システム131へ送る(S2113)。
副系ノード107のデータベース管理システム131は、保存データを受信すると、保存データに含まれるアクセスプラン(A)が既に保存されているか否かを判断する。この例では、アクセスプラン(A)は未だ保存されていないので、保存データに含まれるアクセスプランと当該アクセスプランに付随するデータを保存する(S2115)。そして、副系ノード107のデータベース管理システム131は、アクセスプラン(A)の受信回数として「1」を記憶する。尚、副系ノード107のデータベース管理システム131は、アクセスプラン(A)を特定するための識別データとしてSELECT文(A)を用いる。このように正系ノード103のデータベース管理システム121で生成されたアクセスプランと当該アクセスプランに付随するデータが副系ノード107のデータベース管理システム131に送られ、副系ノード107のデータベース管理システム131で保存される。また、本実施の形態では、当該アクセスプランの受信回数を計数する。
一方、アプリケーションサーバ113bのアプリケーション部111bも、最初にCONNECT文を正系ノード103のデータベース管理システム121へ送る(S2117)。
正系ノード103のデータベース管理システム121は、CONNECT文を受け付けると、要求元であるアプリケーションサーバ113bのアプリケーション部111bとのコネクションを確立させる(S2119)。このとき、確立されたコネクションを識別するためのコネクションIDが割り振られる。
そして、正系ノード103のデータベース管理システム121は、「成功」を示すコードをアプリケーションサーバ113bのアプリケーション部111bへ返す(S2121)。
次に、コネクションが確立している状態で、アプリケーションサーバ113bのアプリケーション部111bは、SELECT文(A)を正系ノード103のデータベース管理システム121へ送る(S2123)。このSELECT文(A)は、S2119で確立されたコネクションを前提としている。
正系ノード103のデータベース管理システム121は、SELECT文(A)を受け付けると、SELECT文(A)に従って、データを抽出する(S2125)。このとき、SELECT文(A)に基づくアクセスプラン(A)が生成され、生成されたアクセスプラン(A)が実行される。その結果、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。正系ノード103のデータベース管理システム121は、生成されたアクセスプラン(A)を正系ノード103のデータベース管理システム121内のキャッシュ領域633に一時的に記憶する。尚、キャッシュ領域633は、コネクション毎に設けられる。そして、同じSQL文であっても、それらが異なるコネクションを前提とする場合には、異なるキャッシュ領域633に別々に当該SQL文に基づくアクセスプランが保存される。そして、正系ノード103のデータベース管理システム121は、抽出されたデータ(A)をアプリケーションサーバ113bのアプリケーション部111bへ返す(S2127)。
また、S2125に示したデータの抽出において、正系ノード103のデータベース管理システム121は、SELECT文(A)及びアクセスプラン(A)を含む保存データを生成し、生成された保存データを副系ノード107のデータベース管理システム131へ送る(S2129)。
副系ノード107のデータベース管理システム131は、保存データを受信すると、S2115の場合と同様に、保存データに含まれるアクセスプラン(A)が既に保存されているか否かを判断する。この例では、アクセスプラン(A)は既に保存されているので、アクセスプラン(A)の受信回数をカウントアップして「2」とする(S2131)。このように、副系ノード107のデータベース管理システム131は、コネクションの異同に関わらず、SQL文をキーとして、既に受信しているアクセスプランを改めて受信したと判断した場合には、受信回数をカウントアップする。つまり、副系ノード107のデータベース管理システム131では、保存されるアクセスプランが重複しないようにする。
端子F、端子G、端子H及び端子Iを介して、図22に示したシーケンスへ移る。同じSQL文を再び受け付けた場合のシーケンスは、実施の形態1における例と同様である。アプリケーションサーバ113aのアプリケーション部111aは、再びSELECT文(A)を正系ノード103のデータベース管理システム121へ送る(S2201)。S2201において送られるSELECT文(A)は、図21のS2107及びS2123において送られたSELECT文(A)と同じである。再び送られるSELECT文(A)も、図21のS2103で確立されたコネクションを前提としている。
正系ノード103のデータベース管理システム121は、SELECT文(A)を受け付けると、SELECT文(A)に従って、データを抽出する(S2203)。このとき、図21のS2109において生成されたアクセスプラン(A)がキャッシュ領域633から読み出され、読み出されたアクセスプラン(A)が実行される。つまり、SELECT文(A)に基づいてアクセスプラン(A)を生成する処理は、省かれる。そして、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。正系ノード103のデータベース管理システム121は、抽出されたデータ(A)をアプリケーションサーバ113aのアプリケーション部111aへ返す(S2205)。
同様に、アプリケーションサーバ113bのアプリケーション部111bは、再びSELECT文(A)を正系ノード103のデータベース管理システム121へ送る(S2207)。S2207において送られるSELECT文(A)は、図21のS2107、S2123及び図22のS2201において送られたSELECT文(A)と同じである。再び送られるSELECT文(A)も、図21のS2119で確立されたコネクションを前提としている。
正系ノード103のデータベース管理システム121は、SELECT文(A)を受け付けると、SELECT文(A)に従って、データを抽出する(S2209)。このとき、S2125において生成されたアクセスプラン(A)がキャッシュ領域633から読み出され、読み出されたアクセスプラン(A)が実行される。この場合も、SELECT文(A)に基づいてアクセスプラン(A)を生成する処理は、省かれる。そして、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。正系ノード103のデータベース管理システム121は、抽出されたデータ(A)をアプリケーションサーバ113bのアプリケーション部111bへ返す(S2211)。
アプリケーションサーバ113aのアプリケーション部111aは、当該コネクションを前提とした一連のアクセスが終わると、DISCONNECT文を正系ノード103のデータベース管理システム121へ送る(S2213)。
正系ノード103のデータベース管理システム121は、DISCONNECT文を受け付けると、要求元であるアプリケーションサーバ113aのアプリケーション部111aとのコネクションを解放する(S2215)。このとき、解放されたコネクションに対応するキャッシュ領域633は解放される。従って、解放されたコネクションを前提として受け付けたSQL文に基づくアクセスプランは、消去される。この例では、アクセスプラン(A)が消去される。コネクションを前提として受け付けたSQL文に基づくアクセスプランが複数存在する場合には、それらのアクセスプランが消去される。
そして、正系ノード103のデータベース管理システム121は、「成功」を示すコードをアプリケーションサーバ113aのアプリケーション部111aへ返す(S2217)。
正系ノード103のデータベース管理システム121は、S2215に示したコネクションの解放において、消去されたアクセスプランを特定するためのSQL文(この例ではSELECT文(A))を含む通知データを副系ノード107のデータベース管理システム131へ送る(S2219)。複数のアクセスプランが消去された場合には、夫々のアクセスプランを特定するためのSQL文が通知データに加えられる。
副系ノード107のデータベース管理システム131は、通知データを受信すると、通知データに含まれるSQL文(この例ではSELECT文(A))をキーとしてアクセスプランを探索する。通知データに複数のSQL文が含まれる場合には、各SQL文をキーとしてアクセスプランの探索が繰り返される。そして、副系ノード107のデータベース管理システム131は、探索されたアクセスプランの受信回数が「1」であるか、あるいは「2」以上であるかを判定する。当該アクセスプランの受信回数が「2」以上であると判定した場合には、副系ノード107のデータベース管理システム131は、アクセスプランの受信回数をカウントダウンする(S2221)。この例では、SELECT文(A)によって探索されたアクセスプラン(A)の受信回数の「2」が、「1」に更新される。
続けて、探索されたアクセスプランの受信回数が「1」である場合について説明する。アプリケーションサーバ113bのアプリケーション部111bも、当該コネクションを前提とした一連のアクセスが終わると、DISCONNECT文を正系ノード103のデータベース管理システム121へ送る(S2223)。
正系ノード103のデータベース管理システム121は、DISCONNECT文を受け付けると、要求元であるアプリケーションサーバ113bのアプリケーション部111bとのコネクションを解放する(S2225)。S2215の場合と同様に、解放されたコネクションに対応するキャッシュ領域633は解放される。この例では、アクセスプラン(A)が消去される。そして、正系ノード103のデータベース管理システム121は、「成功」を示すコードをアプリケーションサーバ113bのアプリケーション部111bへ返す(S2227)。
正系ノード103のデータベース管理システム121は、S2225に示したコネクションの解放においても、消去されたアクセスプランを特定するためのSQL文(この例ではSELECT文(A))を含む通知データを副系ノード107のデータベース管理システム131へ送る(S2229)。S2215の場合と同様に、複数のアクセスプランが消去された場合には、夫々のアクセスプランを特定するためのSQL文が通知データに加えられる。
副系ノード107のデータベース管理システム131は、通知データを受信すると、通知データに含まれるSQL文(この例ではSELECT文(A))をキーとしてアクセスプランを探索する。通知データに複数のSQL文が含まれる場合には、各SQL文をキーとしてアクセスプランの探索が繰り返される。S2221の場合と同様に、副系ノード107のデータベース管理システム131は、探索されたアクセスプランの受信回数が「1」であるか、あるいは「2」以上であるかを判定する。当該アクセスプランの受信回数が「1」であると判定された場合に、副系ノード107のデータベース管理システム131は、当該アクセスプランと当該アクセスプランに付随するデータを消去する(S2231)。この例では、アクセスプラン(A)とアクセスプラン(A)に付随するデータとが消去される。
図23に、実施の形態2に係る保存領域823の例を示す。この例では、保存領域823において、SQL文と、アクセスプランと、受信回数とが対応付けて記憶されている。実施の形態1と同様に、SQL文は、例えばアクセスプランを紐付けるために用いられる。本実施の形態における副系ノード107のデータベース管理システム131は、コネクションの異同を問わず、同じSQL文に基づくアクセスプランを同じものとして扱う。そして、副系ノード107のデータベース管理システム131は、同一のアクセスプランを受信した回数によって、幾つのコネクションにおいて同じSQL文に基づくアクセスプランが生成されたかを判定する。更に、現に有効であるコネクションの数と受信回数とを一致させるために、コネクションが解放された場合には、受信回数は1つ減らされる。
次に、実施の形態2におけるデータベース管理システム121の主系処理部601の処理について説明する。主系処理部601のメイン処理は、図10に示した通りである。以下では、実施の形態1の場合と異なる点について、抽出処理を例として説明する。
主系処理部601は、図10のS1009において、図13に示した抽出処理(A)に代えて抽出処理(C)を実行する。図24に、抽出処理(C)フローを示す。S1301乃至S1307の処理については、図13に示した実施の形態1の場合の処理と同様である。
S1307において保存処理を終えると、送信部613は、SQL文(=SELECT文)及びアクセスプランを含む保存データを送信する(S2401)。
S1311及びS1313の処理については、図13に示した実施の形態1の場合の処理と同様である。
尚、図10に示したS1013における挿入処理の場合には、送信部613は、SQL文(=INSERT文)及びアクセスプランを含む保存データを送信する。図10に示したS1017における削除処理の場合には、送信部613は、SQL文(=DELETE文)及びアクセスプランを含む保存データを送信する。図11のS1103における更新処理の場合には、送信部613は、SQL文(=UPDATE文)及びアクセスプランを含む保存データを送信する。
更に、主系処理部601の切断部619は、図11のS1107において、切断処理(A)に代えて切断処理(B)を実行する。図25に、切断処理(B)フローを示す。切断部619は、解放させたコネクションのIDを無効にする(S2501)。切断部619は、当該コネクションIDに対応するキャッシュ領域633から、SQL文を抽出する(S2503)。切断部619は、当該コネクションIDに対応するキャッシュ領域633を解放する(S2505)。つまり、当該キャッシュ領域633のデータは消去される。通知部621は、S2503で抽出されたSQL文を含む通知データを、副系ノード107のデータベース管理システム131に送信する(S2507)。切断部619は、「成功」を示すコードを、DISCONNECT文の送信元のプログラムモジュールへ返す(S2509)。
次に、実施の形態2におけるデータベース管理システム131の副系処理部801の処理について説明する。副系処理部801のメイン処理は、図16に示した通りである。以下では、実施の形態1の場合と異なる点について説明する。
記憶処理部805は、図16のS1605において、図17に示した記憶処理(A)に代えて記憶処理(B)を実行する。図26に、記憶処理(B)フローを示す。記憶処理部805は、図16のS1601において受信した保存データに含まれるSQL文を特定する(S2601)。記憶処理部805は、S2601で特定されたSQL文と同じSQL文を有する保存領域823を探す(S2603)。記憶処理部805は、S2601で特定されたSQL文と同じSQL文を有する保存領域823があったか否かを判定する(S2605)。
S2601で特定されたSQL文と同じSQL文を有する保存領域823がなかったと判定した場合には、記憶処理部805は、記憶領域821に新たな保存領域823を確保する(S2607)。記憶処理部805は、保存データに含まれるSQL文及びアクセスプランを新たな保存領域823に記憶させる(S2609)。記憶処理部805は、保存領域823に含まれる受信回数に「1」を設定する(S2611)。
S2605において、S2601で特定されたSQL文と同じSQL文を有する保存領域823があったと判定した場合には、記憶処理部805は、当該保存領域823の受信回数に1を加える(S2613)。従って、当該保存領域823の受信回数は、「2」以上になる。記憶処理(B)を終えると、図16のS1601に戻る。
消去部807は、図16のS1609において、図18に示した消去処理(A)に代えて消去処理(B)を実行する。図27に、消去処理(B)フローを示す。消去部807は、図16のS1601において受信した通知データに含まれるSQL文を1つ特定する(S2701)。消去部807は、特定されたSQL文と同じSQL文を有する保存領域823を特定する(S2703)。消去部807は、当該保存領域823に含まれる受信回数が「2」以上であるか否かを判定する(S2705)。
当該保存領域823に含まれる受信回数が「2」以上であると判定した場合には、消去部807は、当該保存領域823に含まれる受信回数から1を引く(S2707)。
一方、当該保存領域823に含まれる受信回数が「2」以上ではないと判定した場合、つまり当該保存領域823に含まれる受信回数が「1」である場合には、消去部807は、当該保存領域823を解放する(S2709)。つまり、当該保存領域823のデータは消去される。
消去部807は、図16のS1601において受信した通知データに含まれるSQL文のうち、未特定のSQL文があるか否かを判定する(S2711)。未特定のSQL文があると判定した場合には、S2701に戻る。一方、未特定のSQL文がないと判定した場合には、消去処理(B)を終え、図16のS1601に戻る。
本実施の形態によれば、同一のSQL文に対応するアクセスプランについて、重複した記憶を避けることができる。
また、正系ノード103におけるコネクションの解放に伴うアクセスプランの消去に合わせて、副系ノード107において記憶領域821の空き容量を回復させることができる。
[実施の形態3]
正系ノード103のデータベース管理システム121では、記憶領域631の空き容量が少なくなった場合に、キャッシュ領域633に含まれるアクセスプランを消去することがある。本実施の形態では、正系ノード103のデータベース管理システム121においてアクセスプランが消去された場合に、副系ノード107のデータベース管理システム131においても同期して、正系ノード103のデータベース管理システム121で消去されたアクセスプランと同じアクセスプランを消去する例について説明する。
正系ノード103のデータベース管理システム121における主系処理部601の調整部623による調整処理について説明する。図28に、調整処理フローを示す。調整部623は、所定のタイミングで、記憶領域631の空き容量を算出する(S2801)。そして、調整部623は、記憶領域631の空き容量が所定の閾値を下回ったか否かを判定する(S2803)。当該所定の閾値は、記憶領域631の空き容量を回復させるための基準である。記憶領域631の空き容量が所定の閾値を下回っていないと判定した場合には、S2801へ戻る。
一方、記憶領域631の空き容量が所定の閾値を下回ったと判定した場合には、調整部623は、削除すべきアクセスプランを選択する(S2805)。調整部623は、例えば、最終参照日時が古いアクセスプランを選択し、あるいは参照回数が少ないアクセスプランを選択する。このようにすれば、再利用される可能性が低いアクセスプランが先に削除されるようになる。
通知部621は、キャッシュ領域633を参照し、選択されたアクセスプランに対応するSQL文を特定し、特定されたSQL文を含む通知データを、副系ノード107のデータベース管理システム131へ送信する(S2807)。
調整部623は、S2805で選択されたアクセスプランをキャッシュ領域633から削除する(S2809)。このとき、当該アクセスプランに対応するSQL文もキャッシュ領域633から削除される。そして、S2801へ戻る。
一方、副系ノード107のデータベース管理システム131における処理については、実施の形態2と同様である。つまり、図16のS1601において、図28のS2807で送信された通知データを受信する。そして、図16のS1609において、消去部807は図27に示した消去処理(B)を実行する。
本実施の形態によれば、正系ノード103における記憶領域631の空き容量の回復のためのアクセスプランの消去に合わせて、副系ノード107において記憶領域821の空き容量を回復させることができる。
[実施の形態4]
本実施の形態では、実施の形態2のように、同一のSQL文に対応するアクセスプランについて、副系ノード107において重複して記憶しないようにするとともに、実施の形態1のように、正系ノード103におけるコネクションの解放に合わせて、副系ノード107において一括して当該コネクションに係るアクセスプランを一括して消去する例について説明する。
図29に、実施の形態4に係るシーケンスの例を示す。実施の形態2における例と同様に、アプリケーションサーバ113aのアプリケーション部111aによる業務及びアプリケーションサーバ113bのアプリケーション部111bによる業務において、正系ノード103及び副系ノード107を有する二重化データベースシステムを利用することを想定している。また、実施の形態2における例と同様に、アプリケーションサーバ113aのアプリケーション部111aと正系ノード103のデータベース管理システム121との間のコネクションと、アプリケーションサーバ113bのアプリケーション部111bと正系ノード103のデータベース管理システム121との間のコネクションとが並存する。
実施の形態2における例と同様に、アプリケーションサーバ113aのアプリケーション部111aから正系ノード103のデータベース管理システム121へのアクセス要求、アプリケーションサーバ113aのアプリケーション部111aから副系ノード107のデータベース管理システム131へのアクセス要求、アプリケーションサーバ113bのアプリケーション部111bから正系ノード103のデータベース管理システム121へのアクセス要求、更にアプリケーションサーバ113bのアプリケーション部111bから副系ノード107のデータベース管理システム131へのアクセス要求は、例えばSQL文の形式で記述される。但し、SQL以外のデータベース言語を用いた問合せ文によってデータベースへのアクセスを要求するようにしてもよい。また、この例におけるシーケンスは、SQLの仕様に基づく。
アプリケーションサーバ113aのアプリケーション部111aは、最初にCONNECT文を正系ノード103のデータベース管理システム121へ送る(S2901)。
正系ノード103のデータベース管理システム121は、CONNECT文を受け付けると、要求元であるアプリケーションサーバ113aのアプリケーション部111aとのコネクションを確立させる(S2903)。このとき、確立されたコネクションを識別するためのコネクションID(A)が割り振られる。この例で、コネクションID(A)は、アプリケーションサーバ113aのアプリケーション部111aと正系ノード103のデータベース管理システム121との間のコネクションのIDを意味する。そして、正系ノード103のデータベース管理システム121は、「成功」を示すコードをアプリケーションサーバ113aのアプリケーション部111aへ返す(S2905)。
コネクションが確立している状態で、アプリケーションサーバ113aのアプリケーション部111aは、SELECT文(A)を正系ノード103のデータベース管理システム121へ送る(S2907)。このSELECT文(A)は、S2903で確立されたコネクションを前提としている。実施の形態1及び2における例と同様に、SELECT文(A)は、タイプAのSELECT文を意味する。
正系ノード103のデータベース管理システム121は、SELECT文(A)を受け付けると、SELECT文(A)に従って、データを抽出する(S2909)。このとき、SELECT文(A)に基づくアクセスプラン(A)が生成され、生成されたアクセスプラン(A)が実行される。その結果、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。正系ノード103のデータベース管理システム121は、生成されたアクセスプラン(A)を正系ノード103のデータベース管理システム121内のキャッシュ領域633に一時的に記憶する。そして、正系ノード103のデータベース管理システム121は、抽出されたデータ(A)をアプリケーションサーバ113aのアプリケーション部111aへ返す(S2911)。実施の形態1及び2における例と同様に、データ(A)は、SELECT文(A)に基づいて抽出されたデータを意味する。
また、S2909に示したデータの抽出において、正系ノード103のデータベース管理システム121は、SELECT文(A)、アクセスプラン(A)及びコネクションID(A)を含む保存データを生成し、生成された保存データを副系ノード107のデータベース管理システム131へ送る(S2913)。
副系ノード107のデータベース管理システム131は、保存データを受信すると、保存データに含まれるアクセスプラン(A)が既に保存されているか否かを判断する。この例では、アクセスプラン(A)は未だ保存されていないので、保存データに含まれるアクセスプランと当該アクセスプランに付随するデータを保存する(S2915)。そして、副系ノード107のデータベース管理システム131は、アクセスプラン(A)の受信回数として「1」を記憶する。実施の形態4では、当該アクセスプランの受信回数が計数されるとともに、コネクションID(A)が保存される。
実施の形態2における例と同様に、アプリケーションサーバ113bのアプリケーション部111bも、最初にCONNECT文を正系ノード103のデータベース管理システム121へ送る(S2917)。
実施の形態2における例と同様に、正系ノード103のデータベース管理システム121は、CONNECT文を受け付けると、要求元であるアプリケーションサーバ113bのアプリケーション部111bとのコネクションを確立させる(S2919)。このとき、確立されたコネクションを識別するためのコネクションID(B)が割り振られる。この例で、コネクションID(B)は、アプリケーションサーバ113bのアプリケーション部111bと正系ノード103のデータベース管理システム121との間のコネクションのIDを意味する。そして、正系ノード103のデータベース管理システム121は、「成功」を示すコードをアプリケーションサーバ113bのアプリケーション部111bへ返す(S2921)。
実施の形態2における例と同様に、コネクションが確立している状態で、アプリケーションサーバ113bのアプリケーション部111bは、SELECT文(A)を正系ノード103のデータベース管理システム121へ送る(S2923)。このSELECT文(A)は、S2919で確立されたコネクションを前提としている。
実施の形態2における例と同様に、正系ノード103のデータベース管理システム121は、SELECT文(A)を受け付けると、SELECT文(A)に従って、データを抽出する(S2925)。このとき、SELECT文(A)に基づくアクセスプラン(A)が生成され、生成されたアクセスプラン(A)が実行される。その結果、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。正系ノード103のデータベース管理システム121は、生成されたアクセスプラン(A)を正系ノード103のデータベース管理システム121内のキャッシュ領域633に一時的に記憶する。そして、正系ノード103のデータベース管理システム121は、抽出されたデータ(A)をアプリケーションサーバ113bのアプリケーション部111bへ返す(S2927)。
また、S2925に示したデータの抽出において、正系ノード103のデータベース管理システム121は、SELECT文(A)、アクセスプラン(A)及びコネクションID(B)を含む保存データを生成し、生成された保存データを副系ノード107のデータベース管理システム131へ送る(S2929)。
副系ノード107のデータベース管理システム131は、保存データを受信すると、S2915の場合と同様に、保存データに含まれるアクセスプラン(A)が既に保存されているか否かを判断する。この例では、アクセスプラン(A)は既に保存されているので、アクセスプラン(A)の受信回数をカウントアップして「2」とするとともに、保存データに含まれるコネクションID(B)を追加して保存する(S2931)。このように、副系ノード107のデータベース管理システム131は、コネクションの異同に関わらず、SQL文をキーとして、既に受信しているアクセスプランを改めて受信したと判断した場合には、受信回数をカウントアップするとともに、コネクションIDを追加する。このようにすれば、コネクションIDをキーとしても、アクセスプランを探索できるようになる。
端子J、端子K、端子L及び端子Mを介して、図30に示したシーケンスへ移る。同じSQL文を再び受け付けた場合のシーケンスは、実施の形態1及び2における例と同様である。アプリケーションサーバ113aのアプリケーション部111aは、再びSELECT文(A)を正系ノード103のデータベース管理システム121へ送る(S3001)。S3001において送られるSELECT文(A)は、図29のS2907及びS2923において送られたSELECT文(A)と同じである。再び送られるSELECT文(A)も、図29のS2903で確立されたコネクションを前提としている。
正系ノード103のデータベース管理システム121は、SELECT文(A)を受け付けると、SELECT文(A)に従って、データを抽出する(S3003)。このとき、図29のS2909において生成されたアクセスプラン(A)がキャッシュ領域633から読み出され、読み出されたアクセスプラン(A)が実行される。つまり、SELECT文(A)に基づいてアクセスプラン(A)を生成する処理は、省かれる。そして、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。正系ノード103のデータベース管理システム121は、抽出されたデータ(A)をアプリケーションサーバ113aのアプリケーション部111aへ返す(S3005)。
同様に、アプリケーションサーバ113bのアプリケーション部111bは、再びSELECT文(A)を正系ノード103のデータベース管理システム121へ送る(S3007)。S3007において送られるSELECT文(A)は、図29のS2907、S2923及び図30のS3001において送られたSELECT文(A)と同じである。再び送られるSELECT文(A)も、図29のS2919で確立されたコネクションを前提としている。
正系ノード103のデータベース管理システム121は、SELECT文(A)を受け付けると、SELECT文(A)に従って、データを抽出する(S3009)。このとき、S2925において生成されたアクセスプラン(A)がキャッシュ領域633から読み出され、読み出されたアクセスプラン(A)が実行される。この場合も、SELECT文(A)に基づいてアクセスプラン(A)を生成する処理は、省かれる。そして、例えば指定されたテーブルに含まれる指定されたレコードから所望のデータが抽出される。正系ノード103のデータベース管理システム121は、抽出されたデータ(A)をアプリケーションサーバ113bのアプリケーション部111bへ返す(S3011)。
実施の形態2における例と同様に、アプリケーションサーバ113aのアプリケーション部111aは、当該コネクションを前提とした一連のアクセスが終わると、DISCONNECT文を正系ノード103のデータベース管理システム121へ送る(S3013)。
実施の形態2における例と同様に、正系ノード103のデータベース管理システム121は、DISCONNECT文を受け付けると、要求元であるアプリケーションサーバ113aのアプリケーション部111aとのコネクションを解放する(S3015)。このとき、解放されたコネクションに対応するキャッシュ領域633は解放される。つまり、解放されたコネクションを前提として受け付けたSQL文に基づくアクセスプランは、消去される。この例では、アクセスプラン(A)が消去される。コネクションを前提として受け付けたSQL文に基づくアクセスプランが複数存在する場合には、それらのアクセスプランは消去される。そして、正系ノード103のデータベース管理システム121は、「成功」を示すコードをアプリケーションサーバ113aのアプリケーション部111aへ返す(S3017)。
実施の形態4では、実施の形態1における例(図4のS407)と同様に、正系ノード103のデータベース管理システム121は、解放されたコネクションを特定するコネクションID(A)を含む通知データを副系ノード107のデータベース管理システム131へ送る(S3019)。
副系ノード107のデータベース管理システム131は、通知データを受信すると、自ら保存したアクセスプランの中から、通知データに含まれるコネクションID(A)に対応付けられているアクセスプランを探索する。通知データに含まれるコネクションIDに複数のアクセスプランが対応付けられている場合には、夫々のアクセスプランを特定する。そして、副系ノード107のデータベース管理システム131は、探索されたアクセスプランの受信回数が「1」であるか、あるいは「2」以上であるかを判定する。当該アクセスプランの受信回数が「2」以上であると判定した場合には、副系ノード107のデータベース管理システム131は、アクセスプランの受信回数をカウントダウンする。この例では、コネクションID(A)によって探索されたアクセスプラン(A)の受信回数が「2」から「1」に更新される。また、コネクションID(A)は削除される。つまり、受信回数の減少に併せて、コネクションIDの削減が行なわれる(S3021)。
続けて、探索されたアクセスプランの受信回数が「1」である場合の例について説明する。実施の形態2における例と同様に、アプリケーションサーバ113bのアプリケーション部111bも、当該コネクションを前提とした一連のアクセスが終わると、DISCONNECT文を正系ノード103のデータベース管理システム121へ送る(S3023)。
正系ノード103のデータベース管理システム121は、DISCONNECT文を受け付けると、要求元であるアプリケーションサーバ113bのアプリケーション部111bとのコネクションを解放する(S3025)。S3015の場合と同様に、解放されたコネクションに対応するキャッシュ領域633におけるデータは消去され、当該キャッシュ領域633は解放される。この例では、アクセスプラン(A)が消去される。そして、正系ノード103のデータベース管理システム121は、「成功」を示すコードをアプリケーションサーバ113bのアプリケーション部111bへ返す(S3027)。
正系ノード103のデータベース管理システム121は、S3025に示したコネクションの解放において、解放されたコネクションを特定するコネクションID(B)を含む通知データを副系ノード107のデータベース管理システム131へ送る(S3029)。
副系ノード107のデータベース管理システム131は、通知データを受信すると、自ら保存したアクセスプランの中から、通知データに含まれるコネクションID(B)に対応付けられているアクセスプランを探索する。そして、副系ノード107のデータベース管理システム131は、探索されたアクセスプランの受信回数が「1」であるか、あるいは「2」以上であるかを判定する。当該アクセスプランの受信回数が「1」であると判定された場合に、副系ノード107のデータベース管理システム131は、当該アクセスプランと当該アクセスプランに付随するデータを消去する(S3031)。この例では、アクセスプラン(A)とアクセスプラン(A)に付随するデータとが消去される。
図31に、実施の形態4に係る保存領域823の例を示す。図31の例では、図23に示した実施の形態2の保存領域823の例に対して、コネクションIDのリストが加えられている。リストに含まれるコネクションIDは、当該アクセスプランが生成されたときのコネクションを特定する。従って、受信回数と、リストに含まれるコネクションIDの数は一致する。従って、コネクションIDをキーとしてアクセスプランを探索することによって、特定のコネクションにおいて生成されたアクセスプランが抽出される。
次に、実施の形態4におけるデータベース管理システム131の副系処理部801の処理について説明する。副系処理部801のメイン処理は、図16に示した通りである。以下では、実施の形態1乃至3の場合と異なる点について、抽出処理を例として説明する。
記憶処理部805は、図16のS1605において、図17に示した記憶処理(A)及び図26に示した記憶処理(B)に代えて記憶処理(C)を実行する。図32に、記憶処理(C)フローを示す。S2601乃至S2613の処理については、図26に示した記憶処理(B)の場合と同様である。
本実施の形態で、記憶処理部805は、図16のS1601において受信した保存データに含まれるコネクションIDを、S2607で確保した保存領域823に設定する(S3201)。S2605において、S2601で特定されたSQL文と同じSQL文を有する保存領域823があったと判定した場合には、当該保存領域823に既に設定されているコネクションIDに加えて、図16のS1601において受信した保存データに含まれるコネクションIDを設定する。記憶処理(C)を終えると、図16のS1601に戻る。
消去部807は、図16のS1609において、図27に示した消去処理(B)に代えて消去処理(C)を実行する。図33に、消去処理(C)フローを示す。消去部807は、図16のS1601において受信した通知データに含まれるコネクションIDと同じコネクションIDがヘッダ部に設定されている保存領域823を1つ特定する(S3301)。そして、消去部807は、当該保存領域823に含まれる受信回数が「2」以上であるか否かを判定する(S3303)。
消去部807は、当該保存領域823に含まれる受信回数が「2」以上であると判定した場合には、消去部807は、当該保存領域823に含まれる受信回数から1を引く(S3305)。更に、消去部807は、図16のS1601において受信した通知データに含まれるコネクションIDを、当該保存領域823から削除する(S3307)。
一方、S3303において、当該保存領域823に含まれる受信回数が「2」以上ではないと判定した場合、つまり当該保存領域823に含まれる受信回数が「1」である場合には、消去部807は、当該保存領域823を解放する(S3309)。つまり、当該保存領域823のデータは消去される。
消去部807は、図16のS1601において受信した通知データに含まれるコネクションIDと同じコネクションIDがヘッダ部に設定されている保存領域823のうち、未特定の保存領域823があるか否かを判定する(S3311)。未特定の保存領域823があると判定した場合には、S3301に戻る。一方、未特定の保存領域823がないと判定した場合には、消去処理(C)を終え、図16のS1601へ戻る。
本実施の形態によれば、同一のSQL文に対応するアクセスプランについて、重複した記憶を避けることができる。
また、コネクションIDによって、複数のアクセスプランを一括して消去することができる。
[実施の形態5]
本実施の形態では、正系ノード103における統計データの更新に応じて、副系ノード107において新しい統計データに基づいたアクセスプランに改める例について説明する。
図6に示した統計部641による統計処理について説明する。図34に、統計処理フローを示す。統計部641は、所定のタイミングを待って(S3401)、データベースに関する新しい統計データを生成する(S3403)。
このとき、統計部641は、新しい統計データを第1データ格納部643に格納する。尚、データベース管理システム131の副系処理部801に含まれる第2データ格納部833は、データベース管理システム121の主系処理部601に含まれる第1同期処理部645及びデータベース管理システム131の副系処理部801に含まれる第2同期処理部831を介して、第1データ格納部643と同期している。従って、新しい統計データが第1データ格納部643に格納されると、第2データ格納部833においても同じ新しい統計データが格納される。
統計部641は、新しい統計データを生成したことを、副系ノード107のデータベース管理システム131へ通知する(S3405)。そして、S3401へ戻る。
実施の形態5におけるデータベース管理システム131の処理について説明する。副系処理部801の更新部809は、待機処理を実行する。図35に、待機処理フローを示す。更新部809は、新しい統計データを生成したことを示す通知を待つ(S3501)。新しい統計データを生成したことを示す通知を受けると、更新部809は、第2データ格納部833に格納されている新しい統計データに基づいて、記憶領域821に設けられている保存領域823の各々に格納されているアクセスプランを更新する(S3503)。夫々のアクセスプランの更新を終えると、S3501へ戻る。
本実施の形態によれば、正系ノード103における統計データの更新に応じて、副系ノード107において新しい統計データに基づいたアクセスプランに改めることができる。新しい統計データに基づいたアクセスプランであれば、古い統計データに基づいたアクセスプランに比べて、処理性能が優れていることが期待できる。
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上述の機能ブロック構成はプログラムモジュール構成に一致しない場合もある。
また、上で説明した各記憶領域の構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
なお、上で述べた正系ノード103及び副系ノード107は、コンピュータ装置であって、図36に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本発明の実施の形態をまとめると、以下のようになる。
本実施の形態に係る制御方法は、データベースへのアクセスを制御する正系制御装置の待機系である副系制御装置において、データベースへのアクセスにおける処理の実行内容を規定するアクセス規定情報と、該アクセス規定情報に対応するデータベースへの問合せ文とを正系制御装置から受信して記憶部に記憶し、正系制御装置と該正系制御装置を介してデータベースにアクセスする端末装置との間の、問合せ文に基づくアクセスのコネクション解放の通知を正系制御装置から受信すると、上記記憶部に記憶された、解放されたコネクションに対応するアクセス規定情報を消去する処理を含む。
このようにすれば、副系制御装置においてアクセス規定情報を記憶する記憶領域の枯渇を抑止することができる。
上記制御方法は、副系制御装置に、正系制御装置から、同一の問合せ文に対応するアクセス規定情報を受信した回数を計数し、該回数が2以上になる場合には、該アクセス規定情報を記憶する処理を行わないことを実行させるようにしてもよい。
このようにすれば、同一の問合せ文に対応するアクセス規定情報について、重複した記憶を避けることができる。
上記制御方法は、正系制御装置から、正系制御装置の記憶部におけるアクセス規定情報の消去が通知されると、副系制御装置の記憶部に記憶されている、消去が通知されたアクセス規定情報を消去する処理を含むようにしてもよい。
このようにすれば、正系制御装置におけるアクセス規定情報の消去に合わせて、副系制御装置において記憶領域の空き容量を回復させることができる。
上記制御方法は、正系制御装置から、データベースに関する統計データの更新が通知されると、更新された統計データと更新された該統計データに対応するデータベースに記憶されたデータとに基づいて、上記記憶部に記憶されているアクセス規定情報を更新する処理を含むようにしてもよい。
このようにすれば、正系制御装置における統計データの更新に応じて、新しい統計データに基づいたアクセス規定情報に改めることができる。
本実施の形態に係る制御方法は、正系制御装置と副系制御装置とを備えたデータベースシステムの制御方法であって、(A)正系制御装置が、データベースへのアクセスにおける処理の実行内容を規定するアクセス規定情報の生成に応じて、生成されたアクセス規定情報と、該アクセス規定情報に対応するデータベースへの問合せ文とを、副系制御装置に送信し、正系制御装置と該正系制御装置を介してデータベースにアクセスする端末装置との間の、問合せ文に基づくアクセスのコネクション解放に応じて、該コネクションの解放を副系制御装置に通知し、(B)副系制御装置が、正系制御装置から送信されたアクセス規定情報を記憶部に記憶し、正系制御装置からコネクションの解放が通知されると、上記記憶部に記憶された、解放されたコネクションに対応するアクセス規定情報を消去する処理を含む。
このようにすれば、副系制御装置においてアクセス規定情報を記憶する記憶領域の枯渇を抑止することができる。
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納されるようにしてもよい。尚、中間的な処理結果は、一般的にメインメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
データベースへのアクセスを制御する正系制御装置の待機系である副系制御装置に、
前記データベースへのアクセスにおける処理の実行内容を規定するアクセス規定情報と、該アクセス規定情報に対応する前記データベースへの問合せ文とを前記正系制御装置から受信して記憶部に記憶し、
前記正系制御装置と該正系制御装置を介して前記データベースにアクセスする端末装置との間の、前記問合せ文に基づくアクセスのコネクション解放の通知を前記正系制御装置から受信すると、前記記憶部に記憶された、解放された前記コネクションに対応するアクセス規定情報を消去する、
処理を実行させることを特徴とする制御プログラム。
(付記2)
前記副系制御装置に、
前記正系制御装置から、同一の問合せ文に対応するアクセス規定情報を受信した回数を計数し、該回数が2以上になる場合には、該アクセス規定情報を記憶する処理を行わない、
ことを実行させることを特徴とする付記1記載の制御プログラム。
(付記3)
前記正系制御装置から、前記正系制御装置の記憶部におけるアクセス規定情報の消去が通知されると、前記副系制御装置の記憶部に記憶されている、消去が通知された前記アクセス規定情報を消去する
処理を前記副系制御装置に実行させる付記1又は2記載の制御プログラム。
(付記4)
前記正系制御装置から、前記データベースに関する統計データの更新が通知されると、更新された前記統計データと更新された該統計データに対応する前記データベースに記憶されたデータとに基づいて、前記記憶部に記憶されている前記アクセス規定情報を更新する
処理を前記副系制御装置に実行させる付記1乃至3のうち1つ記載の制御プログラム。
(付記5)
データベースへのアクセスを制御する正系制御装置の待機系の制御装置であって、
前記データベースへのアクセスにおける処理の実行内容を規定するアクセス規定情報と、該アクセス規定情報に対応する前記データベースへの問合せ文とを前記正系制御装置から受信して記憶部に記憶させる記憶処理部と、
前記正系制御装置と該正系制御装置を介して前記データベースにアクセスする端末装置との間の、前記問合せ文に基づくアクセスのコネクション解放の通知を前記正系制御装置から受信すると、前記記憶部に記憶された、解放された前記コネクションに対応するアクセス規定情報を消去する消去部と、
を有することを特徴とする制御装置。
(付記6)
正系制御装置と副系制御装置とを備えたデータベースシステムの制御方法であって、
前記正系制御装置が、
データベースへのアクセスにおける処理の実行内容を規定するアクセス規定情報の生成に応じて、生成された前記アクセス規定情報と、該アクセス規定情報に対応する前記データベースへの問合せ文とを、前記副系制御装置に送信し、
前記正系制御装置と該正系制御装置を介して前記データベースにアクセスする端末装置との間の、前記問合せ文に基づくアクセスのコネクション解放に応じて、該コネクションの解放を前記副系制御装置に通知し、
前記副系制御装置が、
前記正系制御装置から送信された前記アクセス規定情報を記憶部に記憶し、
前記正系制御装置から前記コネクションの解放が通知されると、前記記憶部に記憶された、解放された前記コネクションに対応するアクセス規定情報を消去する、
ことを特徴とする制御方法。
(付記7)
正系制御装置と副系制御装置とを備えたデータベースシステムであって、
前記正系制御装置は、
データベースへのアクセスにおける処理の実行内容を規定するアクセス規定情報の生成に応じて、生成された前記アクセス規定情報と、該アクセス規定情報に対応する前記データベースへの問合せ文とを、前記副系制御装置に送信する送信部と、
前記正系制御装置と該正系制御装置を介して前記データベースにアクセスする端末装置との間の、前記問合せ文に基づくアクセスのコネクション解放に応じて、該コネクションの解放を前記副系制御装置に通知する通知部と
を有し、
前記副系制御装置は、
前記正系制御装置から送信された前記アクセス規定情報を記憶部に記憶させる記憶処理部と、
前記正系制御装置から前記コネクションの解放が通知されると、前記記憶部に記憶された、解放された前記コネクションに対応するアクセス規定情報を消去する消去部と
を有することを特徴とするデータベースシステム。