(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0017】
以下図面について、本発明の一実施の形態を詳述する。
【0018】
(1)本実施の形態による情報処理ステムの構成
図1において、1は全体として本実施の形態によるデータベースシステムを示す。このデータベースシステム1は、2台以上のサーバ装置2A,2Bを備えて構成され、これらのサーバ装置2A,2Bがバス3を介して1又は複数のホスト計算機4A,4Bと接続されると共に、ネットワーク5を介して2台以上のストレージ装置6A,6Bと接続されている。
【0019】
なお、以下においては、理解の容易化のため、ホスト計算機4、サーバ装置2及びストレージ装置6がいずれも2台ずつである場合について説明する。また以下においては、特に区別する必要がない場合には、符号の添え字「A」及び「B」を省略して説明する。
【0020】
サーバ装置2は、CPU(Central Processing Unit)10、メモリ11、第1及び第2のインタフェース12,13並びに入出力装置14を備えて構成される。CPU10は、サーバ装置2全体の動作制御を司るプロセッサである。またメモリ11は、例えば半導体メモリから構成され、CPUのワークメモリとして利用される。後述するコマンド受付け部15もこのメモリ11に格納されて保持される。
【0021】
第1のインタフェース12は、サーバ装置2がバス3を介してホスト計算機4と通信する際のプロトコルを制御する機能を有するハードウェアであり、第2のインタフェース13は、サーバ装置2がネットワーク5を介してストレージ装置6と通信する際のプロトコルを制御する機能を有するハードウェアである。
【0022】
また入出力装置14は、例えばキーボード、スイッチ、ポインティングデバイス及び又はマイクロフォン等の情報入力装置(図示せず)と、例えばモニタディスプレイ及び又はスピーカ等の情報出力装置(図示せず)とから構成される。情報入力装置は、ユーザが各種操作を行うために利用され、情報出力装置は、サーバ装置2が各種情報を表示するために利用される。
【0023】
ホスト計算機4は、CPU20、メモリ21、インタフェース22及び入出力装置23を備えて構成される。CPU20、メモリ21、インタフェース22及び入出力装置23の機能及び構成は、サーバ装置2の対応部位(CPU10、メモリ11、第1のインタフェース12又は入出力装置14)と同様であるため、ここでの説明は省略する。なおホスト計算機4のメモリ21には、アプリケーションプログラム(以下、単にアプリケーションと呼ぶ)24が格納される。
【0024】
ストレージ装置6は、1又は複数の記憶デバイスから形成される記憶部30と、記憶部30に対するデータの読書きを制御するコントローラ31とから構成される。かかる記憶デバイスとしては、例えばSCSI(Small Computer System Interface)ディスク等の高価なディスクや、SATA(Serial AT Attachment)ディスクや光ディスク等の安価なディスクなどが適用される。
【0025】
コントローラ31は、CPU、メモリ及びインタフェース等の情報処理資源を備えて構成される。コントローラ31は、サーバ装置2からのライト要求に応じて、記憶部30にデータを書き込み、サーバ装置2からのリード要求に応じて、記憶部30から対応するデータを読み出して当該サーバ装置2に送信する。
【0026】
以上の構成を有する本データベースシステム1では、2つのサーバ装置2のうちの一方のサーバ装置(以下、これを基幹系サーバ装置と呼ぶ)2Aに更新系のクエリに対する処理能力が強化された基幹系DBMS16Aが実装され、他方のサーバ装置(以下、これを情報系サーバ装置と呼ぶ)2Bに参照系のクエリに対する処理能力が強化された情報系DBMS16Bが実装されている。ただし、基幹系DBMS16Aは、情報系DBMS16Bよりも応答速度が遅いものの、参照系のクエリを処理することができる。
【0027】
また、2つのストレージ装置6のうちの一方のストレージ装置(以下、これを基幹系ストレージ装置と呼ぶ)6Aには、基幹系DBMS16Aがデータを読み書きするデータベース(以下、これを基幹系データベースと呼ぶ)32Aが格納されると共に、他方のストレージ装置(以下、これを情報系ストレージ装置と呼ぶ)6Bには、情報系DBMS16Bがデータを検索する際に利用するデータベース(以下、これを情報系データベースと呼ぶ)32Bが格納されている。
【0028】
そして基幹系DBMS16Aは、ホスト計算機4からの要求に応じて基幹系データベース32A内の予め定められたスキーマにデータを書き込んだ場合、そのデータを書込み要求と共にバス3を経由して情報系サーバ装置2Bの情報系DBMS16Bに転送する。また情報系DBMS16Bは、このデータ及び書込み要求を受信すると、当該データを情報系データベース32Bに書き込む。
【0029】
このようにして本データベースシステム1においては、基幹系データベース32A内の予め定められたスキーマに対するデータの書込みが行われたときに、そのデータの基幹系データベース32A及び情報系データベース32B間でのレプリケート(複製)が行われる。
【0030】
(2)本実施の形態によるクエリ実行方式
(2−1)本クエリ実行方式の概略
次に、本データベースシステム1に採用されたクエリ実行方式について説明する。本データベースシステム1では、各ホスト計算機4からのクエリがすべて情報系サーバ装置2Bに与えられる。そして情報系サーバ装置2Bは、以下のルール(以下、これをクエリ実行ルールと呼ぶ)に従ってクエリを基幹系DBMS16A又は情報系DBMS16Bにおいて実行できるように、与えられたクエリをこれら基幹系DBMS16A又は情報系DBMS16Bに振り分ける。
【0031】
(A)更新系のクエリについては、基幹系DBMS16Aで実行する。
(B)参照系のクエリについては、原則として情報系DBMS16Bで実行する。
(C)参照系のクエリであっても情報系DBMS16Bで処理できない場合には、当該クエリを基幹系DBMS16Aで実行する。
【0032】
ここで、(C)の「参照系のクエリを情報系DBMS16Bが処理できない場合」とは、
(C−1)当該クエリにおいて指定された参照対象のデータがレプリケート対象でない場合
(C−2)当該データの情報系データベース32Bへのレプリケートが完了していない場合
が該当する。ただし、(C−2)のケースの場合であっても、レプリケートの完了後に情報系DBMS16Bでクエリを実行した方が、基幹系DBMS16Aで当該クエリを実行するよりも早く処理を完了できる場合には、そのクエリを情報系DBMS16Bで実行する。
【0033】
また複数のクエリを受け付けた場合、
(D)受け付けたクエリがすべて更新系のクエリであるときには、すべてのクエリを基幹系DBMS16Aで実行する。
(E)受け付けたクエリがすべて参照系のクエリであるときには、上述の(C)の場合を除いて情報系DBMS16Bで実行する。
(F)参照系のクエリの実行中に更新系のクエリを受け付けた場合には、更新系クエリを基幹系DBMS16Aで実行する。
(G)更新系のクエリの実行中に、更新対象のデータを参照対象とする参照系のクエリを受け付けた場合、又は、これらを同時に受け付けた場合には、更新系のクエリを基幹系DBMS16Aで実行し、その完了後に上記(A)〜(C)のルールに従って当該参照系のクエリを実行すべきDBMS16を判断する。
【0034】
なお、
(H)情報系DBMS16Bが基幹系DBMS16Aの更新履歴情報(ログ情報)を保持しており、かつ、かかる更新履歴情報を参照するクエリについては、情報系DBMS16Bのみが実行可能であるため、レプリケート完了後に情報系DBMS16Bがそのクエリを実行する。
【0035】
以上のような本実施の形態によるクエリ実行方法を実現するための手段として、情報系サーバ装置2Bのメモリ11Bには、
図1に示すように、コマンド受付けプログラム40、データベース管理情報41及びデータベース統計情報42から構成されるコマンド受付け部15が格納されている。
【0036】
コマンド受付けプログラム40は、ホスト計算機4からのクエリを受け付け、受け付けたクエリを、上述したクエリ実行ルールに従って基幹系DBMS16A又は情報系DBMS16Bで実行できるように、対応する基幹系DBMS16A又は情報系DBMS16Bに振り分ける機能を有するプログラムである。
【0037】
またデータベース管理情報41は、基幹系ストレージ装置6Aに保持された基幹系データベース32Aと、情報系ストレージ装置6Bに保持された情報系データベース32Bとを管理するために利用される各種情報である。このデータベース管理情報41は、
図2に示すように、クエリ管理テーブル50、レプリ管理テーブル51及びレプリ実行テーブル52から構成される。
【0038】
クエリ管理テーブル50は、基幹系サーバ装置2Aが受信したクエリを管理するために利用されるテーブルであり、
図3に示すように、クエリID欄50A、サーバID欄50B、DBMS ID欄50C、状態欄50D及びポインタ欄50Eから構成される。なおクエリ管理テーブル50において、1つのエントリ(行)は1つのクエリに対応する。
【0039】
そしてクエリID欄50Aには、ホスト計算機4から与えられた各クエリに対してコマンド受付けプログラム40が付与したそのクエリに固有の識別子(クエリID)が格納され、サーバID欄50Bには、対応するクエリの振分け先であるサーバ装置2(基幹系サーバ装置2A又は情報系サーバ装置2B)に付与されたそのサーバ装置2に固有の識別子(サーバID)が格納される。
【0040】
またDBMS ID欄50Cには、対応するサーバ装置2に搭載されたDBMS16(基幹系DBMS16A又は情報系DBMS16B)の識別子(DBMS ID)が格納され、状態欄50Dには、対応するDBMS16における対応するクエリの現在の状態が格納される。なおクエリの状態としては、「クエリ受付け」、「実行中」、「実行完了」などがある。さらにポインタ欄50Eには、対応するクエリについて作成されたクエリプランへのポインタが格納される。
【0041】
レプリ管理テーブル51は、基幹系データベース32Aから情報系データベース32Bへのデータのレプリケートを管理するために利用されるテーブルであり、
図4に示すように、レプリ元サーバID欄51A、レプリ元DBMS ID欄51B、レプリ先サーバID欄51C及びレプリ先DBMS ID欄51Dを備えて構成される。
【0042】
そしてレプリ元サーバID欄51Aには、レプリケート元となるサーバ装置2(本実施の形態においては基幹系サーバ装置2A。以下、同様。)のサーバIDが格納され、レプリ元DBMS ID欄51Bには、当該サーバ装置2に実装されたかかるレプリケート元となるDBMS16(本実施の形態においては基幹系DBMS16A。以下、同様。)に付与された当該DBMS16に固有の識別子(レプリ元DBMS ID)が格納される。
【0043】
またレプリ先サーバID欄51Cには、レプリケート先となるサーバ装置(本実施の形態においては情報系サーバ装置2B。以下、同様。)のサーバIDが格納され、レプリ先DBMS ID欄51Dには、当該サーバ装置2に実装されたかかるレプリケート先となるDBMS16(本実施の形態においては情報系DBMS16B。以下、同様。)に付与された当該DBMS16に固有の識別子(レプリ先DBMS ID)が格納される。
【0044】
レプリ実行テーブル52は、基幹系データベース32A及び情報系データベース32Bのスキーマを管理するために利用されるテーブルであり、
図5に示すように、スキーマID欄52A、状態欄52B、レプリ元データベースレコード数欄52C、レプリ先データベースレコード数欄52D、レプリ実行最終レコードID欄52E及び1レコード当りレプリ実行時間欄52Fを備えて構成される。レプリ実行テーブル52では、1つのエントリ(行)が1つのスキーマに対応する。
【0045】
そしてスキーマID欄52Aには、各スキーマにそれぞれ付与されたそのスキーマに固有の識別子(スキーマID)が格納され、状態欄52Bには、対応するスキーマの現在の状態が格納される。なお、スキーマの状態としては、レプリケートが完了したことを表す「レプリ残データ無」と、レプリケートが完了していないことを表す「レプリ残データ有」と、レプリケートの対象外であることを表す「レプリ対象外」となどがある。
【0046】
またレプリ元データベースレコード数欄52Cには、レプリケート元のデータベース32(本実施の形態においては基幹系データベース32A。以下、同様。)における対応するスキーマのレコードの数が格納され、レプリ先データベースレコード数欄52Dには、そのスキーマのレコードのうち、レプリケート先のデータベース32(本実施の形態においては情報系データベース32B。以下、同様。)に複製されたレコードの数が格納される。
【0047】
さらにレプリ実行最終レコードID欄52Eには、対応するスキーマのレコードのうちの最後にレプリケートが行われたレコードのID(レコードID)が格納され、1レコード当りレプリ実行時間欄52Fには、対応するスキーマのデータをレプリケート元のデータベースからレプリケート先のデータベースにレプリケートする際に要する1レコード当りの時間(1レコード当りレプリ実行時間)が格納される。
【0048】
一方、データベース統計情報42は、ストレージ装置6に保持された各データベース32(基幹系データベース32A、情報系データベース32B)に関する各種統計情報であり、
図6に示すように、I/O実行時間テーブル53及びデータ分布テーブル54から構成される。
【0049】
I/O実行時間テーブル53は、統計的に得られた基幹系データベース32A及び情報系データベース32Bに対する1レコード当りの平均的なI/O実行時間(以下、これを平均I/O実行時間と呼ぶ)を管理するために利用されるテーブルであり、
図7に示すように、サーバID欄53A、DBMS ID欄53B及び平均I/O実行時間欄53Cを備えて構成される。I/O実行時間テーブル53では、1つのエントリが1つのデータベース32(基幹系データベース32A又は情報系データベース32B)に対応する。
【0050】
そしてDBMS ID欄53Bには、DBMS16のDBMS IDが格納され、サーバID欄53Aには、対応するDBMS32が実装されたサーバ装置2(基幹系サーバ装置2A又は情報系サーバ装置2B)のサーバIDが格納される。また平均I/O実行時間欄53Cには、対応するDBMS16が対応するデータベース32へのI/Oに要した平均時間(平均I/O実行時間)が格納される。
【0051】
またデータ分布テーブル54は、各データベース32(基幹系データベース32A、情報系データベース32B)におけるデータの分布状況を管理するために利用されるテーブルであり、
図8に示すように、サーバID欄54A、DBMS ID欄54B、スキーマID欄54C、キー値欄54D及びパーセンテージ欄54Eを備えて構成される。このデータ分布テーブル54では、1つのエントリ(行)が1つのキー値(年齢等の検索時にキーとなる値)の1つの区分に対応する。
【0052】
そしてキー値欄54Dには、1つのキー値の1つの区分の範囲(又は値)が格納され、DBMS ID欄54Bには、対応するキー値の区分のデータが格納されたデータベース32を管理するDBMS16のDBMS IDが格納される。
【0053】
またサーバID欄54Aには、そのDBMS16が実装されたサーバ装置2(基幹系サーバ装置2A又は情報系サーバ装置2B)のサーバIDが格納され、スキーマID欄54Cには、対応するキー値の対応する区分のデータが格納されたスキーマのスキーマIDが格納される。さらにパーセンテージ欄54Eには、対応するキー値の対応する区分のデータが当該キー値の全データに占める百分率が格納される。
【0054】
なお、このデータ分布テーブル54は、検索時に用いられるキーごとに作成される。
【0055】
(2−2)本クエリ実行方式に関連して実行される各種処理
次に、かかる本実施の形態によるクエリ実行方式に関連して、情報系サーバ装置2Bにおいて実行される各種処理の具体的な処理内容について説明する。なお、以下においては、各種処理の処理主体をコマンド受付けプログラム40(
図1)として説明するが、実際上は、コマンド受付けプログラム40に基づいて情報系サーバ装置2BのCPU10(
図1)がその処理を実行することは言うまでもない。
【0056】
(2−2−1)レプリ設定処理
図9は、ホスト計算機4のアプリケーション24(
図1)から送信されたレプリケート設定用のコマンド(以下、これをレプリ設定コマンドと呼ぶ)を受信したコマンド受付けプログラム40により実行されるレプリ設定処理の処理手順を示す。コマンド受付けプログラム40は、この
図9に示す処理手順に従って、レプリ設定コマンドにおいて指定された処理(レプリケート設定の作成又はレプリケート設定の削除)を実行する。
【0057】
実際上、コマンド受付けプログラム40は、かかるレプリ設定コマンドを受信するとこのレプリ設定処理を開始し、まず、このとき受信したレプリ設定コマンドを受け付け(SP1)、受け付けたレプリ設定コマンドが新規のレプリケート設定の作成を指示するコマンドであるか否かを判断する(SP2)。
【0058】
そしてコマンド受付けプログラム40は、この判断で肯定結果を得ると、レプリ設定コマンドにおいてレプリケート設定の作成対象として指定されたスキーマがレプリケート元のデータベース32(基幹系データベース32A)に存在するか否かを判断する(SP3)。コマンド受付けプログラム40は、この判断で否定結果を得ると、レプリ設定コマンドの送信元のアプリケーション24にエラー通知を送信した後(SP4)、このレプリ設定処理を終了する。
【0059】
これに対してコマンド受付けプログラム40は、ステップSP3の判断で肯定結果を得ると、レプリ設定コマンドにおいて指定されたスキーマの作成をレプリケート先のDBMS16(情報系DBMS16B)に指示する(SP5)。かくして、レプリケート先のDBMS16は、この指示に従って、指定されたスキーマを自己が管理するデータベース(情報系データベース32B)内に作成する。
【0060】
続いて、コマンド受付けプログラム40は、そのときレプリケート先のDBMS16に作成を指示したスキーマを新規登録するためにレプリ実行テーブル52(
図5)を更新する(SP6)。具体的に、コマンド受付けプログラム40は、レプリ実行テーブル52の未使用の1行を確保し、その行のスキーマID欄52A(
図5)に、そのスキーマに付与したスキーマID格納すると共に、その行の状態欄52B(
図5)に「レプリ残データ有」を格納する。
【0061】
またコマンド受付けプログラム40は、その行のレプリ元データベースレコード数欄52C(
図5)に、そのスキーマのレコード数を格納すると共に、レプリ先データベースレコード数欄52D(
図5)に「0」を格納する。さらにコマンド受付けプログラム40は、その行のレプリ実行最終レコードID欄52E(
図5)に、そのスキーマの最初のレコードIDを格納し、さらにその行の1レコード当りレプリ実行時間欄52F(
図5)に、値がないことを表す「−」を格納する。
【0062】
以上のステップSP5及びステップSP6の処理により、レプリ設定コマンドにおいて指定されたスキーマのデータをレプリケート元のデータベース32(基幹系データベース32A)及びレプリケート先のデータベース32(情報系データベース32B)間でレプリケートするための設定が完了する。そしてコマンド受付けプログラム40は、この後、このレプリ設定処理を終了する。
【0063】
一方、コマンド受付けプログラム40は、ステップSP2の判断で否定結果を得ると、かかるレプリ設定コマンドが既存のレプリケート設定の削除を指示するコマンドであるか否かを判断する(SP7)。そしてコマンド受付けプログラム40は、この判断で否定結果を得ると、かかるレプリ設定コマンドの送信元のアプリケーション24(
図1)にエラー通知を送信した後(SP11)、このレプリ設定処理を終了する。
【0064】
これに対してコマンド受付けプログラム40は、ステップSP7の判断で肯定結果を得ると、レプリ設定コマンドにおいてレプリケート設定の削除対象として指定されたスキーマがレプリケート先のデータベース32(情報系データベース32B)に存在するか否かを判断する(SP8)。そしてコマンド受付けプログラム40は、この判断で否定結果を得ると、レプリ設定コマンドの送信元のアプリケーション24にエラー通知を送信した後(SP11)、このレプリ設定処理を終了する。
【0065】
これに対してコマンド受付けプログラム40は、ステップSP8の判断で肯定結果を得ると、レプリ設定コマンドにおいて指定されたスキーマの削除をレプリケート先のDBMS16(情報系DBMS16B)に指示する(SP9)。かくして、レプリケート先のDBMS16は、この指示に従って、指定されたスキーマを自己が管理するデータベース32(情報系データベース32B)から削除する。
【0066】
続いて、コマンド受付けプログラム40は、そのときレプリケート先のDBMS16に削除を指示したスキーマのレプリケート設定を無効とするためにレプリ実行テーブル52(
図5)を更新する(SP10)。具体的に、コマンド受付けプログラム40は、レプリ実行テーブル52のエントリ(行)のうち、レプリ設定コマンドで指定されたスキーマに対応するエントリの状態欄52B(
図5)の値を「レプリ対象外」に更新する。
【0067】
またコマンド受付けプログラム40は、そのエントリのレプリ先データベースレコード数欄52D(
図5)に格納された値を「0」に更新し、さらにそのエントリのレプリ実行最終レコードID欄52E(
図5)及び1レコード当りレプリ実行時間欄52F(
図5)に、それぞれ値が存在しないことを表す「−」を格納する。
【0068】
以上のステップSP9及びステップSP10の処理により、レプリ設定コマンドにおいて指定されたスキーマのレプリケート元のデータベース32(基幹系データベース32A)及びレプリケート先のデータベース32(情報系データベース32B)間におけるレプリケート設定が削除される。そしてコマンド受付けプログラム40は、この後、このレプリ設定処理を終了する。
【0069】
(2−2−2)レプリ実行処理
一方、
図10は、コマンド受付けプログラム40により定期的に実行されるレプリ実行処理の具体的な処理手順を示す。コマンド受付けプログラム40は、この
図10に示す処理手順に従って、レプリケートが完了していないスキーマのレプリケートを実行する。
【0070】
実際上、コマンド受付けプログラム40は、この
図10に示すレプリ実行処理を開始すると、まず、レプリ実行テーブル52(
図5)を参照して、レプリケートが完了していないスキーマ(状態欄52Bに格納された値が「レプリ残データ有」となっているスキーマ)が存在するか否かを判断する(SP20)。そしてコマンド受付けプログラム40は、この判断で否定結果を得ると、このレプリ実行処理を終了する。
【0071】
これに対してコマンド受付けプログラム40は、ステップSP20の判断で肯定結果を得ると、ステップSP20で検出したレプリケートが完了していないスキーマの中から1つのスキーマを選択し(SP21)、選択したスキーマ(以下、これを選択スキーマと呼ぶ)について、データのレプリケートを実行するようレプリケート元のDBMS16(基幹系DBMS16A)及びレプリケート先のDBMS16(情報系DBMS16B)に指示を与える(SP22)。
【0072】
具体的に、コマンド受付けプログラム20は、レプリ実行テーブル52のエントリのうちの選択スキーマに対応するエントリのレプリ実行最終レコードID欄52EにレコードIDが格納されたレコードから残りのすべてのレコードのデータをレプリケート元のデータベース32(基幹系データベース32A)からレプリケート先のデータベース32(情報系データベース32B)にレプリケートするようレプリケート元及びレプリケート先の各DBMS16に指示を与える。この結果、かかる選択スキーマにおけるすべてのデータのレプリケートがこれらのDBMS16間で行われる。
【0073】
続いて、コマンド受付けプログラム40は、レプリ実行テーブル52のレコードのうち、選択スキーマに対応するエントリを更新する(SP23)。具体的に、コマンド受付けプログラム40は、かかるエントリの状態欄52B(
図5)に格納された値を「レプリ残データ無」に変更し、そのエントリのレプリ先データベースレコード数欄52D(
図5)に格納されている値をレプリ元データベースレコード数欄52C(
図5)に格納されている値と同じ値に変更する。またコマンド受付けプログラム40は、そのエントリのレプリ実行最終レコードID欄52E(
図5)に格納されている値を、選択スキーマのレコードのうちのステップSP22の処理で最後にレプリケートを実行したレコードのレコードIDに変更し、さらに1レコード当りレプリ実行時間を、ステップSP22の処理の際に計測した1レコード当りのレプリケート処理の実行時間を加味した値に変更する。
【0074】
次いで、コマンド受付けプログラム40は、レプリ実行テーブル52に登録されたスキーマであって、レプリケートが完了していないすべてのスキーマについてステップSP22及びステップSP23の処理を実行し終えたか否かを判断する(SP24)。
【0075】
そしてコマンド受付けプログラム40は、この判断で否定結果を得るとステップSP21に戻り、この後、ステップSP21において選択するスキーマを未処理の他のスキーマに順次切り替えながら、ステップSP21〜ステップSP24の処理を繰り返す。
【0076】
そしてコマンド受付けプログラム40は、やがてデータのレプリケートが完了していないすべてのスキーマについてレプリケートが完了することによりステップSP24で肯定結果を得ると、このレプリ実行処理を終了する。
【0077】
(2−2−3)クエリ実行処理
(2−2−3−1)クエリ実行処理
他方、
図11は、コマンド受付けプログラム40がホスト計算機4のアプリケーション24から送信されたクエリを受信した場合に実行するクエリ実行処理の処理手順を示す。コマンド受付けプログラム40は、この
図11に示す処理手順に従って、受信したクエリを上述のクエリ実行ルールに従って基幹系DBMS16A又は情報系DBMS16Bにより実行できるように、当該クエリを対応する基幹系DBMS16A又は情報系DBMS16Bに振り分ける。
【0078】
実際上、コマンド受付けプログラム40は、ホスト計算機4のアプリケーション24からのクエリを受信すると、この
図11に示すクエリ実行処理を開始し、まず、受信したクエリを受け付ける(SP30)。
【0079】
続いて、コマンド受付けプログラム40は、受け付けたクエリを解析し、データベース統計情報42を参照して、当該クエリを基幹系DBMS16A及び情報系DBMS16Bのそれぞれで実行した場合の実行時間の予測値(以下、これらを第1のクエリ実行予測時間と呼ぶ)をそれぞれ算出すると共に、このクエリを実行するためのクエリプランを作成する(SP31)。
【0080】
なお本実施の形態の場合、コマンド受付けプログラム40は、ステップSP31における第1のクエリ実行予測時間を、検索対象又は更新対象のレコード数に、
図7について上述したI/O実行時間テーブル53の平均I/O実行時間欄53C(
図7)に格納された平均I/O実行時間欄53Cを乗算することにより算出する。
【0081】
例えば、受け付けたクエリの内容が
図8に示す「T1」というスキーマに対して「C1」というキーが0〜50の範囲という条件で検索するものであった場合、データ分布テーブル54(
図8)を参照して、条件に合致するレコード数のスキーマ全体に対する合計割合を算出し(
図8の場合には50%と30%を合わせた80%)、その合計割合にスキーマ全体のレコード数を乗算することにより検索対象のレコード数を算出し(例えば、「T1」というスキーマの全レコード数が10000である場合には8000)、その算出結果にI/O実行時間テーブル53に格納されたその検索を行うDBMS16の平均I/O実行時間を乗算することにより算出する。
【0082】
続いて、コマンド受付けプログラム40は、そのクエリをクエリ管理テーブル50(
図3)に新規登録する(SP32)。具体的に、コマンド受付けプログラム40は、そのクエリにクエリIDを付与し、当該クエリIDをクエリ管理テーブル50の空の行のクエリ欄50A(
図3)に格納する。またコマンド受付けプログラム40は、その行の状態欄50D(
図3)に、当該クエリを未だ実行していないことを表す「クエリ受付け」を格納し、さらにそのエントリのポインタ欄50Eに、ステップSP31で作成したクリエプランへのポインタを格納する。
【0083】
次いで、コマンド受付けプログラム40は、かかるクエリが参照系のクエリであるか否かを判断する(SP33)。そしてコマンド受付けプログラム40は、この判断で否定結果を得ると、このクエリを基幹系DBMS16Aに実行させる更新系クエリ処理を実行し(SP34)、この後、ステップSP32でクエリ管理テーブル50に追加したエントリの状態欄50D(
図3)に格納された値をそのクエリの実行が完了したことを表す「完了」に変更するようにクエリ管理テーブル50を更新した後(SP36)、このクエリ実行処理を終了する。
【0084】
これに対してコマンド受付けプログラム40は、ステップSP33の判断で肯定結果を得ると、このクエリを情報系DBMS16Bに実行させる参照系クエリ処理を実行し(SP35)、この後、ステップSP32でクエリ管理テーブル50に追加したエントリの状態欄50D(
図3)に格納された値をそのクエリの実行が完了したことを表す「完了」に変更するようにクエリ管理テーブル50を更新した後(SP36)、このクエリ実行処理を終了する。
【0085】
(2−2−3−2)更新系クエリ処理
図12は、
図11について上述したクエリ実行処理のステップSP34でコマンド受付けプログラム40により実行される更新系クエリ処理の具体的な処理手順を示す。
【0086】
コマンド受付けプログラム40は、クエリ実行処理のステップSP34に進むと、この
図12に示す更新系クエリ処理を開始し、まず、クエリ実行処理(
図11)のステップSP31で作成したクエリプランを基幹系DBMS16Aに転送する(SP40)。これにより、このクエリが基幹系DBMS16Aにより実行される。なお、基幹系DBMS16Aは、このクエリの実行が完了すると、その旨の通知(以下、これをクエリ実行完了通知と呼ぶ)を当該クエリの実行結果(以下、これをクエリ実行結果と呼ぶ)と共にバス3(
図1)を介してコマンド受付けプログラム40に送信する。
【0087】
続いて、コマンド受付けプログラム40は、クエリ管理テーブル50(
図3)を更新する(SP41)。具体的に、コマンド受付けプログラム40は、クエリ管理テーブル50におけるクエリ実行処理のステップSP32で追加したエントリのサーバID欄50B(
図3)に基幹系サーバ装置2AのサーバIDを格納し、当該エントリのDBMS ID欄50C(
図3)に基幹系DBMS16AのDBMS_IDを格納する。また情報系DBMS16Bは、かかるエントリの状態欄50D(
図3)に格納された値を、現在、そのクエリが実行中であることを表す「実行中」に変更する。
【0088】
次いで、コマンド受付けプログラム40は、上述のクエリ実行完了通知及びクエリ実行結果が基幹系DBMS16Aから与えられるのを待ち受け(SP42)、やがてこれらクエリ実行完了通知及びクエリ実行結果が基幹系DBMS16Aから与えられると、クエリ実行結果をかかるクエリの送信元のアプリケーション24に送信する(SP43)。
【0089】
この後、コマンド受付けプログラム40は、レプリ実行テーブル52(
図5)を参照して、そのクエリにおいて更新対象となっていたデータがレプリケート対象のデータであるか否かを判断する(SP44)。そしてコマンド受付けプログラム40は、この判断で否定結果を得るとこの更新系クエリ処理を終了してクエリ実行処理(
図11)に戻る。
【0090】
これに対してコマンド受付けプログラム40は、ステップSP44の判断で肯定結果を得ると、レプリ実行テーブル52(
図5)を更新する(SP45)。具体的に、コマンド受付けプログラム40は、レプリ実行テーブル52のエントリ(行)のうち、かかるクエリに対応するエントリの状態欄52B(
図5)に格納されている値を「レプリ残データ無」から「レプリ残データ有」に変更すると共に、そのエントリのレプリ元データベースレコード数欄52C(
図5)の値をそのとき追加されたレコード数を加算した値に変更する。そしてコマンド受付けプログラム40は、この後、この更新系クエリ処理を終了してクエリ実行処理に戻る。
【0091】
(2−2−3−3)参照系クエリ処理
一方、
図13は、
図11について上述したクエリ実行処理のステップSP35においてコマンド受付けプログラム40により実行される参照系クエリ処理の具体的な処理手順を示す。
【0092】
コマンド受付けプログラム40は、クエリ実行処理のステップSP35に進むと、この
図13に示す参照系クエリ処理を開始し、まず、クエリ管理テーブル50(
図3)及び対応するクエリプランを参照して、そのとき受け付けたクエリにおいて参照対象となっているデータを対象とする更新系のクエリが実行中であるか否かを判断する(SP50)。
【0093】
コマンド受付けプログラム40は、この判断で否定結果を得るとステップSP52に進み、これに対して肯定結果を得ると、その更新系のクエリの処理が完了するのを待ち受ける(SP51)。そしてコマンド受付けプログラム40は、やがてその更新系のクエリの処理が完了すると、そのとき受け付けたクエリで参照対象とすべきデータを含むスキーマの更新履歴情報が情報系DBMS16Bにのみが存在するか否かを判断する(SP52)。
【0094】
この判断で肯定結果を得ることは、情報系DBMS16Bのみがそのクエリを実行できることを意味する。かくして、このときコマンド受付けプログラム40は、情報系DBMS16Bにそのクエリを実行させ、その実行結果をそのクエリの送信元のアプリケーション24に送信する一連の処理(以下、これを参照系クエリ実行処理と呼ぶ)を実行する(SP53)。そしてコマンド受付けプログラム40は、この後、この参照系クエリ処理を終了してクエリ実行処理(
図11)に戻る。
【0095】
これに対してコマンド受付けプログラム40は、ステップSP52の判断で否定結果を得ると、レプリ実行テーブル52(
図5)を参照して、そのクエリで参照対象とすべきスキーマがレプリケートの対象外であるか否かを判断する(SP54)。
【0096】
この判断で肯定結果を得ることは、そのクエリで参照対象とすべきスキーマ(データ)が基幹系データベース32Aにのみ存在し、情報系データベース32Bには存在しないことを意味する。かくして、このときコマンド受付けプログラム40は、基幹系DBMS16Aにそのクエリを転送することによりこれを実行させ、その実行結果をそのクエリの送信元のアプリケーション24に送信する一連の処理(以下、これを基幹系クエリ実行処理と呼ぶ)を実行する(SP55)。そしてコマンド受付けプログラム40は、この後、この参照系クエリ処理を終了してクエリ実行処理に戻る。
【0097】
これに対してコマンド受付けプログラム40は、ステップSP54の判断で否定結果を得ると、レプリ実行テーブル52を参照して、そのクエリで参照対象とすべきスキーマの状態が「レプリ残データ無」であるか否かを判断する(SP56)。
【0098】
この判断で肯定結果を得ることは、そのクエリで参照対象とすべきスキーマのレプリケートが完了していることを意味する。かくして、このときコマンド受付けプログラム40は、ステップSP53について上述した参照系クエリ実行処理を実行し(SP57)、この後、この参照系クエリ処理を終了してクエリ実行処理に戻る。
【0099】
これに対してコマンド受付けプログラム40は、ステップSP56の判断で否定結果を得ると、レプリ実行テーブル52(
図5)を参照して、そのクエリで参照対象とすべきスキーマについて、レプリケートが完了していない残りのレコードをレプリケートしたときに要するレプリ実行予測時間(以下、これを第2のレプリ実行予測時間と呼ぶ)を算出する(SP58)。
【0100】
具体的に、コマンド受付けプログラム40は、レプリ実行テーブル52の上記スキーマに対応するエントリのレプリ元データベースレコード数欄52C(
図5)に格納されている値から当該エントリのレプリ先データベースレコード数欄52D(
図5)に格納されている値を減算し、その減算結果に当該エントリの1レコード当りレプリ実行時間欄52F(
図5)に格納された値を乗算することにより、かかる第2のレプリ実行予測時間を算出する。
【0101】
続いて、コマンド受付けプログラム40は、クエリ実行処理(
図11)のステップSP31で情報系DBMS16Bについて算出した第1のクエリ実行予測時間と、ステップSP58で算出した第2のレプリ実行予測時間との合計値よりも、クエリ実行処理のステップSP31で基幹系DBMSについて算出した第1のクエリ実行予測時間の方が短いか否かを判断する(SP59)。
【0102】
この判断で肯定結果を得ることは、かかるクエリを基幹系DBMS16Aで実行した方が速いことを意味する。かくして、このときコマンド受付けプログラム40は、ステップSP55について上述した更新系クエリ実行処理を実行することにより、そのクエリを基幹系DBMS16Aに実行させると共にその実行結果を当該クエリの送信元のアプリケーション24に送信し、この後、この参照系クエリ処理を終了してクエリ実行処理に戻る(SP60)。
【0103】
これに対して、ステップSP59の判断で否定結果を得ることは、かかるクエリを基幹系DBMS16Aで実行するよりも、対応するデータを基幹系データベース32Aから情報系データベース32Bにレプリケートした後に情報系DBMS16Bで実行した方が速いことを意味する。かくして、このときコマンド受付けプログラム40は、そのクエリの参照対象となっているスキーマのデータのレプリケートを実行するよう基幹系DBMS16A及び情報系DBMS16Bに指示を与え(SP61)、その後、
図10のステップSP23と同様にしてレプリ実行テーブル52(
図5)を更新する(SP62)。
【0104】
この後、コマンド受付けプログラム40は、クエリ実行処理(
図11)のステップSP31で作成したクエリプランをレプリケート先のDBMS16(情報系DBMS16B)に与えることにより、当該クエリプランに従ってクエリ実行処理のステップSP30で受け付けたクエリをレプリケート先のDBMS16に実行させ(SP63)、その実行結果を当該クエリの送信元のアプリケーション24に送信した後(SP64)、この参照系クエリ処理を終了する。
【0105】
なお、上述の参照系クエリ処理(
図13)のステップSP53及びステップSP57においてコマンド受付けプログラム40により実行される参照系クエリ実行処理の具体的な処理内容を
図14に示す。
【0106】
コマンド受付けプログラム40は、参照系クエリ処理のステップSP53及びステップSP57に進むと、この
図14に示す参照系クエリ実行処理を開始し、まず、
図11について上述したクエリ実行処理のステップSP31で作成したクエリプランを情報系DBMS16Bに与える(SP70)。かくして情報系DBMS16Bは、与えられたクエリを実行し、その実行結果をコマンド受付けプログラム40に通知する。
【0107】
続いて、コマンド受付けプログラム40は、クエリ管理テーブル50(
図3)を更新する(SP71)。具体的に、コマンド受付けプログラム40は、クエリ管理テーブル50のエントリのうち、そのとき情報系DBMS16Bに与えたクエリに対応するエントリの状態欄50D(
図3)に格納された値を「実行中」に変更する。
【0108】
そしてコマンド受付けプログラム40は、やがて情報系DBMS16Bから上述のようにそのクエリの実行結果が与えられると、その実行結果を当該クエリの送信元のアプリケーション24に送信し(SP72)、この後、この参照系クエリ実行処理を終了して参照系クエリ処理(
図13)に戻る。
【0109】
一方、上述の参照系クエリ処理のステップSP55及びステップSP60においてコマンド受付けプログラム60により実行される更新系クエリ実行処理の具体的な処理内容を図に示す。
【0110】
コマンド受付けプログラム40は、参照系クエリ処理のステップSP55及びステップSP60に進むと、この
図15に示す更新系クエリ実行処理を開始し、まず、
図11について上述したクエリ実行処理のステップSP31で作成したクエリプランをバス3(
図1)を介して基幹系DBMS16Aに送信する(SP80)。かくして基幹系DBMS16Aは、与えられたクエリを実行し、その実行結果をバス3を介してコマンド受付けプログラム40に送信する。
【0111】
続いて、コマンド受付けプログラム40は、クエリ管理テーブル50(
図3)を更新する(SP81)。具体的に、コマンド受付けプログラム40は、クエリ管理テーブル50のエントリのうち、そのとき基幹系DBMS16Aに与えたクエリに対応するエントリの状態欄50D(
図3)に格納された値を「実行中」に変更する。
【0112】
そしてコマンド受付けプログラム40は、やがて基幹系DBMS16Aから上述のようにそのクエリの実行結果が与えられると、その実行結果をそのクエリの送信元のアプリケーション24に送信し(SP82)、この後、この参照系クエリ実行処理を終了して参照系クエリ処理(
図13)に戻る。
【0113】
(3)本実施の形態の効果
以上のように本実施の形態によるデータベースシステム1では、各ホスト計算機4のアプリケーション24から発行されたクエリを情報系サーバ装置2Bに実装されたコマンド受付け部15において受け付け、当該クエリが更新系及び参照系のいずれであるかをコマンド受付け部15において判定し、更新系である場合には基幹系DBMS16Aに振り分け、参照系である場合には情報系DBMS16Bに振り分ける。
【0114】
この際、コマンド受付け部15は、受け付けたクエリが参照系のクエリであっても、当該クエリにおいて指定された参照対象のデータが基幹系データベース32A及び情報系データベース32B間で行われるレプリケートの対象であり、かつ当該レプリケートが未完了の場合には、当該クエリを基幹系DBMS16Aで実行するときに要する時間と、当該レプリケートを完了した後に情報系DBMS16Bで実行するときに要する時間とをそれぞれ予測し、後者の時間よりも前者の時間の方が短いときには、当該クエリを基幹系DBMS16Aに振り分ける。
【0115】
従って、本データベースシステム1によれば、ホスト計算機4に実装されたアプリケーション24の改変が必要なく、また基幹系DBMS16A及び情報系DBMS16Bのうちのより実行時間が短いDBMS16にクエリを実行させることができるため、より迅速にクエリを実行し得る応答性能の高いデータベースシステムを実現できる。
【0116】
(4)他の実施の形態
なお上述の実施の形態においては、コマンド受付け部15を情報系サーバ装置2Bに実装するようにした場合について述べたが、本発明はこれに限らず、例えば
図1との対応部分に同一符号を付した
図16に示すように、上述したコマンド受付けプログラム40と同様の機能を有するコマンド受付けプログラム60を備えるコマンド受付け部61を、情報系サーバ装置62Bではなく、基幹系サーバ装置62Aに実装するようにしても良い。
【0117】
また
図1との対応部分に同一符号を付した
図17に示すように、上述したコマンド受付けプログラム40と同様の機能を有するコマンド受付けプログラム70を備えるコマンド受付け部71を、基幹系サーバ装置72A及び情報系サーバ装置72Bではなく、ホスト計算機73に実装するようにしても良い。このようにしても、アプリケーション24を改変することなくデータベースシステムの応答性能を向上させることができる。
【0118】
また上述の実施の形態においては、ホスト計算機4から発行された2クエリを受け付け、受け付けた2クエリが更新系及び参照系のいずれのクエリであるかを判定する判定部と、その判定結果に基づいて、当該クエリが更新系のクエリである場合には、当該クエリを基幹系DBMS16A(第1のデータベース管理システム)に振り分け、当該クエリが参照系のクエリである場合には、当該クエリを情報系DBMS16B(第2のデータベース管理システム)に振り分ける振分け部とを1つのコマンド受付け部15により構成するソフトウェア構成とするようにした場合について述べたが、本発明はこれに限らず、例えば、これら判定部及び振分け部の一部又は全部の機能をハードウェア構成により実現するようにしても良い。
【0119】
さらに上述の実施の形態においては、基幹系DBMS16Aを基幹系サーバ装置2Aに搭載し、情報系DBMS16Bを情報系サーバ装置2Bに搭載する(つまり基幹系DBMS16A及び情報系DBMS16Bを異なるサーバ装置2に搭載する)ようにした場合について述べたが、本発明はこれに限らず、これら基幹系DBMS16A及び情報系DBMS16Bを同一のサーバ装置2に搭載するようにしても良い。
【0120】
同様に、上述の実施の形態においては、基幹系データベース32Aを基幹系ストレージ装置6Aに格納し、情報系データベース32Bを情報系ストレージ装置6Bに格納する(つまり基幹系データベース32A及び情報系データベース32Bを異なるストレージ装置6に格納する)ようにした場合について述べたが、本発明はこれに限らず、これら基幹系データベース32A及び情報系データベース32Bを同一のストレージ装置6に格納するようにしても良い。
【0121】
さらに上述の実施の形態においては、クエリが参照系のクエリであっても、当該クエリにおいて指定された参照対象のデータが基幹系データベース32A及び情報系データベース32B間でのレプリケートの対象であり、かつ当該レプリケートが未完了の場合に、当該クエリを基幹系DBMS16Aで実行するときに要する第1の時間と、当該レプリケートを完了した後に情報系DBMS16Bで実行するときに要する第2の時間とを、コマンド受付け部15が、
図11のステップSP31で上述した方法と、
図13のステップSP58で上述した方法とを利用して予測するようにした場合について述べたが、本発明はこれに限らず、この他種々の予測方法を広く適用することができる。
【0122】
さらに上述の実施の形態においては、物理的なサーバ装置により基幹系サーバ装置2A及び情報系サーバ装置2Bを構成するようにした場合について述べたが、本発明はこれに限らず、これら基幹系サーバ装置2A及び情報系サーバ装置2Bを仮想化技術を利用した仮想的なサーバ装置として構成するようにしても良い。