(57)【要約】      （修正有）【課題】データベースサーバの処理負荷を低減するデータ提供プログラム、方法及び装置を提供する。【解決手段】サーバシステムにおいて、キャッシュサーバは、クエリをデータベースサーバに送信した後に、データベースサーバから、クエリに基づいて生成された実行計画と実行計画に基づいてデータベースから抽出されたデータとを受信すると、クエリを実行計画と対応付けて候補クエリとして第１の記憶部に記憶するとともに、データを第２の記憶部に記憶する。第１の要求元から第１のクエリを受信すると、第１の記憶部において、第１のクエリと内容が対応する候補クエリを検索し、検索において第１のクエリと内容が対応する第１の候補クエリが特定された場合、第１の記憶部を参照して、第１の候補クエリに対応する第１の実行計画を特定するとともに、第１の実行計画に基づいて第２の記憶部から特定のデータを抽出し、特定のデータを第１の要求元に送信する。【選択図】図１
2019040245.tif 000002
【特許請求の範囲】
【請求項１】
クエリをデータベースサーバに送信した後に、前記データベースサーバから、前記クエリに基づいて生成された実行計画と前記実行計画に基づいてデータベースから抽出されたデータとを受信すると、前記クエリを前記実行計画と対応付けて候補クエリとして第１の記憶部に記憶するとともに、前記データを第２の記憶部に記憶し、
第１の要求元から第１のクエリを受信すると、前記第１の記憶部において、前記第１のクエリと内容が対応する候補クエリを検索し、
前記検索において前記第１のクエリと内容が対応する第１の候補クエリが特定された場合、前記第１の記憶部を参照して、前記第１の候補クエリに対応する第１の実行計画を特定するとともに、前記第１の実行計画に基づいて前記第２の記憶部から特定のデータを抽出し、前記特定のデータを前記第１の要求元に送信し、
前記検索において前記第１のクエリと内容が対応する候補クエリが特定されない場合、前記第１のクエリを前記データベースサーバに送信する、
処理をコンピュータに実行させることを特徴とするデータ提供プログラム。
【請求項２】
前記クエリは、問合せ言語で記述されており、
前記実行計画は、前記問合せ言語に基づく構文解析を前記クエリに対して行うことにより生成され、
前記検索は、前記問合せ言語に基づく構文解析を行うことなく行われる、
ことを特徴とする請求項１に記載のデータ提供プログラム。
【請求項３】
前記第２の記憶部のデータ構造は、前記データベースサーバが有する前記データベースの一部のデータ構造と同一である、
ことを特徴とする請求項１に記載のデータ提供プログラム。
【請求項４】
前記第１のクエリと内容が対応する候補クエリを検索する処理は、前記第１のクエリの内容を正規化し、正規化後の第１のクエリの内容と対応する候補クエリを検索する処理である、
ことを特徴とする請求項１に記載のデータ提供プログラム。
【請求項５】
前記データベースサーバからデータの更新処理に関する情報を受信すると、前記情報に基づいて、前記第２の記憶部に記憶されたデータに対して、更新処理を実行する、
ことを特徴とする請求項１に記載のデータ提供プログラム。
【請求項６】
前記データベースサーバからデータの更新処理に関する情報を受信すると、前記情報に基づいて、前記第１の記憶部からデータの更新処理により影響を受ける特定の実行計画を削除する、
ことを特徴とする請求項１に記載のデータ提供方法。
【請求項７】
クエリをデータベースサーバに送信した後に、前記データベースサーバから、前記クエリに基づいて生成された実行計画と前記実行計画に基づいてデータベースから抽出されたデータとを受信すると、前記クエリを前記実行計画と対応付けて候補クエリとして第１の記憶部に記憶するとともに、前記データを第２の記憶部に記憶し、
第１の要求元から第１のクエリを受信すると、前記第１の記憶部において、前記第１のクエリと内容が対応する候補クエリを検索し、
前記検索において前記第１のクエリと内容が対応する第１の候補クエリが特定された場合、前記第１の記憶部を参照して、前記第１の候補クエリに対応する第１の実行計画を特定するとともに、前記第１の実行計画に基づいて前記第２の記憶部から特定のデータを抽出し、前記特定のデータを前記第１の要求元に送信し、
前記検索において前記第１のクエリと内容が対応する候補クエリが特定されない場合、前記第１のクエリを前記データベースサーバに送信する、
処理をコンピュータが実行することを特徴とするデータ提供方法。
【請求項８】
クエリをデータベースサーバに送信した後に、前記データベースサーバから、前記クエリに基づいて生成された実行計画と前記実行計画に基づいてデータベースから抽出されたデータとを受信すると、前記クエリを前記実行計画と対応付けて候補クエリとして第１の記憶部に記憶するとともに、前記データを第２の記憶部に記憶し、第１の要求元から第１のクエリを受信すると、前記第１の記憶部において、前記第１のクエリと内容が対応する候補クエリを検索し、前記検索において前記第１のクエリと内容が対応する第１の候補クエリが特定された場合、前記第１の記憶部を参照して、前記第１の候補クエリに対応する第１の実行計画を特定するとともに、前記第１の実行計画に基づいて前記第２の記憶部から特定のデータを抽出し、前記特定のデータを前記第１の要求元に送信し、前記検索において前記第１のクエリと内容が対応する候補クエリが特定されない場合、前記第１のクエリを前記データベースサーバに送信する、処理を実行する制御部、
を有することを特徴とするデータ提供装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ提供プロラム、データ提供方法、及びデータ提供装置に関する。
【背景技術】
【０００２】
データベースサーバは、ＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）のような問合せ言語で記述された問合せ文（クエリとも称される）に応じて各種処理を実行する。例えば、データベースサーバはＳＱＬ文（ＳＱＬクエリ）を受け取ると、データベースの管理情報を基にＳＱＬ文を解析する。そして、ＳＱＬ文の解析が終わると、データベースサーバは、ＳＱＬ文を実行可能にする実行計画を作成する。データベースサーバは、作成した実行計画に基づいて、各種処理を実行する。
【０００３】
クライアントからの要求毎に、データベースサーバからクライアントへのデータの通信が発生すると、データベースサーバの負荷が増大する。そこで、クライアントが一度参照したデータをキャッシュサーバに保持し、２度目以降の参照においては、キャッシュサーバからデータをクライアントに提供する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２８７６６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、キャッシュサーバを利用する場合であっても、例えば、ＳＱＬ文がクライアントから送信される度に、ＳＱＬ文を解析し実行計画を作成する処理を、データベースサーバが実行するのでは、データベースサーバの処理負荷が高いという課題がある。
【０００６】
また、データベースサーバに加えてキャッシュサーバ自身もＳＱＬ文を解析し実行計画を作成することも考えられる。ただし、その場合には、データベースサーバの処理負荷は軽減されるものの、２ヶ所でＳＱＬ文の解析を行うことによりＳＱＬ文に対する応答時間が劣化するとともに、キャッシュサーバの負担が増大するという課題がある。
【０００７】
一の側面では、本発明は、データベースサーバの処理負荷を低減することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一観点によれば、クエリをデータベースサーバに送信した後に、データベースサーバから、クエリに基づいて生成された実行計画と実行計画に基づいてデータベースから抽出されたデータとを受信すると、クエリを実行計画と対応付けて候補クエリとして第１の記憶部に記憶するとともに、データを第２の記憶部に記憶し、第１の要求元から第１のクエリを受信すると、第１の記憶部において、第１のクエリと内容が対応する候補クエリを検索し、検索において第１のクエリと内容が対応する第１の候補クエリが特定された場合、第１の記憶部を参照して、第１の候補クエリに対応する第１の実行計画を特定するとともに、第１の実行計画に基づいて第２の記憶部から特定のデータを抽出し、特定のデータを第１の要求元に送信し、検索において第１のクエリと内容が対応する候補クエリが特定されない場合、第１のクエリを前記データベースサーバに送信する。
【発明の効果】
【０００９】
一の側面において、本発明は、データベースサーバの処理負荷を低減することを可能とする。
【図面の簡単な説明】
【００１０】
【図１】図１は、サーバシステムの構成例を示す図である。
【図２】図２は、データベースサーバのハードウェア構成例を示す図である。
【図３】図３は、データベースサーバの処理手順の一例を示すフローチャートである。
【図４】図４は、キャッシュサーバのハードウェア構成例を示す図である。
【図５】図５ａは、データベースに含まれるテーブルの一例を示す図である。図５ｂは、キャッシュデータベースに含まれるテーブルの一例を示す図である。図５ｃは、テーブルフィルタの一例を示す図である。
【図６】図６は、キャッシュサーバの処理手順の一例を示すフローチャートである。
【図７】図７は、キャッシュサーバのキャッシュデータベースへの記憶の処理手順の一例を示すフローチャートである。
【図８】図８は、ＳＱＬ文の正規化の一例を示す図である。
【図９】図９は、キャッシュサーバの処理手順の一例を示すフローチャートである。
【図１０】図１０は、データベースサーバの更新に関する処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面を参照して各実施形態について詳細に説明する。各実施形態における各処理は適宜組み合わせることが可能である。なお、各実施形態を説明するための全図において、同一部分には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００１２】
（第１実施形態）
以下、第１実施形態について説明する。図１は、第１実施形態のサーバシステムの構成例を示す図である。第１実施形態のサーバシステムは、キャッシュサーバ１０、データベースサーバ１１、アプリケーションサーバ１２を含み、キャッシュサーバ１０、データベースサーバ１１、アプリケーションサーバ１２は、ネットワーク１３を介して接続されている。
【００１３】
アプリケーションサーバ１２は、例えば、図示していないウェブサーバからのクエリに応じて、各種処理を実行し、ウェブサーバに結果を送信する。クエリは、問合せ言語で記述されている。各実施形態においては、問合せ言語としてＳＱＬを取り扱うが、問合せ言語は、これに限られるものではない。
【００１４】
データベースサーバ１１は、例えば、サービスに必要なデータを記憶したデータベースを有し、アプリケーションサーバ１２から発信されたクエリに対応するデータをアプリケーションサーバ１２に提供する。データベースサーバ１１は、サービスに必要なデータを体系的に記録したデータ集合であるデータベース１６を有する。
【００１５】
キャッシュサーバ１０は、例えば、データベースサーバ１１のデータベース１６に記録されたデータの一部を保持し、アプリケーションサーバ１２から発信されたクエリに対応するデータを、データベースサーバ１１の代わりにアプリケーションサーバ１２に提供する。キャッシュサーバ１０は、実行計画キャッシュ１４とキャッシュデータベース１５とを有する。キャッシュデータベース１５は、例えば、データベース１６の一部を再現したものである。
【００１６】
まず、データベースサーバ１１に関して説明する。図２は、第１実施形態に係るデータベースサーバ１１のハードウェア構成例を示す。データベースサーバ１１は、制御装置２１、記憶装置２２、通信装置２３を有し、これらはシステムバス２４で相互に接続されている。
【００１７】
制御装置２１は、データベースサーバ１１を制御する装置である。制御装置２１は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等の電子回路が用いられても良い。制御装置２１は、記憶装置２２に格納されているＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、各種プログラムに基づいて、各種演算や各ハードウェア構成部とのデータ入出力等、データベースサーバ１１の動作を制御して、各種処理を実行する。制御装置２１は、例えば、データベース管理システムを実行し、データベースを管理する。プログラムの実行中に必要となる各種情報等は、例えば記憶装置２２から取得することができる。なお、制御装置２１が行なう処理の一部を専用のハードウェアを用いて実現しても良い。制御装置２１は、第１実施形態に係るプログラムに基づき、第１実施形態に係る処理を実行する。
【００１８】
記憶装置２２は、主記憶装置及び補助記憶装置を含んでも良い。主記憶装置は、例えば、制御装置２１に実行させるＯＳやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、主記憶装置は、制御装置２１による処理に必要な各種データを記憶する。なお、主記憶装置としては、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等を用いても良い。
【００１９】
補助記憶装置は、例えば、実行プログラムや、データベースサーバ１１に設けられた制御プログラム等を記憶する。補助記憶装置は、制御装置２１からの指示に基づいて、記憶された各種情報の読み出しや、書き込みを行うことができる。補助記憶装置としては、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等のストレージ等を用いても良い。補助記憶装置は、処理において使用する情報や処理の結果を記憶しても良い。また、主記憶装置と補助記憶装置は、互いの機能を担い合っても良い。
【００２０】
通信装置２３は、例えば、制御装置２１からの制御信号に基づき、図１に示す様に、ネットワーク１３を介して接続されたアプリケーションサーバ１２やキャッシュサーバ１０との通信を行う。
【００２１】
以下、データベースサーバ１１の制御装置２１の具体的な動作を例示する。データベースサーバ１１は、アプリケーションサーバ１２から直接的に、若しくはキャッシュサーバ１０を経由して間接的に、クエリを受信する。クエリはＳＱＬで記述されており、例えばＳＥＬＥＣＴ文は、データベースにおけるデータの抽出（参照）を示す。また、ＳＥＬＥＣＴ文に付随する各種パラメータにより、抽出対象となるデータの条件を指定することができる。データベースサーバ１１の制御装置２１は、受信したクエリをＳＱＬの構文規則に基づいて構文解析（解釈）するとともに、データベース１６の定義情報（スキーマとも称される）に基づいて、実行する一連の処理の順を示す実行計画を生成する。ここで、実行計画とは、データベースサーバがクエリで要求された処理を現実に実行するための内部の処理手順を詳細に規定した情報である。
【００２２】
制御装置２１は、作成した実行計画を実行する。クエリが参照に関する場合には、制御装置２１は、実行計画の実行より、回答データ（クエリ結果とも称される）を作成する。制御装置２１は、実行計画と回答データとをキャッシュサーバ１０に送信する。制御装置２１は、実行計画の処理に関する部分のデータベース１６の定義情報をキャッシュサーバ１０に送信する場合もある。
【００２３】
第１実施形態に係るデータベースサーバ１１のクエリに対する処理手順の一例について説明する。図３は、データベースサーバ１１の処理手順の一例を示すフローチャートである。なお、一例は、クエリにデータの参照が含まれている場合の例である。
【００２４】
例えば、データベースサーバ１１は、キャッシュサーバ１０を介してアプリケーションサーバ１２より発信されたクエリを受信する（Ｓ１０１）。制御装置２１は、受信したクエリに含まれるＳＱＬ文を、ＳＱＬの構文規則とデータベース１６の定義情報に基づいて、解析する（Ｓ１０２）。制御装置２１は、解析後、クエリに対応する実行計画を作成する（Ｓ１０３）。制御装置２１は、例えば、クエリに対応する実行計画を複数作成しても良い。
【００２５】
制御装置２１は、作成した実行計画を実行し、記憶装置２２に記憶されたデータベース１６から実行計画に対応するデータを取得する（Ｓ１０４）。制御装置２１は、実行計画が複数ある場合は、その中から、最も効率よく短時間に処理が完了できる実行計画を選択して、実行しても良い。
【００２６】
制御装置２１は、得られたデータを基に、クエリに対する回答データを作成する（Ｓ１０５）。回答データは、例えば、表データであっても良い。
【００２７】
制御装置２１は、通信装置２３を制御し、クエリに対する応答として、作成した回答データと実行計画をキャッシュサーバ１０に送信する（Ｓ１０６）。
【００２８】
この場合、キャッシュサーバ１０に送信された回答データは、キャッシュサーバ１０からクエリ元であるアプリケーションサーバ１２に送信されることなる。制御装置２１は、Ｓ１０６の処理とともに、作成した回答データを直接アプリケーションサーバ１２に送信しても良い。
【００２９】
次に、キャッシュサーバ１０に関して説明する。図４は、第１実施形態に係るキャッシュサーバ１０のハードウェア構成例を示す。キャッシュサーバ１０は、制御装置３１、記憶装置３２、通信装置３３を有し、これらはシステムバス３４で相互に接続されている。
【００３０】
制御装置３１は、キャッシュサーバ１０を制御する装置である。制御装置３１は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等の電子回路が用いられても良い。制御装置３１は、記憶装置３２に格納されているＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、各種プログラムに基づいて、各種演算や各ハードウェア構成部とのデータ入出力等、キャッシュサーバ１０の動作を制御して、各種処理を実行する。プログラムの実行中に必要となる各種情報等は、例えば記憶装置３２から取得することができる。なお、制御装置３１が行なう処理の一部を専用のハードウェアを用いて実現しても良い。制御装置３１は、第１実施形態に係るプログラムに基づき、第１実施形態に係る処理を実行する。
【００３１】
記憶装置３２は、主記憶装置及び補助記憶装置を含んでも良い。主記憶装置は、例えば、制御装置３１に実行させるＯＳやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、主記憶装置は、制御装置３１による処理に必要な各種データを記憶する。なお、主記憶装置としては、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等を用いても良い。
【００３２】
補助記憶装置は、例えば、実行プログラムや、キャッシュサーバ１０に設けられた制御プログラム等を記憶する。補助記憶装置は、制御装置３１からの指示に基づいて、記憶された各種情報の読み出しや、書き込みを行うことができる。補助記憶装置としては、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等のストレージ等を用いても良い。補助記憶装置は、処理において使用する情報や処理の結果を記憶しても良い。また、主記憶装置と補助記憶装置は、互いの機能を担い合っても良い。
【００３３】
通信装置３３は、例えば、制御装置３１からの制御信号に基づき、図１に示す様に、ネットワーク１３を介して接続されたアプリケーションサーバ１２やデータベースサーバ１１との通信を行う。
【００３４】
以下、キャッシュサーバ１０の制御装置３１の具体的な動作を例示する。キャッシュサーバ１０は、実行計画キャッシュ１４とキャッシュデータベース１５とを有する。実行計画キャッシュ１４は、データベースサーバ１１で作成された各実行計画が、それぞれの元となるクエリと対応付けられて記憶されている。キャッシュサーバ１０は、データベースサーバ１１から実行計画と回答データとを受信する。キャッシュサーバ１０の制御装置３１は、受信した実行計画をクエリと対応付けて実行計画キャッシュ１４に記憶する。また、制御装置３１は、受信した回答データをキャッシュデータベース１５に記憶する。制御装置３１は、回答データをキャッシュデータベース１５に記憶させる際、データベースサーバ１１から受信したデータベース１６の一部の定義情報に基づいて、データベース１６の一部と同様の構成となるように、回答データを記憶させる。これにより、キャッシュデータベース１５は、データベースサーバ１１のデータベース１６の一部を再現したものとなる。
【００３５】
図５ａ、図５ｂを参照しながら、より具体的に説明する。図５ａは、データベース１６に含まれるテーブルの一例を示す図である。図５ｂは、キャッシュデータベース１５に含まれるテーブルの一例を示す図である。なお、データベース１６は、例えば、データをテーブル（表）形式によって管理されるＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  Ｄａｔｅｂａｓｅ）とする。
【００３６】
データベース１６には、テーブル５０が含まれているとする。例えば、キャッシュサーバ１０が、ａ１１、ａ１３、ａ１４、ａ３１、ａ３２、ａ３３、ａ３４、ａ４１、ａ４２、ａ４４のそれぞれのデータを、一又は複数の回答データとして、データベースサーバ１１から受信したとする。この場合、キャッシュサーバ１０は、キャッシュデータベース１５に含まれるテーブル５１にそれぞれのデータを記憶する。テーブル５１は、テーブル５０と同一のレコードであって同一のカラムのフィールドに同一のデータが記憶されており、テーブル５０の一部が再現されている。
【００３７】
図５ｃは、テーブルフィルタの一例を示す図である。キャッシュサーバ１０は、テーブル５１と対応付けてテーブルフィルタ５２を有しても良い。テーブルフィルタ５２は、テーブル５１においてデータが記憶されているフィールドと同一位置のテーブルフィルタ５２のフィールドに１を記憶し、テーブル５１においてデータが記憶されていないフィールドと同一位置のテーブルフィルタ５２のフィールドに０を記憶したものである。
【００３８】
制御装置３１は、テーブルフィルタ５２に基づいて、テーブル５１の各フィールドのデータの有無を判定することができる。例えば、テーブル５１の４行目のレコードの全部のデータが必要な場合、制御装置３１は、テーブルフィルタ５２の４行目のレコードの全部の値を乗算する。乗算の結果が０であれば、制御装置３１は、４行目のレコードの少なくとも一部のデータがテーブル５１にはないと判定できる。このように、制御装置３１は、乗算命令を用いて、高速にキャッシュデータベース１５に含まれるデータの利用可否を判断できる。
【００３９】
また、制御装置３１は、アプリケーションサーバ１２からデータベースサーバ１１への新たなクエリを受信すると、クエリに含まれているＳＱＬ文と、実行計画キャッシュ１４の実行計画のそれぞれに対応付けられているクエリ（以下、候補クエリと言う）に含まれるＳＱＬ文との比較を行い、クエリと内容が対応する候補クエリの有無を判定する。ここでの比較においては、クエリと候補クエリとは文字列として単純に取り扱われ、ＳＱＬに基づく構文解析まで行わないことに留意する。制御装置３１は、例えば、クエリに含まれているＳＱＬ文の文字列と候補クエリに含まれるＳＱＬ文の文字列とが一致する場合、それらが対応すると判定してもよい。文字列は、例えば、文字、数字、記号、スペースが含まれても良い。
【００４０】
クエリと内容が対応する候補クエリが検出された場合は、検出した候補クエリに対応付けられた実行計画を特定し、特定した実行計画を実行する。制御装置３１は、実行計画の実行により、キャッシュデータベース１５から回答データを作成し、クエリの応答として、データベースサーバ１１の代わりに、アプリケーションサーバ１２に回答データを送信する。
【００４１】
クエリと内容が対応する候補クエリが検出されない場合、制御装置３１は、受信したクエリを、データベースサーバ１１に送信する。
【００４２】
第１実施形態に係るキャッシュサーバ１０のクエリに対する処理手順の一例について説明する。図６は、キャッシュサーバ１０の処理手順の一例を示すフローチャートである。なお、一例は、クエリにデータの参照が含まれている場合の例である。
【００４３】
例えば、キャッシュサーバ１１は、アプリケーションサーバ１２より発信されたクエリを受信する（Ｓ２０１）。制御装置３１は、受信したクエリに含まれるＳＱＬ文と内容が対応する候補クエリの有無を判定する（Ｓ２０２）。
【００４４】
内容が対応する候補クエリが検出された場合（Ｓ２０２Ｙｅｓ）、制御装置３１は、記憶装置３２に記憶された実行計画キャッシュ１４から、内容が対応する候補クエリと対応付けられた実行計画を特定する（Ｓ２０３）。制御装置３１は、特定した実行計画に対応するデータが、キャッシュデータベース１５に存在するか否か判定する（Ｓ２０４）。
【００４５】
データが存在すると判定された場合（Ｓ２０４Ｙｅｓ）、制御装置３１は、特定した実行計画を実行し、記憶装置３２に記憶されたキャッシュデータベース１５から実行計画に対応するデータを取得する（Ｓ２０５）。
【００４６】
制御装置３１は、得られたデータに基づいて、クエリに対する回答データを作成する（Ｓ２０６）。回答データは、例えば、表データであっても良い。制御装置３１は、クエリに対する応答として、作成した回答データをアプリケーションサーバ１２に送信する（Ｓ２０７）。
【００４７】
内容が対応する候補クエリが検出されない場合（Ｓ２０２Ｎｏ）、制御装置３１は、クエリをデータベースサーバ１１に送信する（Ｓ２０８）。また、データが存在しないと判定された場合も（Ｓ２０４Ｎｏ）、制御装置３１は、クエリをデータベースサーバ１１に送信する（Ｓ２０８）。これらの場合、上述した通りに、データベースサーバ１１にて各処理が実行され、キャッシュサーバ１０は、データベースサーバ１１で作成された回答データと実行計画とを受信する。
【００４８】
以上より、キャッシュサーバ１０は、アプリケーションサーバ１２からのクエリに対して、データベースサーバ１１に処理をさせずに、応答する場合がある。これによりデータベースサーバ１１の処理負荷は低減される。また、キャッシュサーバ１０は、クエリに含まれるＳＱＬ文の比較により候補クエリを特定するため、キャッシュサーバ１０及びデータベースサーバ１１においてＳＱＬ文の構文解析と実行計画の作成を行わずに、アプリケーションサーバ１２からの新たなクエリに対して応答することを可能にしている。
【００４９】
次に、第１実施形態に係るキャッシュサーバ１０のキャッシュデータベース１５への記憶の処理手順の一例について説明する。図７は、キャッシュサーバ１０のキャッシュデータベース１５への記憶の処理手順の一例を示すフローチャートである。
【００５０】
例えば、キャッシュサーバ１０は、データベースサーバ１１より実行計画と回答データとを受信する（Ｓ３０１）。制御装置３１は、受信した実行計画と実行計画キャッシュ１４の空き容量とを比較し、受信した実行計画に対して実行計画キャッシュ１４の空き容量が十分か不足かを判定する（Ｓ３０２）。
【００５１】
実行計画キャッシュ１４の空き容量が十分と判定された場合（Ｓ３０２Ｙｅｓ）、制御装置３１は、受信した実行計画を実行計画キャッシュ１４に記憶する（Ｓ３０３）。
【００５２】
実行計画キャッシュ１４の空き容量が不足と判定された場合（Ｓ３０２Ｎｏ）、制御装置３１は、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）方式により、受信した実行計画と、実行計画キャッシュ１４に記憶された実行計画のうち使用されたのが最も古い実行計画とを置換して、受信した実行計画を実行計画キャッシュ１４に記憶する（Ｓ３０６）。
【００５３】
Ｓ３０３とＳ３０６のいずれかの処理の後、制御装置３１は、受信した回答データとキャッシュデータベース１５の空き容量とを比較し、受信した回答データに対してキャッシュデータベース１５の空き容量が十分か不足かを判定する（Ｓ３０４）。
【００５４】
キャッシュデータベース１５の空き容量が十分と判定された場合（Ｓ３０４Ｙｅｓ）、制御装置３１は、受信した回答データをキャッシュデータベース１５に記憶する（Ｓ３０５）。
【００５５】
キャッシュデータベース１５の空き容量が不足と判定された場合（Ｓ３０４Ｎｏ）、制御装置３１は、キャッシュデータベース１５に記憶されているデータの被参照数カウンタが０であるデータを特定し、キャッシュデータベース１５から特定されたデータを削除する（Ｓ３０７）。制御装置３１は、Ｓ３０７の処理の後、Ｓ３０４の処理を実行する。
【００５６】
被参照数カウンタとは、例えば、キャッシュデータベース１５に記憶されている個々のデータ毎に、それぞれのデータを参照する、実行計画キャッシュ１４に記憶された実行計画の数を示す情報である。具体的には、キャッシュデータベース１５に記憶されている被参照数カウンタが５の第１のデータは、実行計画キャッシュ１４に記憶された５つの実行計画により参照されていることになる。つまり、制御装置３１は、その５つの実行計画のいずれかを実行すると、キャッシュデータベース１５から少なくとも第１のデータを取得することになる。
【００５７】
被参照カウンタは、個々のデータ毎であることを例示したが、これに限られるものではなく、例えば、キャッシュデータベース１５に記憶されたテーブル毎に、参照する実行計画をカウントしたものであっても良い。
【００５８】
なお、Ｓ３０７の処理において、被参照数カウンタが０であるデータがない場合、制御装置３１は、いずれかのデータの被参照数カウンタが０になるまで、実行計画キャッシュ１４に記憶された実行計画のうち使用されたのが最も古い実行計画を削除するようにしても良い。
【００５９】
また、Ｓ３０６の処理において、ＬＲＵ方式であることを例示したが、これに限られるものではなく、制御装置３１は、ＬＦＵ（Ｌｅａｓｔ  Ｆｒｅｒｕｅｎｔｌｙ  Ｕｓｅｄ）方式により、受信した実行計画と最も使用頻度が低い実行計画とを置換するようにしても良い。
【００６０】
以上、第１実施形態によれば、キャッシュサーバ１０は、アプリケーションサーバ１２からのクエリに対して、データベースサーバ１１に処理を実行させずに、応答することができるため、データベースサーバ１１の処理負荷を低減することができる。
【００６１】
また、キャッシュサーバ１０は、受信したクエリに含まれるＳＱＬ文を構文解析することなく、実行計画を特定することができるため、ＳＱＬ文の構文解析や実行計画作成に係る処理負荷や処理時間を省くことができる。
【００６２】
また、キャッシュサーバ１０は、実行計画キャッシュ１４と、データベース１６の一部を再現したキャッシュデータベース１５とを有するため、実行計画の実行により所望のデータを取得することができる。キャッシュデータベース１５が、データベース１６の一部を再現したデータ構造であるため、例えば、クエリ又は実行計画とキャッシュデータ（回答データ）とを１対１で対応付けて保持するデータ構造と比べて、キャッシュデータの重複を抑制することができ、データ容量を低減することができる。
【００６３】
（第２実施形態）
次に、第２実施形態について説明する。第２実施形態に係るキャッシュサーバ１０のハードウェア構成は、第１実施形態に係るキャッシュサーバ１０と同一であっても良いため、説明を省略する。
【００６４】
以下、第２実施形態に係るキャッシュサーバ１０の具体的な動作を例示する。キャッシュサーバ１０の制御装置３１は、アプリケーションサーバ１２から新たなクエリを受信した場合、クエリに含まれるＳＱＬ文を正規化する。図８は、ＳＱＬ文の正規化の一例を示す図である。正規化とは、例えば、ＳＱＬ文に含まれるスペースやコメントを削除すること、所定の規則に従って文字列の順序を変更すること、が挙げられる。
【００６５】
制御装置３１は、正規化後のクエリと実行計画キャッシュ１４の実行計画のそれぞれに対応付けられている候補クエリとの比較を行い、正規化後のクエリと内容が対応する候補クエリの有無を判定する。この場合、候補クエリについても予め正規化がされていても良いし、比較処理を実行する際に候補クエリを正規化してから比較しても良い。
【００６６】
正規化後のクエリと内容が対応する候補クエリが検出された場合は、検出した候補クエリに対応付けられた実行計画を特定し、特定した実行計画を実行する。制御装置３１は、実行計画の実行により、キャッシュデータベース１５から回答データを作成し、クエリの応答として、データベースサーバ１１の代わりに、アプリケーションサーバ１２に回答データを送信する。
【００６７】
正規化後のクエリと内容が対応する候補クエリが検出されない場合、制御装置３１は、受信したクエリを、データベースサーバ１１に送信する。
【００６８】
第２実施形態に係るキャッシュサーバ１０のクエリに対する処理手順の一例について説明する。図９は、キャッシュサーバ１０の処理手順の一例を示すフローチャートである。なお、一例は、クエリにデータの参照が含まれている場合の例である。
【００６９】
例えば、キャッシュサーバ１１は、アプリケーションサーバ１２より発信されたクエリを受信する（Ｓ４０１）。制御装置３１は、受信したクエリに含まれるＳＱＬ文を正規化する（Ｓ４０２）。制御装置３１は、正規化されたクエリと内容が対応する候補クエリの有無を判定する（Ｓ４０３）。
【００７０】
内容が対応する候補クエリが検出された場合（Ｓ４０３Ｙｅｓ）、制御装置３１は、Ｓ２０３以降の処理を実行する。
【００７１】
内容が対応する候補クエリが検出されない場合（Ｓ４０３Ｎｏ）、制御装置３１は、Ｓ２０８の処理を実行する。また、データが存在しないと判定された場合も（Ｓ２０４Ｎｏ）、制御装置３１は、クエリをデータベースサーバ１１に送信する（Ｓ２０８）。これらの場合、上述した通りに、データベースサーバ１１にて各処理が実行され、キャッシュサーバ１０は、データベースサーバ１１で作成された回答データと実行計画とを受信する。
【００７２】
第２実施形態によれば、キャッシュサーバ１０は、アプリケーションサーバ１２からのクエリに対して、キャッシュのヒット率を向上させることができる。つまり、キャッシュサーバ１０は、ＳＱＬ文の正規化を実行することにより、例えば、記載されたＳＱＬ文の文字列にスペースやコメントによる差異がある場合であっても、他の記載が一致するキャッシュされたＳＬＱ文である候補クエリを特定することができる。
【００７３】
（第３実施形態）
次に、第３実施形態について説明する。第３実施形態に係るデータベースサーバ１１のハードウェア構成は、第１実施形態に係るデータベースサーバ１１と同一であっても良いため、説明を省略する。
【００７４】
以下、第３実施形態に係るキャッシュサーバ１０の具体的な動作を例示する。データベースサーバ１１は、アプリケーションサーバ１２から直接的に、若しくはキャッシュサーバ１０を経由して間接的に、データの更新に関するクエリを受信する。データの更新は、例えば、データの更新、追加、削除を含んでも良い。ＳＱＬにおいては、データの更新はＵＰＤＡＴＥ文、追加はＩＮＳＥＲＴ文、削除はＤＥＬＥＴＥ文がそれぞれ対応する。
【００７５】
データベースサーバ１１の制御装置２１は、受信したクエリに含まれるＳＱＬ文を解析し、データベース１６の定義情報に基づいて、受信したクエリに対応する実行計画を作成する。制御装置２１は、作成した実行計画を実行し、データベース１６に含まれるデータの更新を行う。
【００７６】
制御装置２１は、データベース１６に含まれるデータのうちキャッシュデータベース１５に記憶されているデータを記録したキャッシュ管理情報を参照し、更新されたデータがキャッシュデータベース１５に影響するものであるか判定する。
【００７７】
更新処理がキャッシュデータベース１５に影響する場合、制御装置２１は、キャッシュサーバ１０に対して、キャッシュデータベース１５の更新を指示する。
【００７８】
次に、第３実施形態に係るデータベースサーバ１１の更新に関する処理手順の一例について説明する。図１０は、データベースサーバ１１の更新に関する処理手順の一例を示すフローチャートである。なお、一例は、クエリにデータの更新が含まれている場合の例である。
【００７９】
例えば、データベースサーバ１１は、キャッシュサーバ１０を介してアプリケーションサーバ１２より発信された更新に関するクエリを受信する（Ｓ５０１）。制御装置２１は、受信したクエリに含まれるＳＱＬ文を、データベース１６の定義情報に基づいて、解析し、クエリに対応する実行計画を作成する（Ｓ５０２）。
【００８０】
制御装置２１は、作成した実行計画を実行し、記憶装置２２に記憶されたデータベース１６に含まれるデータを更新する（Ｓ５０３）。制御装置２１は、データベース１６の更新の処理が、キャッシュサーバ１０のキャッシュデータベース１５に影響するか否かを判定する（Ｓ５０４）。
【００８１】
キャッシュデータベース１５に影響する場合（Ｓ５０４Ｙｅｓ）、制御装置２１は、キャッシュサーバ１０に対して、同じデータの更新処理をキャッシュデータベース１５に実行するように、指示を送信する（Ｓ５０５）。制御装置２１は、キャッシュデータベース１５より更新が完了した旨の通知を受信したかを判定する（Ｓ５０６）。
【００８２】
完了通知を受信した場合（Ｓ５０６Ｙｅｓ）、制御装置２１は、通信装置２３を制御し、クエリに対して、更新完了の応答をキャッシュサーバ１０に送信する（Ｓ５０７）。
【００８３】
完了通知を受信しない場合（Ｓ５０６Ｎｏ）、制御装置２１は、キャッシュサーバ１０より完了通知を受信するまで待機する。
【００８４】
キャッシュデータベース１５に影響しない場合（Ｓ５０４Ｎｏ）、制御装置２１は、通信装置２３を制御し、クエリに対して、更新完了の応答をキャッシュサーバ１０に送信する（Ｓ５０７）。
【００８５】
なお、データベースサーバ１１は、キャッシュサーバ１０が複数ある場合は、すべてのキャッシュサーバ１０からの完了通知を受信するまで、クエリに対する応答を行わないようにしても良い。
【００８６】
第３実施形態によれば、データベース１６に対するデータの更新に関するクエリがあった際に、データベースサーバ１１は、キャッシュデータベース１５のデータの更新処理が完了するまで、クエリに対する更新処理完了の応答をしないため、データベース１６とキャッシュデータベース１５との間でデータが齟齬することを防止することができる。
【００８７】
また、データベース１６の更新処理が、例えば、あるテーブルにカラムを追加するといったテーブルの定義を変更するような更新である場合、データベースサーバ１１は、キャッシュサーバ１０に、実行計画キャッシュ１４に記憶された実行計画のうち、更新処理に影響される実行計画について削除するように指示しても良い。
【００８８】
この場合、キャッシュサーバ１０は、更新内容をデータベースサーバ１１から受信し、実行計画キャッシュ１４から更新処理により更新されるデータを参照する実行計画を特定し、特定した実行計画を削除しても良い。
【００８９】
また、データベースサーバ１１は、実行計画キャッシュ１４に記憶された更新処理に影響される実行計画について、更新後のデータベース１６に応じて、最新の実行計画を作成し、最新の実行計画をキャッシュサーバ１０に送信しても良い。
【００９０】
本発明は、上述した各実施形態の構成及び手順に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜処理方法の変更、組み換え等が可能である。
【符号の説明】
【００９１】
１０：キャッシュサーバ
１１：データベースサーバ
１２：アプリケーションサーバ
１３：ネットワーク
１４：実行計画キャッシュ
１５：キャッシュデータベース
１６：データベース
２１：制御装置
２２：記憶装置
２３：通信装置
２４：システムバス
３１：制御装置
３２：記憶装置
３３：通信装置
３４：システムバス
５０：テーブル
５１：テーブル
５２：テーブルフィルタ 
【図１】
2019040245.tif 000003
【図２】
2019040245.tif 000004
【図３】
2019040245.tif 000005
【図４】
2019040245.tif 000006
【図５】
2019040245.tif 000007
【図６】
2019040245.tif 000008
【図７】
2019040245.tif 000009
【図８】
2019040245.tif 000010
【図９】
2019040245.tif 000011
【図１０】
2019040245.tif 000012