(57)【要約】【課題】関数の呼ばれやすさの優先度を評価し、優先度に応じてオブジェクトをキャッシュメモリおよび主記憶装置に保持させることができるデータベース装置およびデータベース装置の制御方法を提供する。【解決手段】本発明の一実施形態に係るデータベース装置１０は、優先度付与部３３および最適化部３７を備える。優先度付与部３３は、記憶装置１３にソースが記憶された複数の関数のそれぞれに対し、各関数の呼び出されやすさに応じた優先度を付与する。最適化部３７は、複数の関数のうち優先度が上から第１の所定数の関数の構文解析結果を記憶装置１３よりもアクセス速度が速いキャッシュメモリ１５に格納する。また、最適化部３７は、優先度が上から第２の所定数の関数の構文解析結果を記憶装置１３に格納する。【選択図】  図１
2013239038.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置にソースが記憶された複数の関数のそれぞれに対し、各関数の呼び出されやすさに応じた優先度を付与する優先度付与部と、
前記複数の関数のうち前記優先度が上から第１の所定数の関数の構文解析結果を前記記憶装置よりもアクセス速度が速いキャッシュメモリに格納するとともに、前記優先度が上から第２の所定数の関数の構文解析結果を前記記憶装置に格納する最適化部と、
を備えたデータベース装置。
【請求項２】
前記優先度付与部、前記最適化部および前記キャッシュメモリを有するデータベースサーバを備え、
前記記憶装置は、不揮発性の記憶媒体であり、
前記最適化部は、
前記データベースサーバの起動時に、前記複数の関数のうち前記優先度が上から前記第１の所定数の関数の構文解析結果を前記キャッシュメモリに格納するとともに、前記優先度が上から前記第２の所定数の関数の構文解析結果を前記記憶装置に格納する、
請求項１記載のデータベース装置。
【請求項３】
前記優先度付与部は、
前記複数の関数のソースを構文解析することにより、各関数が呼び出される回数の期待値を求め、この各関数が呼び出される回数の期待値を前記記憶装置の呼出期待値テーブルに格納し、
前記最適化部は、
前記呼出期待値テーブルにもとづいて、前記呼び出される回数の期待値が上から前記第１の所定数の関数の構文解析結果を前記キャッシュメモリに格納するとともに、前記呼び出される回数の期待値が上から第２の所定数の関数の構文解析結果を前記記憶装置に格納する、
請求項１または２に記載のデータベース装置。
【請求項４】
前記優先度付与部は、
前記記憶装置に記憶された複数の関数のソースを構文解析することにより、各関数が他の関数から直接呼び出される場合および他の関数からさらに他の関数を介して間接的に呼び出される場合を考慮して前記呼び出される回数の期待値を求め、この期待値を前記呼出期待値テーブルに格納する、
請求項３記載のデータベース装置。
【請求項５】
前記記憶装置に記憶された複数の関数のソースを構文解析することにより、前記複数の関数のそれぞれについて、関数が実行された際に直接呼び出される確率である直接呼出確率を、直接呼び出される関数ごとに求める直接確率算出部、
をさらに備え、
前記優先度付与部は、
前記複数の関数のそれぞれの前記直接呼出確率にもとづいて前記呼び出される回数の期待値を求め、この期待値を前記呼出期待値テーブルに格納する、
請求項３または４に記載のデータベース装置。
【請求項６】
記憶装置に記憶された複数の関数のそれぞれに対し、他の関数からの呼び出されやすさを考慮した優先度を付与するステップと、
前記複数の関数のうち、前記優先度が上から第１の所定数の関数の構文解析結果を、前記記憶装置よりもアクセス速度が速いキャッシュメモリに格納するステップと、
前記複数の関数のうち、前記優先度が上から第２の所定数の関数の構文解析結果を、前記記憶装置に格納するステップと、
を有するデータベース装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データベース装置およびデータベース装置の制御方法に関する。
【背景技術】
【０００２】
不揮発性の記憶装置と、この記憶装置よりもアクセスに要する時間が短いキャッシュメモリと、を有するデータベース装置には、記憶装置に複数の関数を登録しておき、ユーザが操作する端末からの要求に応じて関数の実行処理をデータベース装置で一括処理するものがある。この種のデータベース装置では、記憶装置に登録された関数（以下、Stored関数という）のうちユーザから呼び出された関数のオブジェクト（関数のソース（文字列）をコンパイルして構文解析した結果）をキャッシュメモリ上に展開して実行可能な状態にするまでの時間を短縮する（実行時の速度を向上させる）ことが好ましい。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−１６３３０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
Stored関数を利用可能なデータベース管理システム（ＤＢＭＳ：Data Base Management System）における関数の保持方法には、大きく次の２つがある。
【０００５】
第１の方法は、Ｏｒａｃｌｅ  ＰＬ／ＳＱＬなどで用いられる関数の保持方法である。この方法では、関数が記憶装置に登録される際に、関数のソースのほか、この関数のオブジェクト（構文解析結果）もあわせて記憶装置に保持する。また、ユーザに関数が呼び出されるたびに、呼び出された関数のオブジェクトをキャッシュメモリに保持する。
【０００６】
しかし、この方法では、キャッシュメモリに保持されたオブジェクトが不足している場合（特に、データベース装置の起動後であってユーザからの最初の関数呼出し命令を受けるまでの期間は、キャッシュメモリには保持されたオブジェクトが無い）には、ユーザにより呼び出された関数のオブジェクトを記憶装置からキャッシュメモリに複製するまでの時間が必要となり、関数の実行時の速度が低下してしまう。また、記憶装置は登録された全ての関数のオブジェクトを保持するため、記憶装置の記憶容量を多く消費してしまう。記憶容量の消費は、特に記憶装置がＳＳＤ（Solid State Drive）で構成される場合や、データベース装置がいわゆる組み込み機器に備えられる場合など、記憶装置の記憶容量が小さい場合に大きな問題となる。
【０００７】
第２の方法は、ＰｏｓｔｇｒｅＳＱＬ  ＰＬｐｇ／ＳＱＬなどで用いられる関数の保持方法である。この方法では、関数が記憶装置に登録される際に、記憶装置はソースのみを保持しオブジェクト（構文解析結果）は保持しないようになっているため、記憶装置の記憶容量を圧迫しない一方、第１の方法と同様にユーザに関数が呼び出されるたびに呼び出された関数のオブジェクトをキャッシュメモリに保持するようになっている。
【０００８】
しかし、この方法でもやはりキャッシュメモリに保持されたオブジェクトが不足している場合には、関数の実行時の速度が低下してしまう。さらに、記憶装置にオブジェクトが保持されていないため、ユーザにより呼び出された関数のオブジェクトがキャッシュメモリに保持されていない場合は、記憶装置に記憶された関数のソースからオブジェクトを生成した後にこのオブジェクトをキャッシュメモリに与えるという手間が必要となり、実行時の速度が低下してしまう。
【課題を解決するための手段】
【０００９】
本発明の一実施形態に係るデータベース装置は、上述した課題を解決するために、優先度付与部および最適化部を備える。優先度付与部は、記憶装置にソースが記憶された複数の関数のそれぞれに対し、各関数の呼び出されやすさに応じた優先度を付与する。最適化部は、複数の関数のうち優先度が上から第１の所定数の関数の構文解析結果を記憶装置よりもアクセス速度が速いキャッシュメモリに格納する。また、最適化部は、優先度が上から第２の所定数の関数の構文解析結果を記憶装置に格納する。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施形態に係るデータベース装置の一例を示す全体構成図。
【図２】記憶装置に記憶されるオブジェクトの所要記憶容量と関数を実行可能な状態にするまでにかかる時間との関係の一例を示す説明図。
【図３】図１に示すデータベースサーバの制御部によるデータベースサーバの稼働中の概略的な動作手順を示すフローチャート。
【図４】図３のステップＳ３で実行される関数登録処理に係る構成を示すブロック図。
【図５】図３のステップＳ３で実行される関数登録処理の手順を示すサブルーチンフローチャート。
【図６】図３のステップＳ５で実行される関数削除処理に係る構成を示すブロック図。
【図７】図３のステップＳ５で実行される関数削除処理の手順を示すサブルーチンフローチャート。
【図８】図３のステップＳ７で実行される関数実行処理に係る構成を示すブロック図。
【図９】図３のステップＳ７で実行される関数実行処理の手順を示すサブルーチンフローチャート。
【図１０】キャッシュオブジェクトテーブルの最適化処理に係る構成を示すブロック図。
【図１１】キャッシュオブジェクトテーブルの最適化処理の手順を示すフローチャート。
【図１２】関数登録指示のＳＱＬ文に含まれる関数のソースの一例を示す説明図。
【図１３】図１２に示す関数のソースから直接呼出確率を求める過程の一例を示す説明図。
【図１４】（ａ）は、直接呼出確率テーブルの一例を示す説明図、（ｂ）は直接呼出確率テーブルの他の例を示す説明図。
【図１５】ルールベースの方法により設定された分岐確率の一例を示す説明図。
【図１６】統計ベースの方法において用いられるソースコードの一例を示す説明図。
【図１７】入れ子を考慮しない場合における、直接呼出確率にもとづいて呼出期待値を求める様子の一例を示す説明図。
【図１８】入れ子を考慮しない場合における、関数登録時の呼出期待値算出アルゴリズムの一例を示す説明図。
【図１９】入れ子を考慮しない場合における、関数削除時の呼出期待値算出アルゴリズムの一例を示す説明図。
【図２０】入れ子を考慮する場合における、直接呼出確率にもとづいて呼出期待値を求める様子の一例を示す説明図。
【図２１】関数が複数の経路で呼び出される場合において、複数の経路の各確率のうち最大の確率を直接呼出確率として近似するためのアルゴリズムの一例を示す説明図。
【図２２】入れ子を考慮する場合における、関数登録時の呼出期待値算出アルゴリズムの一例を示す説明図。
【図２３】入れ子を考慮する場合における、関数削除時の呼出期待値算出アルゴリズムの一例を示す説明図。
【発明を実施するための形態】
【００１１】
本発明に係るデータベース装置およびデータベース装置の制御方法の実施の形態について、添付図面を参照して説明する。
【００１２】
（１．概略的な全体構成および概略的な全体動作）
まず、本実施形態に係るデータベース装置の概略的な全体構成および概略的な動作について説明する。なお、本項ではデータベース装置の稼動中における概略的な動作について説明する。データベース装置の再起動時の動作については別項にて説明する。
【００１３】
図１は、本発明の一実施形態に係るデータベース装置１０の一例を示す全体構成図である。また、図２は、記憶装置１３に記憶されるオブジェクトの所要記憶容量と関数を実行可能な状態にするまでにかかる時間との関係の一例を示す説明図である。
【００１４】
図１に示すように、データベース装置１０は、ＤＢＭＳとして機能するデータベースサーバ１１、操作端末１２および不揮発性の記憶装置１３を有する。データベースサーバ１１は、制御部１４およびキャッシュメモリ１５を有する。
【００１５】
ここで、本実施形態に係るデータベース装置１０の作用について簡単に説明しておく。Stored関数を利用可能なＤＢＭＳにおける関数の保持方法のうち、第１の方法（たとえばＯｒａｃｌｅ  ＰＬ／ＳＱＬなどで用いられる関数の保持方法）では、関数が記憶装置１３に登録される際に、関数のソース（文字列）およびオブジェクト（構文解析結果）が記憶装置１３に格納される。
【００１６】
この第１の方法では、全ての関数のオブジェクトが記憶装置１３に格納されているため、関数が呼び出された際にコンパイルする手間を省くことができる。このため、図２に示すように、関数のオブジェクトをキャッシュメモリ１５上に展開するまでの時間（関数を実行可能な状態にするまでの時間）を短縮する（実行時の速度を向上させる）ことができる。しかし、第１の方法では記憶装置１３に記憶されるオブジェクトの所要記憶容量が多くなってしまう。
【００１７】
一方、第２の方法（たとえばＰｏｓｔｇｒｅＳＱＬ  ＰＬｐｇ／ＳＱＬなどで用いられる関数の保持方法）では、関数が記憶装置１３に登録される際に、記憶装置１３はソースのみを保持しオブジェクト（構文解析結果）は保持しないようになっている。
【００１８】
この第２の方法では、図２に示すように、記憶装置１３の記憶容量を圧迫しないものの、記憶装置１３にはオブジェクトが保持されない。このため、ユーザにより呼び出された関数のオブジェクトがキャッシュメモリ１５に保持されていない場合は、記憶装置１３に記憶された関数のソースからオブジェクトを生成する手間と、このオブジェクトをキャッシュメモリ１５に与える手間とが必要となってしまう。したがって、関数のオブジェクトをキャッシュメモリ１５上に展開するまでの時間（関数を実行可能な状態にするまでの時間）が増加（実行時の速度が低下）してしまう。
【００１９】
実行時の速度向上と記憶装置１３に記憶されるオブジェクトの所要記憶容量の削減とを同時に達成する方法としては、記憶装置１３に格納するオブジェクトおよびキャッシュメモリ１５に格納するオブジェクトを厳選することが考えられる。
【００２０】
たとえば、記憶装置１３にソースが登録された全ての関数から所定数の関数をランダムに抽出する場合には、記憶装置１３に記憶されるオブジェクトの所要記憶容量と実行速度との関係は図２に破線で示した直線となることが予想される。また、関数の呼出確率に偏りがある場合には、この関係は図２に実線で示した曲線となることが予想される。
【００２１】
そこで、本実施形態に係るデータベース装置１０は、確率的な情報にもとづいて関数の呼び出されやすさ（関数の優先度）を評価し、呼び出されやすい関数のオブジェクトのみを記憶装置１３およびキャッシュメモリ１５に格納する。
【００２２】
確率的な情報としては、たとえば関数の中で他の関数が呼び出される確率を用いるとよい。以下の説明では、この確率を関数のソースを構文解析することで求め、この確率にもとづいて関数の呼び出されやすさ（関数の優先度）を評価する場合の例について示す。
【００２３】
また、データベースサーバ１１の再起動時には、キャッシュメモリ１５の記憶内容が一度揮発してしまう。このため、本実施形態に係るデータベース装置１０は、データベースサーバ１１の起動時に、呼び出されやすい関数のオブジェクトをキャッシュメモリ１５に格納することで、ユーザからの操作端末１２を介した関数の呼び出し要求に備える。
【００２４】
操作端末１２は、パーソナルコンピュータなどの一般的な情報処理装置により構成され、入力部および表示部を有し、入力部を介して受け付けたユーザによる操作内容をデータベースサーバ１１に与えるとともに、データベースサーバ１１から受けた情報を、表示部を介してユーザに提示する。
【００２５】
記憶装置１３は、磁気的もしくは光学的記録媒体または半導体メモリなどの、ＣＰＵにより読み取り可能な記録媒体を含んだ構成を有し、記憶装置１３に格納されるプログラムおよびデータの一部は電子ネットワークを介してダウンロードされるように構成してもよい。記憶装置１３は、呼出期待値テーブル２１、ディスクオブジェクトテーブル２２およびソーステーブル２３を記憶する。
【００２６】
データベースサーバ１１の制御部１４は、ＣＰＵなどの演算処理装置により構成され、記憶装置１３などの記憶媒体に記憶された最適化プログラムに従って、関数の呼ばれやすさの優先度を評価し、優先度に応じてオブジェクトを記憶装置１３およびキャッシュメモリ１５に保持させる。
【００２７】
図１に示すように、制御部１４は、最適化プログラムによって少なくともＳＱＬ文解析部３１、構文解析部３２、優先度付与部３３、削除部３４、実行部３５、ＬＲＵ部３６および最適化部３７として機能する。また、構文解析部３２は、コンパイラ３８および直接確率算出部３９を有する。この各部３１〜３９は、ＣＰＵなどの演算処理装置を用いることなく回路などのハードウエアロジックによって構成してもよい。
【００２８】
データベースサーバ１１のキャッシュメモリ１５は、半導体メモリなどのＣＰＵにより読み取り可能な記録媒体を含んだ構成を有する。キャッシュメモリ１５は、制御部１４によるアクセス速度が記憶装置１３よりも速い揮発性の記憶媒体である。キャッシュメモリ１５は、直接呼出確率テーブル４１およびキャッシュオブジェクトテーブル４２を記憶する。
【００２９】
図３は、図１に示すデータベースサーバ１１の制御部１４によるデータベースサーバ１１の稼働中の概略的な動作手順を示すフローチャートである。図３において、Ｓに数字を付した符号は、フローチャートの各ステップを示す。
【００３０】
この手順は、データベースサーバ１１の起動後、呼出期待値テーブル２１にもとづいてキャッシュメモリ１５のキャッシュオブジェクトテーブル４２に呼び出されやすい関数のオブジェクトが格納された後、操作端末１２等からデータベースサーバ１１がＳＱＬ文を受けた時点でスタートとなる。なお、データベースサーバ１１の起動後に呼出期待値テーブル２１にもとづいてキャッシュオブジェクトテーブル４２に呼び出されやすい関数のオブジェクトを格納する手順については、図１１を用いて後述する。
【００３１】
まず、ステップＳ１において、ＳＱＬ文解析部３１は、操作端末１２等から受けたＳＱＬ文を解析する。
【００３２】
次に、ステップＳ２において、ＳＱＬ文解析部３１は、ＳＱＬ文の内容が関数の登録を求めるものか否かを判定する。関数登録の場合はステップＳ３に進み、関数登録でない場合はステップＳ４に進む。
【００３３】
次に、ステップＳ３において、制御部１４は関数登録処理を行って一連の手順は終了となる。
【００３４】
一方、ステップＳ２において関数登録でないと判定された場合は、ステップＳ４において、ＳＱＬ文解析部３１は、ＳＱＬ文の内容が関数の削除を求めるものか否かを判定する。関数削除の場合はステップＳ５に進み、関数削除でない場合はステップＳ６に進む。
【００３５】
次に、ステップＳ５において、制御部１４は関数削除処理を行って一連の手順は終了となる。
【００３６】
一方、ステップＳ４において関数削除でないと判定された場合は、ステップＳ６において、ＳＱＬ文解析部３１は、ＳＱＬ文の内容が関数の呼び出し（実行）を求めるものか否かを判定する。関数実行の場合はステップＳ７に進み、関数実行でない場合はステップＳ８に進む。
【００３７】
次に、ステップＳ７において、制御部１４は関数実行処理を行って一連の手順は終了となる。他方、ステップＳ８において、制御部１４は、ＳＱＬ文の内容に応じた処理を実行する。
【００３８】
（２．関数登録処理に係る構成および動作）
図４は、図３のステップＳ３で実行される関数登録処理に係る構成を示すブロック図である。また、図５は、図３のステップＳ３で実行される関数登録処理の手順を示すサブルーチンフローチャートである。
【００３９】
図５に示す手順は、図３のステップＳ２で操作端末１２からデータベースサーバ１１に入力されたＳＱＬ文が関数登録指示であると判定されてスタートとなる。なお、以下の説明において、記憶装置１３にすでにｎ−１個の関数が登録されているとともにＳＱＬ文の内容が関数ｆｎの登録要求であり、ＳＱＬ文に関数ｆｎの名称および関数ｆｎのソースＳｎが含まれる場合の例について示す。
【００４０】
ステップＳ３１において、構文解析部３２のコンパイラ３８は、関数ｆｎのソースＳｎを構文解析することによりオブジェクトＯｎを生成する。また、構文解析部３２の直接確率算出部３９は、ソースＳｎを構文解析することにより関数ｆｎの中で他の関数ｆ１〜ｆｎ−１が直接呼び出される確率を算出する。この確率の算出は、オブジェクトＯｎの生成と同時並行的に行ってもよい。
【００４１】
次に、ステップＳ３２において、直接確率算出部３９は、関数ｆｎの中で他の関数ｆ１〜ｆｎ−１が直接呼び出される確率をキャッシュメモリ１５の直接呼出確率テーブル４１に格納する。この結果、直接呼出確率テーブル４１には、記憶装置１３にソースが記憶された全ての関数のそれぞれの中で他の関数が直接呼び出される確率（以下、直接呼出確率という）が格納される。
【００４２】
次に、ステップＳ３３において、コンパイラ３８は、オブジェクトＯｎをキャッシュメモリ１５のキャッシュオブジェクトテーブル４２に格納する。
【００４３】
次に、ステップＳ３４において、構文解析部３２は、関数ｆｎの名称と関数ｆｎのソースＳｎとを関連付けて、記憶装置１３のソーステーブル２３に格納する。
【００４４】
次に、ステップＳ３５において、優先度付与部３３は、記憶装置１３にソースが登録された複数の関数のそれぞれに対し、各関数の呼び出されやすさ（呼び出される確率）に応じた優先度を付与する。具体的には、優先度付与部３３は、キャッシュメモリ１５の直接呼出確率テーブル４１に記憶された直接呼出確率にもとづいて、各関数の呼出期待値を算出する。ここで、呼出期待値とは、各関数を１回ずつ呼び出した場合において、他の関数から直接呼び出される場合を含めて各関数が呼び出される回数の期待値をいうものとする。
【００４５】
そして、優先度付与部３３は、呼出期待値テーブル２１に格納された呼出期待値を、新たに算出した呼出期待値で更新する。
【００４６】
次に、ステップＳ３６において、最適化部３７は、呼出期待値テーブル２１にもとづいて、呼出期待値が最高（優先度が最高）の関数から、呼出期待値順に上から所定数の関数のオブジェクトをディスクオブジェクトテーブル２２に格納して、一連の手順は終了となる。このとき、ディスクオブジェクトテーブル２２には、呼出期待値順にオブジェクトを並べて格納してもよいし、各オブジェクトと各オブジェクトの呼出期待値の順位の情報とを関連付けて格納してもよい。
【００４７】
なお、所定数の関数のうち、オブジェクトがディスクオブジェクトテーブル２２およびキャッシュオブジェクトテーブル４２のいずれにも無い場合には、最適化部３７は、コンパイラ３８に対して対象となる関数のソースをソーステーブル２３から読み出してオブジェクトを生成するよう指示する。
【００４８】
以上の手順により、関数が新規に登録されるごとに、直接呼出確率および呼出期待値を更新することができるとともに、更新された呼出期待値に応じてディスクオブジェクトテーブル２２を更新することができる。
【００４９】
（３．関数削除処理に係る構成および動作）
図６は、図３のステップＳ５で実行される関数削除処理に係る構成を示すブロック図である。また、図７は、図３のステップＳ５で実行される関数削除処理の手順を示すサブルーチンフローチャートである。なお、図７において、図５と同等のステップには同一符号を付し、重複する説明を省略する。
【００５０】
図７に示す手順は、図３のステップＳ４で操作端末１２からデータベースサーバ１１に入力されたＳＱＬ文が関数削除指示であると判定されてスタートとなる。なお、以下の説明において、記憶装置１３にすでにｎ個の関数が登録されているとともにＳＱＬ文の内容が関数ｆｎの削除要求である場合の例について示す。
【００５１】
ステップＳ５１において、削除部３４は、関数ｆｎに関する情報を直接呼出確率テーブル４１から削除する。なお、関数ｆｎが直接他の関数を呼び出す確率に関する情報のみを削除してもよいし、関数ｆｎを呼び出す他の関数に関する情報（たとえば関数ｆ４が関数ｆｎを直接呼び出す場合は、関数ｆ４に関する情報）もあわせて削除してもよい。
【００５２】
次に、ステップＳ５２において、削除部３４は、オブジェクトＯｎをディスクオブジェクトテーブル２２およびキャッシュオブジェクトテーブル４２から削除する。
【００５３】
次に、ステップＳ５３において、削除部３４は、関数ｆｎに関する情報をソーステーブル２３から削除する。
【００５４】
以上の手順により、関数が削除されるごとに、削除される関数を除いて新たに直接呼出確率および呼出期待値を更新することができるとともに、更新された呼出期待値に応じてディスクオブジェクトテーブル２２を更新することができる。
【００５５】
（４．関数実行処理に係る構成および動作）
図８は、図３のステップＳ７で実行される関数実行処理に係る構成を示すブロック図である。また、図９は、図３のステップＳ７で実行される関数実行処理の手順を示すサブルーチンフローチャートである。
【００５６】
図９に示す手順は、図３のステップＳ６で操作端末１２からデータベースサーバ１１に入力されたＳＱＬ文が関数実行指示であると判定されてスタートとなる。なお、以下の説明において、記憶装置１３にすでにｎ個の関数が登録されているとともにＳＱＬ文の内容が関数ｆｎの実行要求である場合の例について示す。
【００５７】
ステップＳ７１において、実行部３５は、実行要求があった関数ｆｎに対応するオブジェクトＯｎがキャッシュオブジェクトテーブル４２にあるか否かを判定する。オブジェクトＯｎがキャッシュオブジェクトテーブル４２にある場合は、ステップＳ７４に進む。一方、ない場合はステップＳ７２に進む。
【００５８】
次に、ステップＳ７２において、実行部３５は、オブジェクトＯｎがディスクオブジェクトテーブル２２にあるか否かを判定する。オブジェクトＯｎがディスクオブジェクトテーブル２２にある場合は、このオブジェクトＯｎをキャッシュメモリ１５に複製してステップＳ７４に進む。一方、オブジェクトＯｎがディスクオブジェクトテーブル２２にない場合はステップＳ７３に進む。
【００５９】
次に、ステップＳ７３において、コンパイラ３８はソーステーブル２３に格納された関数ｆｎのソースＳｎを用いてオブジェクトＯｎを生成し、キャッシュメモリ１５に展開する。
【００６０】
次に、ステップＳ７４において、実行部３５は、キャッシュメモリ１５にあるオブジェクトＯｎを実行する。
【００６１】
以上の手順により、関数の呼び出し（実行要求）に応じて関数のオブジェクトを実行することができる。
【００６２】
（５．最適化処理に係る構成および動作）
続いて、データベース装置１０のキャッシュオブジェクトテーブル４２の最適化処理について説明する。キャッシュオブジェクトテーブル４２の最適化処理は、たとえばデータベースサーバ１１の再起動時などに実行される。以下の説明では、キャッシュオブジェクトテーブル４２の最適化処理がデータベースサーバ１１の再起動時に実行される場合の例について説明する。
【００６３】
図１０は、キャッシュオブジェクトテーブル４２の最適化処理に係る構成を示すブロック図である。また、図１１は、キャッシュオブジェクトテーブル４２の最適化処理の手順を示すフローチャートである。
【００６４】
図１１に示す手順は、データベースサーバ１１の起動指示があった時点でスタートとなる。なお、ディスクオブジェクトテーブル２２には、データベースサーバ１１の前回のシャットダウン時に、最適化部３７により、呼出期待値テーブル２１にもとづいて、呼出期待値が最高（優先度が最高）の関数から呼出期待値順に上から所定数の関数のオブジェクトが格納されているものとする。
【００６５】
まず、ステップＳ９１において、制御部１４は、データベースサーバ１１の初期化を行う。
【００６６】
次に、ステップＳ９２において、最適化部３７は、呼出期待値テーブル２１にもとづいて呼出期待値が上から所定数の関数の情報を取得する。
【００６７】
次に、ステップＳ９３において、最適化部３７は、取得した所定数の関数のうち、オブジェクトがディスクオブジェクトテーブル２２に格納されていないものがあるか否かを判定する。オブジェクトがディスクオブジェクトテーブル２２に格納されていないものがあると、ステップＳ９４に進む。一方、全て格納されている場合はステップＳ９５に進む。
【００６８】
次に、ステップＳ９４において、コンパイラ３８は、対象となる関数のソースをソーステーブル２３から読み出してオブジェクトを生成する。
【００６９】
次に、ステップＳ９５において、最適化部３７は、呼出期待値が上から所定数の関数のオブジェクトをキャッシュオブジェクトテーブル４２に格納する。そして、データベースサーバ１１は、操作端末１２を介したユーザからの指示を待つ。
【００７０】
なお、ディスクオブジェクトテーブル２２に格納されるオブジェクトの数とキャッシュオブジェクトテーブル４２に格納されるオブジェクトの数とは異なっていてもよく、たとえばディスクオブジェクトテーブル２２およびキャッシュオブジェクトテーブル４２の記憶容量に応じてディスクオブジェクトテーブル２２およびキャッシュオブジェクトテーブル４２に個別に設定するとよい。
【００７１】
以上の手順により、データベースサーバ１１の起動時に、キャッシュオブジェクトテーブル４２に呼出期待値が上から所定数の関数のオブジェクトを格納することができる。
【００７２】
データベースサーバ１１の起動後に図１１に示す手順を実行した後、シャットダウンまでの稼働中において、ユーザからＳＱＬ文が与えられた場合は、図３に示す手順が実行される。
【００７３】
また、稼働中においては、キャッシュオブジェクトテーブル４２は、ＬＲＵ部３６により、Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄアルゴリズム（ＬＲＵアルゴリズム）を用いて更新されるとよい。すなわち、データベースサーバ１１の通常稼働中には、ＬＲＵ部３６によりＬＲＵアルゴリズムにもとづいてキャッシュオブジェクトテーブル４２が更新されつつ、最適化部３７によりディスクオブジェクトテーブル２２が呼出期待値に応じて更新される。一方、データベースサーバ１１の再起動時には、キャッシュオブジェクトテーブル４２の内容が最適化部３７により呼出期待値に応じて更新される。
【００７４】
このため、キャッシュオブジェクトテーブル４２の内容は、シャットダウン時にはＬＲＵ部３６による制御にもとづいた内容である一方、起動時には呼出期待値に応じた内容とすることができる。
【００７５】
したがって本実施形態に係るデータベース装置１０によれば、関数の呼ばれやすさの優先度を評価し、優先度に応じてオブジェクトをキャッシュメモリ１５および記憶装置１３に保持させることができる。
【００７６】
（６．直接呼出確率の算出方法）
続いて、直接確率算出部３９により算出される直接呼出確率の算出方法についてより具体的に説明する。
【００７７】
（６−１．算出手順の一例）
図１２は、関数登録指示のＳＱＬ文に含まれる関数のソース５１の一例を示す説明図である。また、図１３は、図１２に示す関数のソース５１から直接呼出確率を求める過程の一例を示す説明図である。また、図１４（ａ）は、直接呼出確率テーブル４１の一例を示す説明図であり、（ｂ）は直接呼出確率テーブル４１の他の例を示す説明図である。
【００７８】
図１２に示すＳＱＬ文は、関数ｆ１の関数登録指示を内容としている。ソース５１をから明らかなように、関数ｆ１の中では関数ｆ４、ｆ５およびｆ２が直接呼び出される。
【００７９】
図１３に示すように、直接確率算出部３９は、ソース５１の各ステートメント（ｓｔｍｔ）での分岐確率にもとづいて、関数ｆ１の中で他の関数ｆ４、ｆ５およびｆ２が呼び出される確率（直接呼出確率）を求めることができる。この直接呼出確率は、構文解析の際に容易に抽出することができ、追加の処理時間やデータ量は少ない。
【００８０】
図１４（ａ）および（ｂ）に示すように、図１３に示す手順で算出した直接呼出確率にもとづいて、呼び出し元関数の情報と、呼び出し元関数から直接呼び出される他の関数ごとの直接呼出確率とを関連付けたものを直接呼出確率テーブル４１とするとよい。
【００８１】
（６−２．ステートメントごとの分岐確率の設定方法）
関数のステートメント（ｓｔｍｔ）ごとの分岐確率の設定方法には、大きくルールベースの方法と統計ベースの方法とがある。
【００８２】
図１５は、ルールベースの方法により設定された分岐確率５２の一例を示す説明図である。図１５に示すように、ルールベースの方法では、各種ステートメントに対してあらかじめ分岐確率を設定しておく。この設定値は、ユーザによって操作端末１２を介して変更されてもよい。
【００８３】
図１６は、統計ベースの方法において用いられるソースコード５３の一例を示す説明図である。図１６には、ＩＦステートメントの分岐確率を統計ベースの方法で設定する場合の例について示した。
【００８４】
既存のコードと実行環境を前もって使うことができる場合は、各ステートメントのコードにログを仕込み、実行パスを通る回数を算出し、この回数の統計情報から分岐確率を推定してもよい。たとえばＩＦ文の場合には図１６に示すようにログを仕込み（図１６の「ＬＯＧ（”ＣＯＵＮＴ＿ＩＦ」参照）、既存のコードを実行する。そして、全て実行した後でログを収集し、条件が真となる確率を（ＣＯＵＮＴ＿ＩＦ＿ＴＲＵＥの出現回数）／（ＣＯＵＮＴ＿ＩＦの出現回数）と推定すればよい。
【００８５】
（７．呼出期待値の算出方法）
続いて、優先度付与部３３により算出される呼出期待値の算出方法についてより具体的に説明する。
【００８６】
（７−１．入れ子を考慮しない場合）
まず、各関数が他の関数から直接呼び出される場合のみを考慮し、他の関数からさらに他の関数を介して間接的に呼び出される場合を考慮しない（入れ子を考慮しない）場合における呼出期待値の算出方法について説明する。
【００８７】
図１７は、入れ子を考慮しない場合における、直接呼出確率にもとづいて呼出期待値を求める様子の一例を示す説明図である。図１７には、記憶装置１３にソースが登録されている関数がｆ１、ｆ２およびｆ３の３つである場合の例について示した。
【００８８】
図１７に示す例においては、図１７の直接呼出確率テーブル４１から明らかなように、関数ｆ１とｆ２の中では他の関数が呼ばれない。また、関数ｆ３の中では関数ｆ１が０．９の確率で、関数ｆ２が０．５の確率で、それぞれ呼び出される。
【００８９】
この場合、各関数ｆ１、ｆ２およびｆ３がそれぞれ１回ずつ呼び出された場合に各関数ｆ１、ｆ２およびｆ３のそれぞれが呼び出される回数の期待値は、直接呼出確率から容易に算出することができ、上からｆ１、ｆ２、ｆ３の順となる（図１７の呼出期待値テーブル２１参照）。
【００９０】
各関数が呼び出される回数の期待値（呼出期待値）が大きい関数は、自身以外の他の関数から呼び出される可能性が高い関数であるといえ、オブジェクトをディスクオブジェクトテーブル２２やキャッシュオブジェクトテーブル４２に格納することが有意義な関数であるということができる。
【００９１】
したがって、最適化部３７は、この呼出期待値にもとづいて、呼出期待値が上から所定数（図１７に示す例では２つ）の関数のオブジェクトをディスクオブジェクトテーブル２２やキャッシュオブジェクトテーブル４２に格納する。
【００９２】
図１８は、入れ子を考慮しない場合における、関数登録時の呼出期待値算出アルゴリズム６１の一例を示す説明図である。
【００９３】
関数登録時には、たとえば図１８に示すようなアルゴリズム６１を実行して登録する関数ｆｕｎｃを構文解析することにより、登録する関数ｆｕｎｃを呼出期待値テーブル２１に登録するとともに、呼出期待値テーブル２１の各関数の呼出期待値を更新することができる。
【００９４】
図１９は、入れ子を考慮しない場合における、関数削除時の呼出期待値算出アルゴリズム６２の一例を示す説明図である。
【００９５】
関数削除時には、たとえば図１９に示すようなアルゴリズム６２を実行して登録する関数ｆｕｎｃを構文解析することにより、削除する関数ｆｕｎｃを呼出期待値テーブル２１から削除するとともに、呼出期待値テーブル２１の各関数の呼出期待値を更新する。なお、図１９において太字で示した「ｆｕｎｃから直接ｆが呼ばれる確率」の算出時に、関数ｆｕｎｃの直接呼出確率がキャッシュメモリ１５に残っている場合にはそれを用いればよいが、キャッシュメモリ１５に残っていない場合は関数ｆｕｎｃを再度構文解析して直接呼出確率を求める（図５のステップＳ３１参照）。
【００９６】
（７−２．入れ子を考慮する場合）
続いて、各関数が他の関数から直接呼び出される場合および他の関数からさらに他の関数を介して間接的に呼び出される場合を考慮する（入れ子を考慮する）場合における呼出期待値の算出方法について説明する。
【００９７】
図２０は、入れ子を考慮する場合における、直接呼出確率にもとづいて呼出期待値を求める様子の一例を示す説明図である。
【００９８】
図２０に示した直接呼出確率テーブル４１の例において、たとえば関数ｆｕｎｃ２は、ｆｕｎｃ１から直接呼出確率０．７で直接呼び出されるとともに、ｆｕｎｃ１からｆｕｎｃ３を介しても間接的に呼び出される。
【００９９】
図２１は、関数が複数の経路で呼び出される場合において、複数の経路の各確率のうち最大の確率を直接呼出確率として近似するためのアルゴリズム７１の一例を示す説明図である。
【０１００】
図２０に示す例のように、関数が複数の経路で呼び出される場合には、複数の経路の各確率のうち、最大の確率を直接呼出確率として近似する。これは、隠れマルコフモデル（ＨＭＭ：Hidden Markov Model）の最尤パスを求める際に一般的に用いられるビタビ（Ｖｉｔｅｒｂｉ）アルゴリズムと同様の近似法である。このように近似することにより、入れ子を考慮する場合であっても直接呼出確率を高速に計算することができる。
【０１０１】
図２２は、入れ子を考慮する場合における、関数登録時の呼出期待値算出アルゴリズム７２の一例を示す説明図である。
【０１０２】
入れ子を考慮する場合、関数登録時には、たとえば図２２に示すようなアルゴリズム７２を実行して登録する関数ｆｕｎｃを構文解析することにより、登録する関数ｆｕｎｃを呼出期待値テーブル２１に登録するとともに、呼出期待値テーブル２１の各関数の呼出期待値を更新することができる。なお、アルゴリズム７２において、「ｆｕｎｃ以外の各関数」とは、直接呼出確率テーブル４１および呼出期待値テーブル２１に出現している全関数であればよく、ソーステーブル２３に登録された全関数である必要はない。
【０１０３】
図２３は、入れ子を考慮する場合における、関数削除時の呼出期待値算出アルゴリズム７３の一例を示す説明図である。
【０１０４】
入れ子を考慮する場合、関数削除時には、たとえば図２３に示すようなアルゴリズム７３を実行して登録する関数ｆｕｎｃを構文解析することにより、削除する関数ｆｕｎｃを呼出期待値テーブル２１から削除するとともに、呼出期待値テーブル２１の各関数の呼出期待値を更新する。なお、アルゴリズム７３において、「ｆｕｎｃ以外の各関数」とは、呼出期待値テーブル２１に出現している全関数であればよく、ソーステーブル２３に登録された全関数である必要はない。
【０１０５】
本実施形態に係るデータベース装置１０は、関数の呼ばれやすさの優先度を評価し、優先度に応じてオブジェクトをキャッシュメモリ１５および記憶装置１３に保持させることができる。関数の呼ばれやすさの優先度は、各関数の呼び出される回数の期待値（呼出期待値）により評価する。呼出期待値は、たとえば関数が呼び出された際に直接呼び出される確率（直接呼出確率）から求めることができる。
【０１０６】
このため、本実施形態に係るデータベース装置１０は、呼び出される可能性の高い関数のオブジェクトだけを記憶装置１３に格納することができる。したがって、全ての関数のオブジェクトを記憶装置１３に格納する場合に比べてオブジェクトの所要記憶容量が少なくてすむとともに、記憶装置１３に記憶されたオブジェクトは呼び出される可能性の高い厳選された関数のオブジェクトとすることができる。
【０１０７】
また、本実施形態に係るデータベース装置１０は、起動時などの最適化処理時に、呼び出される可能性の高い関数のオブジェクトだけをキャッシュメモリ１５に格納することができる。
【０１０８】
一般に、キャッシュメモリ１５の記憶容量は小さく、データベース装置１０に登録された全てのオブジェクトを格納することは難しい。この点、本実施形態に係るデータベース装置１０は、呼び出される可能正の高い厳選された関数のオブジェクトのみをキャッシュメモリ１５に格納することができるため、ランダムに格納する場合やＬＲＵアルゴリズムで更新する場合に比べ、実行時間を短縮することができる。また、この厳選された関数は、直近に呼び出されたか否かによらないため、キャッシュメモリ１５の内容はＬＲＵアルゴリズムよりも優れたものとすることができる。
【０１０９】
また、たとえばキャッシュオブジェクトテーブル４２に格納されたオブジェクト数がディスクオブジェクトテーブル２２に格納されたオブジェクト数よりも少なく、キャッシュオブジェクトテーブル４２に呼び出された関数のオブジェクトがない場合であっても、ディスクオブジェクトテーブル２２には対象のオブジェクトが格納されている確率が高いため、再度構文解析する必要が生じる可能性が低い。
【０１１０】
もちろん、データベースサーバ１１の起動時には呼出期待値にもとづいてキャッシュオブジェクトテーブル４２の内容を決定するとともに、データベースサーバ１１の通常稼動中にはＬＲＵアルゴリズムでキャッシュオブジェクトテーブル４２の内容を決定してもよい。
【０１１１】
また、通常稼動中において最適化処理（図１１参照）を行い、呼出期待値にもとづいてキャッシュオブジェクトテーブル４２の内容を決定してもよい。呼出期待値は、関数の構文解析によって求めることができ、関数の実行履歴を用いる必要がないため、履歴が蓄積される前であっても呼び出される可能性の高い関数のオブジェクトだけをキャッシュメモリ１５や記憶装置１３に格納することができる。また、通常稼働中において、本実施形態に係る最適化処理（図１１参照）とＬＲＵアルゴリズムとを組み合わせてもよい。
【０１１２】
また、本実施形態に係るデータベース装置１０は、起動時に、呼び出される可能性の高い関数のオブジェクトをキャッシュメモリ１５に格納することができる。このため、起動時において、いまだ関数を呼び出していない段階でも、キャッシュメモリ１５の内容が充実しており、実行時間が低下してしまうことがない。
【０１１３】
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【０１１４】
また、本発明の実施形態では、フローチャートの各ステップは、記載された順序に沿って時系列的に行われる処理の例を示したが、必ずしも時系列的に処理されなくとも、並列的あるいは個別実行される処理をも含むものである。
【符号の説明】
【０１１５】
１０  データベース装置
１１  データベースサーバ
１２  操作端末
１３  記憶装置
１４  制御部
１５  キャッシュメモリ
２１  呼出期待値テーブル
２２  ディスクオブジェクトテーブル
２３  ソーステーブル
３２  構文解析部
３３  優先度付与部
３７  最適化部
３９  直接確率算出部
４１  直接呼出確率テーブル
４２  キャッシュオブジェクトテーブル
【図１】
2013239038.tif 000003
【図２】
2013239038.tif 000004
【図３】
2013239038.tif 000005
【図４】
2013239038.tif 000006
【図５】
2013239038.tif 000007
【図６】
2013239038.tif 000008
【図７】
2013239038.tif 000009
【図８】
2013239038.tif 000010
【図９】
2013239038.tif 000011
【図１０】
2013239038.tif 000012
【図１１】
2013239038.tif 000013
【図１２】
2013239038.tif 000014
【図１３】
2013239038.tif 000015
【図１４】
2013239038.tif 000016
【図１５】
2013239038.tif 000017
【図１６】
2013239038.tif 000018
【図１７】
2013239038.tif 000019
【図１８】
2013239038.tif 000020
【図１９】
2013239038.tif 000021
【図２０】
2013239038.tif 000022
【図２１】
2013239038.tif 000023
【図２２】
2013239038.tif 000024
【図２３】
2013239038.tif 000025