(57)【要約】【課題】  短時間でバッチジョブを実行するための入出力処理プランを生成すること。【解決手段】Ｉ／Ｏプラン生成部１２１は、クライアント１００から複数のバッチジョブを含む複数のソースファイル１０１Ａ〜１０１Ｃが入力されたときに、各バッチジョブに属する表を基に、Ｉ／Ｏ処理コストが最小となる表の組み合わせを含むＩ／Ｏプラン１０７を生成し、Ｉ／Ｏプラン実行部１２２は、Ｉ／Ｏプラン１０７に従って外部記憶媒体１０９とデータの授受を行ってＩ／Ｏプラン１０７で指定されたデータをデータベースバッファ１１０に格納し、データベースバッファ１１０に格納されたデータに対して、Ｉ／Ｏプラン１０７に従った処理を実行し、検索結果返却部１２３は、データベースバッファ１１０のデータをアクセスして、アクセスによる検索結果をクライアント１００に返却する。【選択図】        図１
2011096185.tif 000002
【特許請求の範囲】
【請求項１】
外部記憶媒体とデータの授受を実行し、前記データの授受に伴うデータをデータベースで管理するデータベース管理装置であって、
バッチジョブ要求元からの要求に応答して処理する入出力処理プラン生成部を備え、
前記入出力処理プラン生成部は、
前記バッチジョブ要求元から複数のバッチジョブを含む複数のソースファイルが入力されたときに、前記各バッチジョブに属する表を基に、前記各バッチジョブに属する表の入出力処理順序を規定した候補群を、前記各バッチジョブに属する表の組み合わせで生成し、前記生成した候補群の中から、前記各バッチジョブに属する表のデータの入出力処理に伴う時間を基に一つの候補を選択し、前記選択した一つの候補に属する表に従って前記各バッチジョブを実行するための入出力処理プランを生成してなることを特徴とするデータベース管理装置。
【請求項２】
請求項１に記載のデータベース管理装置であって、
前記入出力処理プラン生成部は、
前記候補群として、前記各バッチジョブに属する表を基に、取り得る全ての組み合わせを示す候補群を生成し、
前記一つの候補として、前記生成した候補群の中から、前記各バッチジョブに属する表のデータの入出力処理に伴う時間が最小となる候補を選択してなることを特徴とするデータベース管理装置。
【請求項３】
請求項１に記載のデータベース管理装置であって、
データを格納するための記憶領域を有するメモリと、
前記外部記憶媒体と前記入出力処理プランを基にデータの授受を行って前記入出力処理プランで指定されたデータを前記メモリに格納し、前記メモリに格納されたデータに対して、前記入出力処理プランに従った処理を実行する入出力処理プラン実行部と、
前記メモリに格納されたデータをアクセスして、前記アクセスによる検索結果を前記バッチジョブ要求元に返却する検索結果返却部と、
を備えてなることを特徴とするデータベース管理装置。
【請求項４】
請求項３に記載のデータベース管理装置であって、
前記入出力処理プラン実行部は、
前記メモリの記憶領域に空きがあることが条件に、前記入出力処理プランで指定されたデータを前記メモリに格納し、前記メモリの記憶領域に空きがないときには、前記検索結果返却部が前記メモリに格納されたデータをアクセスしたことを条件に、前記メモリに格納されたデータを優先順位に従って削除してなることを特徴とするデータベース管理装置。
【請求項５】
請求項３に記載のデータベース管理装置であって、
前記検索結果返却部は、
前記入出力処理プラン実行部が前記メモリに格納されたデータに対する処理を実行したことを条件に、前記メモリに格納されたデータをアクセスし、前記アクセスによる検索結果を前記バッチジョブ要求元に返却してなることを特徴とするデータベース管理装置。
【請求項６】
外部記憶媒体とデータの授受を実行し、前記データの授受に伴うデータをデータベースで管理するデータベース管理方法であって、
バッチジョブ要求元からの要求に応答して処理する入出力処理プラン生成部を備え、
前記入出力処理プラン生成部は、
前記バッチジョブ要求元から複数のバッチジョブを含む複数のソースファイルが入力されたときに、前記各バッチジョブに属する表を基に、前記各バッチジョブに属する表の入出力処理順を規定した候補群を、前記各バッチジョブに属する表の組み合わせで生成する第一の生成ステップと、
前記生成ステップで生成した候補群の中から、前記各バッチジョブに属する表のデータの入出力処理に伴う時間を基に一つの候補を選択する選択ステップと、
前記選択ステップで選択した一つの候補に属する表に従って前記各バッチジョブを実行するための入出力処理プランを生成する第二の生成ステップを実行することを特徴とするデータベース管理方法。
【請求項７】
請求項６に記載のデータベース管理方法であって、
前記入出力処理プラン生成部は、
前記第一の生成ステップでは、前記候補群として、前記各バッチジョブに属する表を基に、取り得る全ての組み合わせを示す候補群を生成し、
前記選択ステップでは、前記一つの候補として、前記生成した候補群の中から、前記各バッチジョブに属する表のデータの入出力処理に伴う時間が最小となる候補を選択することを特徴とするデータベース管理方法。
【請求項８】
請求項６に記載のデータベース管理方法であって、
データを格納するための記憶領域を有するメモリと、
前記入出力処理プランを実行する入出力処理プラン実行部と、
前記メモリをアクセスする検索結果返却部と、
を備え、
前記入出力処理プラン実行部は、
前記外部記憶媒体と前記入出力処理プランを基にデータの授受を行って前記入出力処理プランで指定されたデータを前記メモリに格納する制御ステップと、
前記メモリに格納されたデータに対して、前記入出力処理プランに従った処理を実行するデータ処理ステップを実行し、
前記検索結果返却部は、
前記メモリに格納されたデータをアクセスするアクセスステップと、
前記アクセスステップのアクセスによる検索結果を前記バッチジョブ要求元に返却する返却ステップを、
実行することを特徴とするデータベース管理方法。
【請求項９】
請求項８に記載のデータベース管理方法であって、
前記入出力処理プラン実行部は、
前記制御ステップでは、前記メモリの記憶領域に空きがあることが条件に、前記入出力処理プランで指定されたデータを前記メモリに格納し、前記メモリの記憶領域に空きがないときには、前記検索結果返却部が前記メモリに格納されたデータをアクセスしたことを条件に、前記メモリに格納されたデータを優先順位に従って削除することを特徴とするデータベース管理方法。
【請求項１０】
請求項８に記載のデータベース管理方法であって、
前記検索結果返却部は、
前記アクセスステップでは、前記入出力処理プラン実行部が前記メモリに格納されたデータに対する処理を実行したことを条件に、前記メモリに格納されたデータをアクセスすることを特徴とするデータベース管理方法。
【請求項１１】
請求項６から請求項１０のうちいずれか１つに記載の各ステップを、計算機に実行させるためのデータベース管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース管理装置、データベース管理方法及びデータベース管理プログラムに係り、特に、データベースの運用業務の所要時間を短縮するデータベース管理装置、データベース管理方法及びデータベース管理プログラムに関する。
【背景技術】
【０００２】
近年、オンライン業務では、所謂２４時間、３６５日業務を停止させずに行うようなミッションクリティカルな需要が増加する傾向にある。このような営業時間の延長という環境下では、営業時間外に実行するバッチ処理を短時間で終わらせることが求められている。営業時間外に実行するバッチ処理の一例として、日々の売上データを集計する集計バッチジョブや、分析に使用するデータを抜き出すための検索バッチジョブなどがある。
【０００３】
データの入出力による負荷を低減させるために、外部記憶媒体に対するデータの入出力回数を少なくする技術が提案されている。例えば、特許文献１には、データベースに対する複数の全件検索要求を受け付けた場合に、メモリ上に読み出されたデータを再利用することによって、外部記憶媒体に対するデータの入出力回数を減少させ、応答時間の短縮及びスループットの向上を図る技術が開示されている。
【０００４】
また、非特許文献１に開示されるように、外部記憶媒体に格納されたデータを格納する領域のことを、データベース格納領域と、メモリ上に読み出されたデータを格納する領域のことをデータベースバッファと定義した場合、バッチ処理で行うバッチジョブを高速化するために、データベース格納領域に格納されている表のデータを予めデータベースバッファに格納しておいてから、バッチジョブを実行する方法が試みられている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０８−６８２９号公報
【非特許文献】
【０００６】
【非特許文献１】増永良文著「データベース入門」サイエンス社、2006年10月10日、p141-143
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、オンライン業務終了後に、バッチジョブを実行する場合、バッチ処理で行うバッチジョブを高速化するために、バッチジョブを実行する前に、バッチジョブで使用する全てのデータをデータベース格納領域からデータベースバッファに登録し、その後、バッチジョブを実行しようとすると、データベースバッファとして、大容量のメモリが必要となる。しかも、必要な容量のメモリを用意するためには、高いコストがかかるという問題がある。
【０００８】
上述の特許文献１及び非特許文献１に開示された技術でも、データベース格納領域のデータをデータベースバッファに登録するためには、大容量メモリを必要とする。
【０００９】
しかも、オンライン業務で扱うデータ量の増加に伴い、全てのデータベース格納領域のデータをデータベースバッファに登録することが困難なケースもある。
【００１０】
また、必要な容量のメモリを用意できた場合でも、近年の業務を取り巻く環境の急激な変化に伴い、オンライン業務で取り扱うデータ量が急激に増加する傾向にあり、その都度、メモリを増強するのは困難である。
【００１１】
一方で、メモリの容量が不十分な場合には、特許文献１に開示されるように、バッチジョブで使用する表のうち参照・更新頻度の高い表を、ユーザが事前に選択し、選択した表のデータをデータベース格納領域からデータベースバッファに格納しておき、データベースバッファに格納されている表を極力再利用する方法を採用することも考えられる。
【００１２】
しかしながら、この方法を採用すると、バッジジョブの効率の良い実行順序を決定するために、ユーザが参照・更新頻度の高い表を選択することやバッチジョブが行う処理内容を事前に把握することといったユーザ負担が増加することといった問題がある。
【００１３】
また、近年は、業務の問題点を定量的に分析して経営の効率化を実現することを目的として、業務データを統計的に分析を行うために、バッチ処理を追加することが考えられる。この場合、バッチジョブで使用する表をユーザが事前に選択する方法を採用すると、ユーザは、バッチ処理を追加する毎に、バッチジョブの実行順を見直す必要が生じる。
【００１４】
本発明の目的は、短時間でバッチジョブを実行するための入出力処理プランを生成することができるデータベース管理装置、データベース管理方法及びデータベース管理プログラムを提供することにある。
【課題を解決するための手段】
【００１５】
前記課題を解決するために、本発明は、バッチジョブ要求元から複数のバッチジョブを含む複数のソースファイルが入力されたときに、前記各バッチジョブに属する表を基に、前記各バッチジョブに属する表の入出力処理順序を規定した候補群を、前記各バッチジョブに属する表の組み合わせで生成し、前記生成した候補群の中から、前記各バッチジョブに属する表のデータの入出力処理に伴う時間を基に一つの候補を選択し、前記選択した一つの候補に属する表に従って前記各バッチジョブを実行するための入出力処理プランを生成する入出力処理プラン生成部を備えたことを特徴とする。
【発明の効果】
【００１６】
短時間でバッチジョブを実行するための入出力処理プランを生成することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明を表す概念図である。
【図２】本発明におけるバッチジョブの実行時間を説明するためのタイムチャートである。
【図３】本発明の一実施形態に関する、データベース管理システムの機能ブロックを示すブロック図である。
【図４】本発明の一実施形態に関する、バッチジョブごとの表アクセス順テーブルの構成図である。
【図５】本発明の一実施形態に関する、表アクセス順プラン候補テーブルの構成図である。
【図６】本発明の一実施形態に関する、Ｉ／Ｏプラン候補テーブルの構成図である。
【図７】本発明の一実施形態に関する、Ｉ／Ｏタイミングテーブルの構成図である。
【図８】本発明の一実施形態に関する、データベースバッファの状態を事前にシミュレーションした状態を示すシミュレーションテーブルの構成図である。
【図９】本発明の一実施形態に関する、データベースバッファの状態を事前にシミュレーションした状態を示すシミュレーションテーブルの構成図である。
【図１０】本発明の一実施形態に関する、Ｉ／Ｏプランテーブルの構成図である。
【図１１】本発明の一実施形態に関する、図７の２番目(表Ａ)までをデータベースバッファに乗せた状態における、Ｉ／Ｏ進捗管理テーブルの構成図である。
【図１２】本発明の一実施形態に関する、図７の５番目(表Ｂ)までをデータベースバッファに乗せた状態おける、Ｉ／Ｏ進捗管理テーブルの構成図である。
【図１３】本発明の一実施形態に関する、Ｉ／Ｏプラン生成部での処理のうち、図５の「表アクセス順プラン候補」から図６の「Ｉ／Ｏプラン候補」を生成する処理を表すフローチャートである。
【図１４】本発明の一実施形態に関する、Ｉ／Ｏプラン実行部での処理を表すフローチャートである。
【図１５】本発明の一実施形態に関する、検索結果返却部での処理を表すフローチャートである。
【図１６】本発明の比較対象となるシステムの構成図である。
【図１７】本発明の比較対象となるシステムにおけるバッチジョブの実行時間を説明するためのタイムチャートである。
【発明を実施するための形態】
【００１８】
以下、本発明の一実施形態を図面に基づいて詳細に示す。
【００１９】
図１は、本発明の概要を示す概念図である。データベース管理装置１２０は、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）プラン生成部（入出力処理プラン生成部）１２１と、Ｉ／Ｏプラン実行部（入出力処理プラン実行部）１２２と、検索結果返却部１２３とから構成される。
【００２０】
Ｉ／Ｏプラン生成部１２１は、ユーザの操作による端末であって、バッチジョブ要求元となるクライアント１００から、バッチジョブのソースファイル１０１Ａ〜１０１Ｃを受け取って、Ｉ／Ｏプラン１０７を生成する。
【００２１】
Ｉ／Ｏプラン実行部１２２は、Ｉ／Ｏプラン１０７から作成したＩ／Ｏプラン進捗管理テーブル（表）１０８にしたがって、外部記憶媒体のデータベース格納領域１０９とデータの授受を行って、データベースバッファ１１０にデータを格納する処理を行う。
【００２２】
検索結果返却部１２３は、クライアント１００から、ソースファイル１０１Ａ〜１０１Ｃをコンパイルして得られたオブジェクト１１１Ａ〜１１１Ｃを受け取り、受け取ったオブジェクト１１１Ａ〜１１１Ｃを基にデータベースバッファ１１０を参照・更新しながらデータベースバッファ１１０を検索し、この検索結果１１３Ａ〜１１３Ｃをクライアント１００に返却する。
【００２３】
データベースバッファ１１０は、データベース管理装置内のメモリとして、複数のページから構成されており、数ページにまたがる表を格納することができる。ただし、一つのページには一つの表のデータのみを格納する構造とする。
【００２４】
Ｉ／Ｏプラン生成部１２１は、以下の処理を順に行う。
【００２５】
まず、クライアント１００から複数のバッチジョブのソースファイルとして、例えば、複数のバッチジョブＡ、Ｂ、Ｃのソースファイル１０１Ａ〜１０１Ｃが入力された場合、バッチジョブＡ、Ｂ、Ｃのソースファイル１０１Ａ〜１０１Ｃを解析し、バッチジョブＡ、Ｂ、Ｃごとに参照する表をそれぞれ抜き出し、バッチジョブＡ、Ｂ、Ｃごとの表アクセス順テーブル１０２を生成する。例えば、バッチジョブＡは、表Ａ、表Ｂ、表Ｃを含み、バッチジョブＢは、表Ｂ、表Ａを含み、バッチジョブＣは、表Ｄ、表Ｂ、表Ｃ、表Ａを含んでいることを示す表アクセス順テーブル１０２を生成する。
【００２６】
次に、バッチジョブＡ、Ｂ、Ｃごとの表アクセス順テーブル１０２から、バッチジョブＡ、Ｂ、Ｃごとの表アクセス順を保ったままで、取り得る全ての組み合わせから、候補１、候補２、候補３、・・・を含む表アクセス順プラン候補テーブル１０３を作成する。
【００２７】
この場合、候補１は、バッチジョブＡの一番目の表Ａ、バッチジョブＢの一番目の表Ｂ、バッチジョブＣの一番目の表Ｄ、バッチジョブＡの二番目の表Ｂ、・・・の順で、バッチジョブＡ、Ｂ、Ｃの表を交互に組み合わせたものである。
【００２８】
候補２は、バッチジョブＡの一番目の表Ａ、二番目の表Ｂ、三番目の表Ｃ、バッチジョブＢの一番目の表Ｂ、二番目の表Ａ、バッチジョブＣの一番目の表Ｄ、二番目の表Ｂ、三番目の表Ｃ、四番目の表Ａの順に組み合わせたものである。候補３以降についても、同様に組み合わせを作成し、取り得るすべての組み合わせを候補として作成する。
【００２９】
次に、外部記憶媒体１０４に格納されたデータベース定義情報に含まれている表の列長と行長を取得して、必要なデータベースバッファページ数を算出するとともに、オンライン業務完了後の状態をＩ／Ｏコストに反映するために、バッチジョブ実行前のデータベースバッファ１１０の状態１０５を取得し、取得した状態１０５を基に、表アクセス順プラン候補テーブル１０３で作成した候補１、２、３に対して、データの入出力処理（以下、入出力処理をＩ／Ｏと称することがある。）を行うタイミングを表したＩ／Ｏプランと、Ｉ／Ｏコストを算出して、Ｉ／Ｏプラン候補テーブル１０６を作成する。
【００３０】
例えば、Ｉ／Ｏプラン候補テーブル１０６の候補１の場合、表Ａ、表Ｂ、表Ｄ、表Ｂ、表Ａ、表Ｂ、表Ｃ、表Ｃ、表Ａのうちで、同じ表へのアクセスが近接する場合である、４番目の表Ｂ、６番目の表Ｂ、８番目の表Ｃ、９番目の表Ａは、Ｉ／Ｏ不要である。したがって、候補１のＩ／Ｏプランは、表Ａ、表Ｂ、表Ｄ、表Ａ、表Ｃとなる。
【００３１】
Ｉ／Ｏプラン候補テーブル１０６の候補２の場合、表Ａ、表Ｂ、表Ｃ、表Ｂ、表Ａ、表Ｄ、表Ｂ、表Ｃ、表Ａのうちで、同じ表へのアクセスが近接する場合である、４番目の表Ｂ、７番目の表Ｂは、Ｉ／Ｏ不要である。したがって、候補２のＩ／Ｏプランは、表Ａ、表Ｂ、表Ｃ、表Ａ、表Ｄ、表Ｃ、表Ａとなる。
【００３２】
Ｉ／Ｏプラン候補テーブル１０６の候補３の場合、表Ｄ、表Ａ、表Ｂ、表Ｂ、表Ｂ、表Ａ、表Ｃ、表Ｃ、表Ａのうちで、同じ表へのアクセスが近接する場合である、４番目と５番目の表Ｂ、６番目の表Ａ、８番目の表Ｃ、９番目の表Ａは、Ｉ／Ｏ不要である。したがって、候補３のＩ／Ｏプランは、表Ｄ、表Ａ、表Ｂ、表Ｃとなる。
【００３３】
最後に、Ｉ／Ｏプラン候補テーブル１０６の候補１、候補２、候補３、・・・・の中から、Ｉ／Ｏコストが最小となる候補を選択し、Ｉ／Ｏプラン１０７を決定する。例えば、候補１〜候補３の場合、候補１のＩ／Ｏコストが１４、候補２のＩ／Ｏコストが１６、候補３のＩ／Ｏコストが１２となったときには、候補３のＩ／Ｏコストが最小となるので、Ｉ／Ｏコストが最小となる候補として、候補３を選択する。そのときのＩ／Ｏプラン１０７は、表Ｄ、表Ａ、表Ｂ、表Ｃの順である。
【００３４】
即ちＩ／Ｏプラン生成部１２１は、入出力処理プラン生成部として、クライアント１００から複数のバッチジョブＡ、Ｂ、Ｃを含む複数のソースファイル１０１Ａ〜１０１Ｃが入力されたときに、各バッチジョブＡ、Ｂ、Ｃに属する表を基に、各バッチジョブＡ、Ｂ、Ｃに属する表の入出力処理順序を規定した候補１〜候補ｎを、取り得る全ての組み合わせを示す候補群として、各バッチジョブＡ、Ｂ、Ｃに属する表の組み合わせで生成し、生成した候補１〜候補ｎの中から、各バッチジョブＡ、Ｂ、Ｃに属する表のデータのＩ／Ｏに伴う時間が最小、即ちＩ／Ｏコストが最小となる、一つの候補３を選択し、選択した候補３に属する表（表Ｄ、表Ａ、表Ｂ、表Ｃ）に従って各バッチジョブＡ、Ｂ、Ｃを実行するためのＩ／Ｏプラン１０７を生成することになる。
【００３５】
Ｉ／Ｏプラン実行部１２２は、Ｉ／Ｏプラン１０７の進捗状態を管理するためのＩ／Ｏプラン進捗管理テーブル１０８にしたがって、外部記憶媒体であるデータベース格納領域１０９に格納された該当表のデータを、メモリ上のデータベースバッファ１１０に登録する。このＩ／Ｏプラン実行部１２２は、表のデータをデータベースバッファ１１０へ登録する際に、データベースバッファ１１０の空き領域が不足する場合には、検索結果返却部１２３が参照済みの表を、データベースバッファ１１０から削除した後で、空になったデータベースバッファ１１０の領域に表のデータを登録する。
【００３６】
もし、データベースバッファ１１０の領域に、検索結果返却部１２３が参照済みの表がない場合には、Ｉ／Ｏプラン実行部１２２は、データベースバッファ１１０の領域に存在する表が、検索結果返却部１２３によって参照済みとなるまで待ち、参照済みとなったときに、その表を削除する。
【００３７】
図１の例では、データベース格納領域１０９に、表Ａ、表Ｂ、表Ｃ、表Ｄのデータが格納されているときに、Ｉ／Ｏプラン進捗管理テーブル１０８にしたがって、表Ｄ、表Ａの順にＩ／Ｏを行うと、データベースバッファ１１０には、表Ｄと表Ａのデータが格納されることを示している。
【００３８】
検索結果返却部１２３は、ユーザの操作に基づくクライアント１００からの実行要求にしたがってオブジェクト１１１Ａ〜１１１Ｃの中のＳＱＬを受け取り、データベースバッファ１１０を参照しながら検索結果を求めて、検索結果１１３Ａ〜１１３Ｃをクライアント１００に返却する。
【００３９】
検索結果返却部１２３は、データベースバッファ１１０を参照する際に、各表について、参照済みの種別をＩ／Ｏプラン進捗管理表１０８に設定する。もし、参照する表がデータベースバッファ１１０に未登録の場合には、検索結果返却部１２３は、未登録の表が、データベース格納領域１０９からデータベースバッファ１１０に登録されるまで待ち合わせた後、データベースバッファ１１０を参照する。
【００４０】
本例では、データベースバッファ１１０に、表Ａと表Ｄのデータが格納された状態にあるときに、検索結果返却部１２３は、最初に表ＡにアクセスするバッチジョブＡを含むオブジェクト１１１ＡのＳＱＬ（Structured  Query  Language）と、最初に表ＤにアクセスするバッチジョブＣを含むオブジェクト１１１ＣのＳＱＬに応答して、データベースバッファ１１０を参照可能な状態にあることを表している。
【００４１】
以上により、Ｉ／Ｏ回数が最も少なくなるＩ／Ｏプラン１０７に従ってＩ／Ｏを行い、Ｉ／Ｏが完了したデータを参照しながらバッチジョブＡ〜Ｃを実行させることによって、バッチジョブＡ〜Ｃの実行時間を削減できる。
【００４２】
図２は、本発明におけるバッチジョブの実行時間をタイムチャートで示したものである。
【００４３】
以下、Ｉ／Ｏプラン実行部１２２によるＩ／Ｏ２０２と、検索結果返却部１２３によるバッチジョブＡ〜Ｃの検索処理２０３〜２０５を時間軸に沿って順に説明する。なお、ここでは、データベースバッファ１１０は全部で８ページあり、表Ａと表Ｂのデータをデータベースバッファ１１０に格納するためには、それぞれ４ページ必要で、表Ｃと表Ｄのデータをデータベースバッファ１１０に格納するためには、それぞれ２ページ必要とするケースである。
【００４４】
Ｉ／Ｏ処理２０２と、バッチジョブＡ〜Ｃの検索処理２０３〜２０５は、並行で動作する。表Ｄ、表Ａ、表Ｂ、表Ｃの順にＩ／Ｏ２０２を実行するに際して、まず、Ｉ／Ｏ２０２として、表ＤのデータのＩ／Ｏ２０６を行い、表ＤのデータのＩ／Ｏ２０６の完了後に、バッチジョブＣの検索処理２０５として、表Ｄの検索結果２１０を求める。
【００４５】
表Ｄの検索結果２１０を求める処理と並行して、表ＡのデータのＩ／Ｏ２０７を行い、表ＡのデータのＩ／Ｏ２０７の完了後に、バッチジョブＡの検索処理２０３として、表Ａの検索結果２１１を求める処理を行う。表Ａの検索結果２１１を求める処理と並行して、表ＢのデータのＩ／Ｏ２０８を行い、表ＢのデータのＩ／Ｏ２０８の完了後に、バッチジョブＡ〜Ｃの検索処理２０３〜２０５として、表Ｂの検索結果２１２、２１３、２１４を求める処理を行う。
【００４６】
表Ｂは、三つのバッチジョブＡ、Ｂ、Ｃで使われているので、表Ｂの検索結果２１２、２１３、２１４を求める処理は同時に行われる。また、表ＢのデータのＩ／Ｏ２０８が完了した後も、表Ａのデータがデータベースバッファ１１０に格納されたままになっているため、表Ｂの検索結果２１３を求めた処理の後に、Ｉ／Ｏを行うことなく、表Ａの検索結果２１５を求める処理を行うことができる。
【００４７】
なお、表Ｂのデータをデータベースバッファ１１０に格納する際に、表Ｄのデータをデータベースバッファ１１０から削除する。同様に、表ＣのＩ／Ｏ２０９も行い、表ＣのデータのＩ／Ｏ２０９の完了後に、バッチジョブＡの検索処理２０３として、表Ｃの検索結果２１６を求める処理を行うとともに、バッチジョブＣの検索処理２０５として、表Ｃの検索結果２１７を求める処理を行う。
【００４８】
表ＣのデータのＩ／Ｏ２０９が完了した後も、表Ａのデータがデータベースバッファ１１０に格納されたままになっているため、表Ｃの検索結果２１７を求めた処理の後に、Ｉ／Ｏを行うことなく、表Ａの検索結果２１８を求める処理を行うことができる。そして、時点２１９で全ての検索を完了する。
【００４９】
ここで、本発明の概念をより明確にするために、本発明の比較対象となるシステムについて、以下で説明する。
【００５０】
図１６は、本発明の比較対象となるシステムでバッチジョブを実行する際の概念図である。ユーザは、バッチジョブＡ〜Ｃのソースファイル１０１Ａ〜１１１Ｃからバッチジョブ中のＳＱＬで使用している表を取り出し、バッチジョブごとの表アクセス順テーブル１０２を作成する。さらに、ユーザは、表アクセス順テーブル１０２の中から、頻繁に使用する表を抜き出して、事前データベースバッファ登録テーブル１７０３に登録する。
【００５１】
例えば、ユーザは、表アクセス順テーブル１０２の中から、バッチジョブＡ、バッチジョブＢ、バッチジョブＣで参照される頻度の多い表として、表Ａと表Ｂを抜き出し、表Ａと表Ｂのデータを、外部記憶媒体のデータベース格納領域１０９からデータベースバッファ１１０へ格納するための操作を行う。
【００５２】
並行して、ユーザは、オブジェクト１１１Ａ〜１１１Ｃを実行するための操作を実行する。この際、ユーザは、Ｉ／Ｏが極力発生しないように、オブジェクト１１１Ａ〜１１１Ｃの実行順を設計して、操作を実行する。
【００５３】
この場合、データベース管理装置１１６においては、オブジェクト１１１Ａ〜１１１Ｃを実行するに際して、データベースバッファ１１０に表Ａと表Ｂのデータが登録されているので、表Ａ、表Ｂのみを参照するバッチジョブＢを最初に実行し、次に、表Ａと表Ｂへのアクセスを最初に行うバッチジョブＡを実行し、最後にバッチジョブＣを実行する。
【００５４】
この後、データベース管理装置１１６は、データベースバッファ１１０を参照しながらＳＱＬの検索結果を検索結果１１３Ａ〜１１３Ｃとして、ユーザに結果を返す。ここで、データベースバッファ１１０中に参照するデータがない場合には、データベース管理装置１１４は、データベース格納領域１０９からのデータをデータベースバッファ１１０に登録した上で、データの参照を行うことになる。
【００５５】
ユーザの操作を基にデータベース管理装置１１６でバッチジョブを実行すると、図１７に示すような処理が実行されることになる。
【００５６】
図１７は、データベース管理装置１１６におけるバッチジョブの実行時間をタイムチャートで示したものである。
【００５７】
最初に、ユーザが、バッチジョブでよく使う表を事前にデータベースバッファ１００に登録した後に、データベース管理装置１１６は、バッチジョブをＢ、Ａ、Ｃの順に実行する。即ちデータベース管理装置１１６は、ユーザの登録によるＩ／Ｏ２５２として、表ＢのデータのＩ／Ｏ２５９と、表ＡのデータのＩ／Ｏ２６０を実行する。
【００５８】
次に、データベース管理装置１１６は、バッチジョブＢの処理２５６を実行し、表Ｂの検索結果２６１を求め、次に、表Ａの検索結果２６２を求める。この後、データベース管理装置１１４は、バッチジョブＡの処理２５４を実行し、表Ａの検索結果２６３を求め、次に、表Ｂの検索結果２６４を求める。
【００５９】
この際、データベース管理装置１１６は、バッチジョブＡのＩ／Ｏ２５３では、次に表Ｃを参照するが、データベースバッファ１１０に表Ｃが格納されていないため、まず、表ＣのデータのＩ／Ｏ２６５を行い、このＩ／Ｏ２６５の完了後に、表Ｃの検索結果２６６を求める。
【００６０】
なお、データベース管理装置１１６は、表Ｃのデータをデータベースバッファ１１０に格納する際に、ＦＩＦＯ（First-In  First-Out）のルールに従って表Ａのデータをデータベースバッファ１１０から削除する。
【００６１】
次に、バッチジョブＣのＩ／Ｏ２５７を実行する。まず、データベース管理装置１１４は、表ＤのＩ／Ｏ２６７を行い、検索結果２６８を求め、次に、表Ｂの検索結果２６９を求め、表Ｃの検索結果２７０を求める。
【００６２】
最後に、データベース管理装置１１６は、表Ａの検索結果２７２を求めるが、既にデータベースバッファ１１０から、表Ａのデータを削除済みなので、再度、表ＡのＩ／Ｏ２７１を行ってから、表Ａの検索結果２７２を求め、時点２７３で全ての検索を完了する。
【００６３】
図２と図１７の結果から、本発明によれば、比較対象のシステムよりも、Ｉ／Ｏ処理回数を削減し、全てのバッチジョブの実行完了までの時間を短縮できる。
【実施例】
【００６４】
以下、本発明の一実施例を図面に基づいて説明する。図３は、計算機システムの構成図を示したものである。
【００６５】
図３において、計算機システムは、クライアント３０１と、サーバ３０２を備え、クライアント３０１は、ネットワーク３０３を介してサーバ３０２に接続されている。
【００６６】
クライアント３０１は、ユーザの操作によるクライアント端末として、プロセッサ３０４と、メモリ３０５を備えている。メモリ３０５には、バッチジョブＡ、Ｂ、Ｃのソースファイル１０１Ａ、１０１Ｂ、１０１Ｃに関する情報が格納されているとともに、バッチジョブＡ、Ｂ、Ｃのソースファイルソースファイル１０１Ａ、１０１Ｂ、１０１Ｃに関する情報をコンパイルして得られたバッチジョブ１１１Ａ、１１１Ｂ、１１１Ｃが格納されている。また、メモリ３０５には、バッチジョブ１１１Ａ、１１１Ｂ、１１１Ｃに関する検索結果１１３Ａ、１１３Ｂ、１１３Ｃを格納する領域が設けられている。
【００６７】
サーバ３０２は、データベース管理装置１２０に対応して構成され、プロセッサ（ＣＰＵ）３０６と、メモリ３０７を備え、外部記憶媒体１０４、１０９に接続されている。メモリ３０７は、Ｉ／Ｏプラン生成部３０８と、Ｉ／Ｏプラン実行部３０９と、検索結果返却部３１０から構成されるプログラムを備えているとともに、Ｉ／Ｏプラン１０７とＩ／Ｏプラン進捗管理テーブル１０８を格納する領域とデータベースバッファ１１０を備えており、メモリ３０７に格納されたデータと情報は、データベース管理システム１１４で管理されている。プロセッサ３０６は、メモリ３０７上のＩ／Ｏプラン１０７とＩ／Ｏプラン進捗管理テーブル１０８を参照しながら、メモリ３０７に展開された各部のプログラムを実行する。
【００６８】
外部記憶媒体１０４には、データベース定義情報として、例えば、表のサイズや行数に関する情報が格納されている。外部記憶媒体（以下、データベース格納領域と称する。）１０９には、複数の表のデータが格納されている。
【００６９】
Ｉ／Ｏプラン生成部３０８は、図３のＩ／Ｏプラン生成部１２１に対応するものであって、バッチジョブＡ〜Ｃのソースファイル１０１Ａ〜１０１Ｃを基に、Ｉ／Ｏコストが最小となるＩ／Ｏプラン１０７を事前に生成し、Ｉ／Ｏプラン実行部３０９は、図１のＩ／Ｏプラン実行部１２２に対応するものであって、Ｉ／Ｏプラン生成部３０８で生成されたＩ／Ｏプラン１０７に基づいて、データベース格納領域１０９からデータベースバッファ１１０にデータを登録する。
【００７０】
データベースバッファ１１０は、メモリ３０７上に配置され、複数のページに分けて構成されている。
【００７１】
検索結果返却部３１０は、図１の検索結果返却部１２３に対応するものであって、クライアント３０１からバッチジョブ１１１Ａ〜１１１Ｃに関する要求を受けたときに、この要求に基づいて、データベースバッファ１１０を参照しながら検索結果１１３Ａ〜１１３Ｃを組み立て、組み立てた検索結果１１３Ａ〜１１３Ｃをクライアント３０１に返却する。
【００７２】
その際、Ｉ／Ｏプラン実行部３０９は、データベースバッファ１１０へのＩ／Ｏのタイミングおよび、検索結果返却部３１０が、データベースバッファ１１０上の表を参照済みかどうかの状態をＩ／Ｏプラン進捗管理テーブル１０８を用いて制御する。
【００７３】
図４は、バッチジョブごとの表アクセス順テーブル（表）４００の構造を表したものである。表アクセス順テーブル４００は、図１の表アクセス順テーブル１０２に対応している。表アクセス順テーブル４００の構成要素は、バッチジョブ名４０１と、表アクセス順４０２である。バッチジョブ名４０１の各エントリ（行）には、バッチジョブＡ、Ｂ、Ｃが格納されている。表アクセス順４０２の各エントリ（行）には、バッチジョブＡ、Ｂ、Ｃに対応した表アクセス順の情報が格納されている。
【００７４】
ここで、バッチジョブＡを例に取ると、バッチジョブＡでは、表Ａ、表Ｂ、表Ｃの順に各表をアクセスすることを示している。
【００７５】
図５は、表アクセス順プラン候補テーブル（表）５００の構造を表したものである。表アクセス順プラン候補テーブル５００は、図１の表アクセス順プラン候補テーブル１０３に対応している。表アクセス順プラン候補テーブル５０３の構成要素は、候補５０１と、表アクセス順プラン５０２である。候補５１０の各エントリ（行）には、候補１〜候補ｎが格納されている。表アクセス順プラン５０２の各エントリ（行）には、各候補に対応して、各候補に属する表がアクセス順に格納されている。
【００７６】
表アクセス順プラン候補テーブル５００は、図１の表アクセス順プラン候補テーブル１０３と同様に、表アクセス順テーブル４００を基に生成される。
【００７７】
即ち表アクセス順プラン候補テーブル５００は、バッチジョブＡ、Ｂ、Ｃごとの表アクセス順テーブル４００から、バッチジョブＡ、Ｂ、Ｃごとの表アクセス順を保ったままで、取り得る全ての組み合わせから、候補１、候補２、候補３、・・・を含むテーブルとして生成される。
【００７８】
図６は、Ｉ／Ｏプラン候補テーブル（表）６００の構造を表したものである。Ｉ／Ｏプラン候補テーブル６００は、図１のＩ／Ｏプラン候補テーブル１０６に対応している。Ｉ／Ｏプラン候補テーブル６００の構成要素は、候補６０１と、表アクセス順プラン６０２と、表Ｉ／Ｏプラン６０３、Ｉ／Ｏコスト６０４である。候補６０１は、図５の候補５０１と対応し、表アクセス順プラン６０２は、図５の表アクセス順プラン５０２に対応している。
【００７９】
表Ｉ／Ｏプラン６０３の各エントリ（行）には、各候補に対応して、表アクセス順プラン６０２の中からＩ／Ｏが必要な表が格納されている。Ｉ／Ｏコスト６０４の各エントリ（行）には、各候補に対応して、表Ｉ／Ｏプラン６０３に属する表のページ数の総和がコストとして格納されている。なお、表Ｉ／Ｏプラン６０３とＩ／Ｏコスト６０４の算出方法については、図１３のフローチャートの中で説明する。
【００８０】
図７は、Ｉ／Ｏタイミングテーブル（表）７００の構造を表したものである。Ｉ／Ｏタイミングテーブル７００は、図６のＩ／Ｏプラン候補テーブル１０６を作成する際に、作成する中間表である。Ｉ／Ｏタイミングテーブル７００の構成要素は、表の出現順序番号７０１、表名７０２、必要なデータベースバッファページ数７０３、Ｉ／Ｏ要否７０４、参照する回数７０５からなる。
【００８１】
表の出現順序番号７０１には、表の出現順序を示す番号、例えば、１〜９が格納されている。表名７０２には、表の出現順序番号７０１毎に、表名、例えば、候補３の場合として、表Ｄ、表Ａ、表Ｂ、表Ｂ、表Ｂ、表Ａ、表Ｃ、表Ｃ、表Ａが格納されている。必要なデータベースバッファページ数７０３には、例えば、候補３の場合として、表Ｄ、表Ａ、表Ｂ、表Ｂ、表Ｂ、表Ａ、表Ｃ、表Ｃ、表Ａに対応して、必要なデータベースバッファページ数＝２、４、４、４、４、４、２、２、４が格納されている。
【００８２】
Ｉ／Ｏ要否７０４には、候補３の場合として、表Ｄ、表Ａ、表Ｂ、表Ｂ、表Ｂ、表Ａ、表Ｃ、表Ｃ、表Ａに対応して、Ｉ／Ｏ要否＝要、要、要、否、否、否、要、否、否が格納されている。参照する回数７０５には、例えば、候補３の場合として、表Ｄ、表Ａ、表Ｂ、表Ｂ、表Ｂ、表Ａ、表Ｃ、表Ｃ、表Ａに対応して、検索結果返却部３１０がデータベースバッファ１１０を参照する回数＝１、３、３、０、０、０、２、０、０が格納されている。なお、Ｉ／Ｏタイミングテーブル７００の詳細は、図１３のフローチャートの中で説明する。
【００８３】
図８は、データベースバッファ１１０のシミュレーション状態を表したシミュレーションテーブル（表）８００である。シミュレーションテーブル８００は、図７のＩ／Ｏタイミングテーブル７００を作成する際に、作成する中間表であり、Ｉ／Ｏタイミングテーブル７００の表の出現順番号７０１の１番目（表Ｄ）と２番目（表Ａ）までを、データベースバッファ１１０に登録した状態を表している。シミュレーションテーブル８００の構成要素は、データベースバッファＩＤ８０１、表の名称８０２、表の出現順番号８０３からなる。
【００８４】
データベースバッファＩＤ８０１の各エントリ（行）には、８ページ分のページを識別するための番号０００１〜０００８が格納されている。表の名称８０２の各エントリ（行）には、表の名称が格納されている。なお、表の名称８０２が「ｎｕｌｌ」の行は、データベースバッファ１１０に表が格納されていない状態を表している。表の出現順番号８０３には、各エントリ（行）には、表の出現順を示す番号が格納される。表の出現順番号８０３は、データベースバッファ１１０に空領域がなくなったときに、データベースバッファ１１０から削除する候補の表を決定する際に使用する。なお、表の出現順番号８０３の初期値は０である。シミュレーションテーブル８００の詳細については、図１３のフローチャートの中で説明する。
【００８５】
図９は、データベースバッファ１１０のシミュレーション状態を表したシミュレーションテーブル（表）９００である。シミュレーションテーブル９００は、図７のＩ／Ｏタイミングテーブル７００を作成する際に、作成する中間表であり、図８のシミュレーションテーブル８００を作成した後に、表Ｂをデータベースバッファ１１０へ登録する際に、データベースバッファ１１０から削除する表を決定する際の状態を表している。シミュレーションテーブル９００の構成要素は、データベースバッファＩＤ９０１、表の名称９０２、表の出現順番号９０３からなる。
【００８６】
データベースバッファＩＤ９０１の各エントリ（行）には、８ページ分のページを識別するための番号０００１〜０００８が格納されている。表の名称９０２の各エントリ（行）には、表の名称が格納されている。表の出現順番号９０３には、各エントリ（行）には、表の出現順を示す番号が格納される。シミュレーションテーブル９００の詳細については、図１３のフローチャートの中で説明する。
【００８７】
図１０は、Ｉ／Ｏプラン１０７の構造を表したＩ／Ｏプランテーブル（表）１０００である。Ｉ／Ｏプランテーブル１０００の構成要素は、表のＩ／Ｏ処理順１００１、必要なデータベースバッファページ数１００２、参照する回数１００３である。
【００８８】
表のＩ／Ｏ処理順１００１の各エントリ（行）には、表のＩ／Ｏ処理の順に表が格納される。必要なデータベースバッファページ数１００２の各エントリ（行）には、表のＩ／Ｏ処理順１００１に格納された表に対応して、必要なデータベースバッファページ数が数値で格納される。参照する回数１００３の各エントリ（行）には、表のＩ／Ｏ処理順１００１に格納された表に対応して、検索結果返却部３１０がデータベースバッファ１１０を参照する回数が数値で格納される。
【００８９】
図１０のＩ／Ｏプランテーブル１０００は、表のＩ／Ｏ処理順１００１に格納された表に対応して、図７のＩ／Ｏタイミングテーブル７００から、Ｉ／Ｏ要否７０４が「要」となる列を抜き出したものを示している。
【００９０】
具体的には、表Ｄを例に取ると、必要なデータベースバッファページ数１００２の「２」は、表Ｄをデータベースバッファ１１０に格納するためには、２ページが必要であることを表し、参照する回数１００３の「１」は、バッチジョブの実行時に、検索結果返却部３１０によって一回だけ、表Ｄのデータが参照されることを表している。なお、表Ｄのデータは、検索結果返却部３１０によって一回参照された後は、データベースバッファ１１０から削除できることを表している。
【００９１】
図１１は、Ｉ／Ｏプラン進捗管理テーブル（表）１１００の構造を表したものである。Ｉ／Ｏプラン進捗管理テーブル１１００は、図１のＩ／Ｏプラン進捗管理テーブル１０８に対応しており、図７のＩ／Ｏタイミングテーブル７００の表の出現順番号７０１の１番目（表Ｄ）と２番目（表Ａ）までを、データベースバッファ１１０に登録した状態を表している。
【００９２】
Ｉ／Ｏプラン進捗管理テーブル１１００の構成要素は、表のＩ／Ｏ処理順１１０１、必要なバッファページ数１１０２、参照する回数１１０３、Ｉ／Ｏ状態１１０４、参照済み回数１１０５、使用状態１１０６、バッファアウト済みページ数１１０７であり、図１０のＩ／Ｏプランテーブル１０００に、Ｉ／Ｏ進捗状況を表す、Ｉ／Ｏ状態１１０４、参照済み回数１１０５、使用状態１１０６、バッファアウト済みページ数１１０７を加えたものである。
【００９３】
表のＩ／Ｏ処理順１０１１の各エントリ（行）には、表のＩ／Ｏ処理の順に表が格納される。必要なデータベースバッファページ数１１０２の各エントリ（行）には、表のＩ／Ｏ処理順１１０１に格納された表に対応して、必要なデータベースバッファページ数が数値で格納される。参照する回数１１０３の各エントリ（行）には、表のＩ／Ｏ処理順１１０１に格納された表に対応して、検索結果返却部３１０がデータベースバッファ１１０を参照する回数が数値で格納される。
【００９４】
Ｉ／Ｏ状態１１０４の各エントリ（行）には、表のＩ／Ｏ処理順１１０１に格納された表に対応して、表のＩ／Ｏが完了したか否かの情報が格納される。例えば、Ｉ／Ｏが未完の状態では「null」が、Ｉ／Ｏが完了したら「Ｉ／Ｏ完」が格納される。参照済み回数１１０５の各エントリ（行）には、表のＩ／Ｏ処理順１１０１に格納された表に対応して、検索結果返却部３１０がデータベースバッファ１１０の表を参照し、当該表が参照済みとなった回数が格納される。参照済み回数１１０５が「null」の場合は、検索結果返却部３１０がデータベースバッファ１１０の表を現在使用中か、未使用状態を表している。
【００９５】
使用状態１１０６の各エントリ（行）には、表のＩ／Ｏ処理順１１０１に格納された表に対応して、検索結果返却部３１０がデータベースバッファ１１０の表を参照し、当該表が使用済みになったか否かの情報が格納される。例えば、参照する回数１１０３と、参照済み回数１１０５が一致すると、使用状態１１０６に「使用済み」が格納される。バッファアウト済みページ数１１０７の各エントリ（行）には、表のＩ／Ｏ処理順１１０１に格納された表に対応して、データベースバッファ１１０から削除された表のページ数が数値で格納される。なお、Ｉ／Ｏプラン進捗管理テーブル１１００の詳細については、図１４、図１５のフローチャートの中で説明する。
【００９６】
図１２は、Ｉ／Ｏプラン進捗管理テーブル（表）１２００の構造を表したものである。Ｉ／Ｏプラン進捗管理テーブル１２００は、図７のＩ／Ｏタイミングテーブル７００の表の出現順番号７０１の１番目（表Ｄ）から５番目（表Ｂ）までを、データベースバッファ１１０に登録した状態を表したものであって、それ以外は、Ｉ／Ｏプラン進捗管理テーブル１１００と同様である。なお、Ｉ／Ｏプラン進捗管理テーブル１２００の詳細については、図１４、図１５のフローチャートの中で説明する。
【００９７】
図１３は、Ｉ／Ｏプラン生成部３０８において、図５の表アクセス順プラン候補テーブル５００から図６のＩ／Ｏプラン候補テーブル６００を生成する処理を、フローチャートで表したものである。
【００９８】
以下、表アクセス順プラン候補テーブル５００からＩ／Ｏプラン候補テーブル６００を生成する処理を図１３のフローチャートに従って説明する。
【００９９】
まず、Ｉ／Ｏプラン生成部３０８は、ステップ１４０１にて、図５の表アクセス順プラン候補テーブル５００の情報から、図７に示すＩ／Ｏタイミングテーブル７００を作成する。
【０１００】
具体的には、図５の表アクセス順プラン候補テーブル５００に含まれる表の出現順番号７０１、表名７０２を取得する。例えば、候補３の場合、Ｉ／Ｏタイミングテーブル７００を生成するための表名として、「表Ｄ、表Ａ、表Ｂ、表Ｂ、表Ｂ、表Ａ、表Ｃ、表Ｃ、表Ａ」を取得し、取得した表名を、表の出現順番号７０１にそれぞれ設定するとともに、各表について、外部記憶媒体１０４のデータベース定義情報から表の列長、行長を取得し、必要なデータベースバッファページ数を以下の式により算出し、算出した値を各表についての必要なデータベースバッファページ数として設定する。
【０１０１】
必要なデータベースバッファページ数
＝↑表の列長×行数÷データベースバッファの１ページのサイズ↑
注  ↑↑は、少数第一位を繰り上げることを示す。
【０１０２】
上記の処理により、Ｉ／Ｏタイミングテーブル７００の表名７０２には、表の出現順番号７０１の１〜９に対応して、「表Ｄ、表Ａ、表Ｂ、表Ｂ、表Ｂ、表Ａ、表Ｃ、表Ｃ、表Ａ」が格納され、Ｉ／Ｏタイミングテーブル７００の必要なデータベースバッファページ数７０３には、表の出現順番号７０１の１〜９に対応して、「２、４、４、４、４、４、２、２、４」が格納される。
【０１０３】
次に、Ｉ／Ｏプラン生成部３０８は、Ｉ／Ｏタイミングテーブル７００に基づいて、データベースバッファ１１０の状態をシミュレーションしながら、Ｉ／Ｏ要否を判断する。
【０１０４】
具体的には、Ｉ／Ｏプラン生成部３０８は、ステップ１４０２にて、オンライン終了時に、データベースバッファ１１０の状態を取得し、オンライン終了時に、既にＩ／Ｏ済みの表をシミュレーションテーブル８００に反映する。
【０１０５】
例えば、オンライン終了時に、既にＩ／Ｏ済みの表が存在する場合、この表の番号を、該当するデータベースバッファＩＤ８０１の行にコピーするとともに、表名を表の名称８０２にコピーし、これをシミュレーションテーブル８００の初期状態とする。
【０１０６】
次に、Ｉ／Ｏプラン生成部３０８は、１４０３にて、データベースバッファ１１０へ登録する表名を取得し、ステップ１４０４にて、取得した表名が、既にデータベースバッファ１１０にある表かどうかをチェックする。
【０１０７】
即ちステップ１４０４において、もし処理対象の表がデータベースバッファ１１０にない表であれば、ステップ１４０５でデータベースバッファ１１０に空があるかどうかをチェックする。ステップ１４０５において、もしデータベースバッファ１１０に空がない状態であれば、ステップ１４０６でデータベースバッファ１１０から削除する表の優先順位付けを行う。ステップ１４０６では、現在処理中の表よりも後に参照する表のうちで、先に現れる表れる表を、出来るだけデータベースバッファ１１０から削除しないようにすることとしている。
【０１０８】
例えば、候補３の場合、Ｉ／Ｏプラン生成部３０８は、データベースバッファ１１０へ登録する表名として、「表Ｄ、表Ａ、表Ｂ、表Ｂ、表Ｂ、表Ａ、表Ｃ、表Ｃ、表Ａ」の中から、最初の表として、表Ｄを取得し、取得した表Ｄをシミュレーションテーブル８００のデータベースバッファＩＤ８０１の行に１ページ分設定し、シミュレーションテーブル８００に現在処理中の表Ｄがページ数分存在するか否かを判定する（Ｓ１４０４）。
【０１０９】
ここで、Ｉ／Ｏプラン生成部３０８は、肯定の判定結果を得たときにはステップＳ１４１０の処理に移行し、否定の判定結果を得たときにはステップＳ１４０５の処理に移行し、シミュレーションテーブル８００に、現在処理中の表Ｄが収まるか否かを判定し、このとき、肯定の判定結果を得たときにはステップＳ１４０７の処理に移行し、否定の判定結果を得たときにはステップＳ１４０６の処理に移行する。
【０１１０】
取得した表Ｄをシミュレーションテーブル８００のデータベースバッファＩＤ８０１の行に１ページ分設定した場合、Ｉ／Ｏプラン生成部３０８は、Ｓ１４０４では、シミュレーションテーブル８００に現在処理中の表Ｄが、ページ数分存在しないと判定し、ステップＳ１４０５では、シミュレーションテーブル８００に現在処理中の表Ｄが収まると判定し、ステップＳ１４０７では、取得した表Ｄについて、シミュレーションテーブル８００のデータベースバッファＩＤ８０１の行に２ページ分設定する。
【０１１１】
ステップＳ１４０７において、Ｉ／Ｏプラン生成部３０８は、シミュレーションテーブル８００の行を、現在処理中の表Ｄが必要とするデータベースバッファ１１０のページ数分だけ書き換える。
【０１１２】
このとき、現在処理中の表をデータベースバッファ１１０に格納した場合の、データベースバッファ１１０の状態をシミュレーションするに際して、データベースバッファＩＤの優先順位は、以下のように設定されている。
【０１１３】
（１）表が格納されていないバッファＩＤの行に設定する。
（２）表の出現順番号が空欄の行に設定する。これは、データベースバッファ１１０に空がなければ、今後は使わない表をデータベースバッファ１１０から追い出すためである。
（３）表の出現順番号の値が大きい行に設定する。これは、今後使わない表でも不足する場合は、直近で使わないためである。
【０１１４】
この後、Ｉ／Ｏプラン生成部３０８は、１番目の表Ｄに関しては、最初に出現した表であって、Ｉ／Ｏを必要とするため、シミュレーションテーブル８００のＩ／Ｏ要否７０４に「要」を格納し（Ｓ１４０８）、さらに、後に、表Ｄが出現しないので、シミュレーションテーブル８００の表出現順番号８０３を「０」クリアし（Ｓ１４０９）、次の表があるか否かを判定する（Ｓ１４１０）。
【０１１５】
ステップＳ１４１０では、Ｉ／Ｏプラン生成部３０８は、１番目の表Ｄの次に、２番目の表Ａが存在するため、次の表があると判定し、この後、処理対象表を次の表Ａに設定し（Ｓ１４１１）、ステップＳ１４０４に戻り、ステップＳ１４０４〜Ｓ１４１１の処理を繰り返す。
【０１１６】
２番目の表Ａについて、ステップＳ１４０４〜Ｓ１４１１の処理を実行すると、表Ｄで同様の処理が行われ、２番目の表Ａについて、シミュレーションテーブル８００のデータベースバッファＩＤ８０１の行に、４ページ分設定されるとともに、Ｉ／Ｏタイミングテーブル７００のＩ／Ｏ要否７０４に「要」が格納される。ただし、表Ａは、この後、６番目に出現するので、図９のシミュレーションテーブル９００に示すように、表の出現順番号９０３には、「６、６、６、６」が４ページ分格納される。
【０１１７】
この後、表Ｂが選択され、３番目の表Ｂについて、ステップＳ１４０４〜Ｓ１４１１の処理が実行されると、３番目の表Ｂについては、そのままでは２ページ分不足し、データベースバッファ１１０に収めることができないので、上記優先順位に従った処理が行われる。
【０１１８】
これにより、３番目の表Ｂについては、シミュレーションテーブル８００のデータベースバッファＩＤ９０１の行のうち「０００１」と「０００２」に２ページ分設定され、データベースバッファＩＤ９０１の行のうち「０００７」と「０００８」に２ページ分設定され、Ｉ／Ｏタイミングテーブル７００のＩ／Ｏ要否７０４に「要」が格納される。
【０１１９】
一方、この後、表Ｂとして、４番目の表Ｂと５番目の表Ｂが順次選択されるが、シミュレーションテーブル９００に、現在処理中の表がページ数分存在するとして、次の６番目の表Ａが選択される。６番目の表Ａについても、シミュレーションテーブル９００に、現在処理中の表がページ数分存在するとして、次の７番目の表Ｃが選択される。
【０１２０】
４番目の表Ｂと５番目の表Ｂおよび６番目の表Ａについては、シミュレーションテーブル９００に表Ｂと表Ａが既に存在し、新にＩ／Ｏを行う必要がないので、Ｉ／Ｏタイミングテーブル７００のＩ／Ｏ要否７０４に「否」が格納されることになる。
【０１２１】
これに対して、７番目の表Ｃにつては、最初に出現する表であって、Ｉ／Ｏを必要とする。このため、７番目の表Ｃについて、ステップＳ１４０４〜Ｓ１４１１の処理が実行される過程で、上記優先順位に従った処理が行われる。
【０１２２】
これにより、７番目の表Ｃについては、表Ｂの代わりに、シミュレーションテーブル８００のデータベースバッファＩＤ９０１の行のうち「０００１」と「０００２」に２ページ分設定され、Ｉ／Ｏタイミングテーブル７００のＩ／Ｏ要否７０４に「要」が格納される。
【０１２３】
この後、８番目の表Ｃと９番目の表Ａが順次選択されるが、８番目の表Ｃと９番目の表Ａについては、シミュレーションテーブル９００に表Ｃと表Ａが既に存在し、新にＩ／Ｏを行う必要がないので、Ｉ／Ｏタイミングテーブル７００のＩ／Ｏ要否７０４に「否」が格納されることになる。
【０１２４】
この後、Ｉ／Ｏプラン生成部３０８は、ステップＳ１４１０で次の表がないと判定したときには、ステップＳ１４１２に移行し、Ｉ／Ｏタイミングテーブル７００のＩ／Ｏ要否７０４が「要」となっている表、例えば、１番目の表Ｄ、２番目の表Ａ、３番目の表Ｂ、７番目の表Ｃに、それぞれＩ／Ｏなしで、参照される回数として、「１」、「３」、「３」、「２」を設定し、このルーチンでの処理を終了する。
【０１２５】
以上の処理によって、Ｉ／Ｏタイミングテーブル７００が生成されるので、  Ｉ／Ｏタイミングテーブル７００からＩ／Ｏプラン候補テーブル６００を作成することができる。Ｉ／Ｏプラン候補テーブル６００の表Ｉ／Ｏプラン６０３は、Ｉ／Ｏタイミングテーブル７００のＩ／Ｏ要否７０４が「要」の表名を抜き出したものであって、Ｉ／Ｏを行う表を順に示したものである。
【０１２６】
また、Ｉ／Ｏプラン候補テーブル６００のＩ／Ｏコスト６０４は、Ｉ／Ｏタイミングテーブル７００のうちで、Ｉ／Ｏ要否が「要」となる表について、必要となるデータベースバッファページ数の総和を求めたものである。
【０１２７】
従って、Ｉ／Ｏプラン候補テーブル６００の表Ｉ／Ｏプラン６０３の中らか、Ｉ／Ｏコスト６０４が最小となる表Ｉ／Ｏプラン６０３を選択することで、例えば、候補１〜候補ｎの中から最もＩ／Ｏが少ないＩ／Ｏプランとして、Ｉ／Ｏの実行順序が表Ｄ、表Ａ、表Ｂ、表Ｃとなる、候補３を選択することができる。
【０１２８】
図１４は、Ｉ／Ｏプラン実行部３０９の処理をフローチャートで表したものである。
【０１２９】
以下、Ｉ／Ｏプラン実行部３０９の処理を図１４のフローチャートに従って説明する。まず、Ｉ／Ｏプラン実行部３０９は、ステップ１５０１にて、図１０の  Ｉ／Ｏプランテーブル１０００から作成したＩ／Ｏプラン進捗管理テーブル１１００を参照し、表のＩ／Ｏ処理順１１０１の表Ｄ、表Ａ、表Ｂ、表Ｃの中ら、Ｉ／Ｏが未処理の表として、例えば、表Ｄを取得する。
【０１３０】
次に、Ｉ／Ｏプラン実行部３０９は、ステップ１５０２にて、データベースバッファ１１０に空があるかどうかチェックし、空があればステップ１５０６にて、データベース格納領域１０９からデータベースバッファ１１０に表Ｄのデータをコピーし、ステップ１５０７にて、Ｉ／Ｏプラン進捗管理テーブル１１００のＩ／Ｏ状態１１０４を「Ｉ／Ｏ完」に設定する。
【０１３１】
次に、Ｉ／Ｏプラン実行部３０９は、ステップ１５０８にて、未処理の表があるか否かを判定し、ないときには、このルーチンでの処理を終了し、あるときには、ステップＳ１５０１に戻り、未処理の表として、表Ａを取得し、表Ａについて、ステップＳ１５０１〜Ｓ１５０８の処理を繰り返す。
【０１３２】
Ｉ／Ｏプラン実行部３０９は、ステップ１５０２にて、データベースバッファ１１０に空があるかどうかチェックし、空があればステップ１５０６にて、データベース格納領域１０９からデータベースバッファ１１０に表Ａのデータをコピーし、ステップ１５０７にて、Ｉ／Ｏプラン進捗管理テーブル１１００のＩ／Ｏ状態１１０４を「Ｉ／Ｏ完」に設定する。
【０１３３】
即ちデータベースバッファ１１０には、８ページ分の領域があるので、表Ｄのデータをデータベースバッファ１１０に登録した後、表Ａのデータをデータベースバッファ１１０に登録することができる。
【０１３４】
一方、表Ｄと表Ａのデータをデータベースバッファ１１０に登録した後、未処理の表として、表Ｂを取得すると、表Ｂは、４ページ分要するので、Ｉ／Ｏプラン実行部３０９は、ステップ１５０２にて、データベースバッファ１１０に空がないと判定する。
【０１３５】
この場合、Ｉ／Ｏプラン実行部３０９は、Ｉ／Ｏプラン進捗管理テーブル１１００のうち使用状態１１０６が「使用済み」となった表、例えば、表Ｄを、Ｉ／Ｏが完了し、「使用済み」であるとして、データベースバッファ１１０から、表Ｄのデータを１ページ分削除し、Ｉ／Ｏプラン進捗管理テーブル１１００の削除済ページ数１１０７をカウントアップして、「１」とする。
【０１３６】
この後、Ｉ／Ｏプラン実行部３０９は、表Ｄについては、Ｓ１５０２〜Ｓ１５０５の処理を繰り返し、データベースバッファ１１０から、表Ｄのデータをさらに１ページ分削除し、Ｉ／Ｏプラン進捗管理テーブル１１００の削除済ページ数１１０７をカウントアップして、「２」とする。
【０１３７】
この場合、Ｉ／Ｏプラン進捗管理テーブル１１００は、図１２に示すように、Ｉ／Ｏプラン進捗管理テーブル１２００となり、必要なデータベースバッファページ数１２０２の「２」と、削除済みページ数１２０７の「２」が一致した時点で、データベースバッファ１１０から表Ｄのデータが削除されたことになる。
【０１３８】
一方、Ｉ／Ｏプラン実行部３０９は、表Ａの後、未処理の表として、表Ｂを取得したときに、データベースバッファ１１０に表Ｄと表Ａのデータが存在するときには、表ＢについてのＩ／Ｏが実行できないので、データベースバッファ１１０から表Ｄのデータが削除されるのを待って、表Ｂのデータをデータベース格納領域１０９からデータベースバッファ１１０に登録するとともに、Ｉ／Ｏプラン進捗管理テーブル１２００のＩ／Ｏ状態１２０４に「Ｉ／Ｏ完」を格納する。
【０１３９】
次に、Ｉ／Ｏプラン実行部３０９は、表Ｂの後、未処理の表として、表Ｃを取得したときに、データベースバッファ１１０に表Ａと表Ｂのデータが存在するときには、表ＣについてのＩ／Ｏが実行できないので、Ｉ／Ｏプラン進捗管理テーブル１２００のうち使用状態１２０６が「使用済み」となるまで待つ。例えば、表Ｂについて、Ｉ／Ｏが完了し、Ｉ／Ｏプラン進捗管理テーブル１２００のうち使用状態１２０６が「使用済み」となるのを待つ。
【０１４０】
表Ｂについて、Ｉ／Ｏが完了し、Ｉ／Ｏプラン進捗管理テーブル１２００の使用状態１２０６が「使用済み」になると、Ｉ／Ｏプラン実行部３０９は、
表Ｂについては、Ｓ１５０２〜Ｓ１５０５の処理を繰り返し、データベースバッファ１１０から、表Ｂのデータを１ページ分ずつ削除し、データベースバッファ１１０から表Ｂのデータを削除する。
【０１４１】
この後、Ｉ／Ｏプラン実行部３０９は、データベースバッファ１１０に空きができたことを条件に、表Ｃのデータをデータベース格納領域１０９からデータベースバッファ１１０に登録する。
【０１４２】
これにより、Ｉ／Ｏプラン実行部３０９は、図２に示すように、Ｉ／Ｏ実行処理２０２として、表Ｄ、表Ａ、表Ｂ、表Ｃの順に全てのバッチジョブのＩ／Ｏ処理を短時間で実行することができる。
【０１４３】
図１５は、検索結果返却部３１０の処理を、フローチャートで表したものである。
【０１４４】
以下、検索結果返却部３１０の処理を図１５のフローチャートに従って説明する。まず、検索結果返却部３１０は、ステップ１６０１にて、クライアント３０１からのＳＱＬ実行処理を受け付ける。
【０１４５】
次に、検索結果返却部３１０は、ステップ１６０２にて、Ｉ／Ｏプラン進捗管理テーブル１１００または１２００を参照し、ＳＱＬ中の未検索の表を取得する。処理の表を順番に処理する。
【０１４６】
その際、検索結果返却部３１０は、ステップ１６０３にて、Ｉ／Ｏプラン進捗管理テーブル１１００または１２００の未処理の表のＩ／Ｏ状態１１０４または１２０４が「Ｉ／Ｏ完」であれば、表を参照し、Ｉ／Ｏ状態１１０４または１２０４が「null」であれば、ステップ１６０４にて一定時間ウェイトし、Ｉ／Ｏが完了するまで、ステップ１６０３とステップ１６０４の処理を繰り返して、待ち合わせを行う。
【０１４７】
例えば、検索結果返却部３１０は、ＳＱＬ中の未検索の表として、表Ｄを取得したときに、Ｉ／Ｏプラン進捗管理テーブル１１００を参照し、Ｉ／Ｏプラン進捗管理テーブル１１００の未処理の表のＩ／Ｏ状態１１０４が「Ｉ／Ｏ完」であれば、表ＤのＩ／Ｏ処理についてデータベースバッファ１１０を検索し、検索結果を処理し（Ｓ１６０５）、Ｉ／Ｏプラン進捗管理テーブル１１００に対して、表Ｄの参照済み回数１１０５をカウントアップする（Ｓ１６０６）。
【０１４８】
このとき、Ｉ／Ｏプラン進捗管理テーブル１１００において、参照する回数１１０３と参照済み回数１１０５が一致した場合、検索結果返却部３１０は、Ｉ／Ｏプラン進捗管理テーブル１１００の使用状態１１０６を「使用済み」に設定する。
【０１４９】
次に、検索結果返却部３１０は、未処理の表があるか否かを判定し（Ｓ１６０７）、未処理の表があるときには、ステップＳ１６０２に戻り、ステップＳ１６０２〜Ｓ１６０７の処理を繰り返す。
【０１５０】
例えば、表Ｄの後、検索結果返却部３１０は、未処理の表として、表Ａを取得したときには、表Ａについて、ステップＳ１６０２〜Ｓ１６０７の処理を繰り返す。
【０１５１】
即ち検索結果返却部３１０は、Ｉ／Ｏプラン進捗管理テーブル１１００を参照し、Ｉ／Ｏプラン進捗管理テーブル１１００の未処理の表のＩ／Ｏ状態１１０４が「Ｉ／Ｏ完」であれば、表ＡのＩ／Ｏ処理についてデータベースバッファ１１０を検索し、検索結果を処理し（Ｓ１６０５）、Ｉ／Ｏプラン進捗管理テーブル１１００に対して、表Ａの参照済み回数１１０５をカウントアップする（Ｓ１６０６）。
【０１５２】
このとき、Ｉ／Ｏプラン進捗管理テーブル１１００において、参照する回数１１０３と参照済み回数１１０５が一致した場合、検索結果返却部３１０は、Ｉ／Ｏプラン進捗管理テーブル１１００の使用状態１１０６を「使用済み」に設定する。
【０１５３】
この後、検索結果返却部３１０は、未処理の表として、表Ｂまたは表Ｃを取得した場合、表Ｂまたは表Ｃについて、ステップＳ１６０２〜Ｓ１６０７の処理を繰り返す。
【０１５４】
この場合、検索結果返却部３１０は、Ｉ／Ｏプラン進捗管理テーブル１２００を参照し、Ｉ／Ｏプラン進捗管理テーブル１２００の未処理の表のＩ／Ｏ状態１２０４が「Ｉ／Ｏ完」であれば、表Ｂまたは表ＣのＩ／Ｏ処理についてデータベースバッファ１１０を検索し、検索結果を処理し（Ｓ１６０５）、Ｉ／Ｏプラン進捗管理テーブル１２００に対して、表Ｂまたは表Ｃの参照済み回数１１０５をカウントアップする（Ｓ１６０６）。
【０１５５】
このとき、Ｉ／Ｏプラン進捗管理テーブル１２００において、参照する回数１２０３と参照済み回数１２０５が一致した場合、検索結果返却部３１０は、Ｉ／Ｏプラン進捗管理テーブル１２００の使用状態１２０６を「使用済み」に設定する。
【０１５６】
一方、ステップＳ１６０７で、検索結果返却部３１０は、未処理の表がないときには、各表についての検索結果をクライアント３０１のユーザに返却し、このルーチンでの処理を終了する。
【０１５７】
本実施例によれば、短時間でバッチジョブを実行するための入出力処理プランを生成することができる。
【０１５８】
また、本実施例によれば、バッチジョブに属する表のＩ／Ｏを、Ｉ／Ｏコストが最小となる順で行うことで、短時間でバッチジョブを実行することができる。
【０１５９】
また、本実施例によれば、Ｉ／Ｏを極力行わずにデータベースバッファ１１０のデータを再利用しながらバッチジョブを実行することによって、短時間でバッチジョブを実行することができる。
【符号の説明】
【０１６０】
１０１Ａ〜１１１Ｃ  ソースファイル
１０２  表アクセス順テーブル
１０３  表アクセス順プラン候補テーブル
１０６  Ｉ／Ｏプラン候補テーブル
１０７  Ｉ／Ｏプラン
１０８  Ｉ／Ｏプラン進捗管理テーブル
１０９  データベース格納領域
１１０  データベースバッファ
１１１Ａ〜１１１Ｃ  オブジェクト
１１３Ａ〜１１３Ｃ  検索結果
１２１  Ｉ／Ｏプラン生成部
１２２  Ｉ／Ｏプラン実行部
１２３  検索結果返却部
３０１  クライアント
３０２  サーバ
３０６  プロセッサ
３０７  メモリ
３０８  Ｉ／Ｏプラン生成部
３０９  Ｉ／Ｏプラン実行部
３１０  Ｉ／Ｏプラン実行部
【図１】
2011096185.tif 000003
【図２】
2011096185.tif 000004
【図３】
2011096185.tif 000005
【図４】
2011096185.tif 000006
【図５】
2011096185.tif 000007
【図６】
2011096185.tif 000008
【図７】
2011096185.tif 000009
【図８】
2011096185.tif 000010
【図９】
2011096185.tif 000011
【図１０】
2011096185.tif 000012
【図１１】
2011096185.tif 000013
【図１２】
2011096185.tif 000014
【図１３】
2011096185.tif 000015
【図１４】
2011096185.tif 000016
【図１５】
2011096185.tif 000017
【図１６】
2011096185.tif 000018
【図１７】
2011096185.tif 000019