(57)【要約】【課題】クエリの実行途中にセーブポイントを生成することは困難であること。【解決手段】クライアントから発行されたバッチ処理に係るクエリを実行するデータベース装置は、トランザクション制御部と自動セーブポイント生成部とを含む。トランザクション生成部は、クエリの実行計画を作成し、実行計画の各ステップの進捗状況をトランザクション進捗管理テーブルに記録しながらクエリを実行する。自動セーブポイント生成部は、進捗状況を含むセーブポイントのデータをセーブポイント管理テーブルに記録する。【選択図】図２７
2018136815.tif 000002
【特許請求の範囲】
【請求項１】
クライアントから発行されたバッチ処理に係るクエリを実行するデータベース装置であって、
前記クエリの実行計画を作成し、前記実行計画の各ステップの進捗状況をトランザクション進捗管理テーブルに記録しながら前記クエリを実行するトランザクション制御部と、
前記進捗状況を含むセーブポイントのデータをセーブポイント管理テーブルに記録する自動セーブポイント生成部と、
を含むデータベース装置。
【請求項２】
セーブポイントを前回生成してから予め定められた時間が経過すると、クエリの実行中であるか否かを問わずに、セーブポイント生成命令を前記自動セーブポイント生成部に発行するトランザクション監視部を、更に含む、
請求項１に記載のデータベース装置。
【請求項３】
前記自動セーブポイント生成部は、前記セーブポイントのデータ形式として予め定められた複数種類の中から、セーブポイントへ復帰するまでに要する時間を計算して、最も短い時間で復帰できる種類を選択する、
請求項１または２に記載のデータベース装置。
【請求項４】
前記種類の１つは、更新されたＦＡＳＴ構造の構成要素の差分をセーブポイントのデータとして保存するデータ形式である、
請求項３に記載のデータベース装置。
【請求項５】
値リスト変更バッファを、更に有し、
前記自動セーブポイント生成部は、セーブポイントの書き出し、読み込みに前記値リスト変更バッファを利用する、
請求項４に記載のデータベース装置。
【請求項６】
前記セーブポイントのデータを使用して、前記バッチ処理を前記セーブポイントから再開するトランザクション復旧部を、更に含む、
請求項１乃至５の何れかに記載のデータベース装置。
【請求項７】
前記データベース装置に接続されたディスク装置を、更に有し、
前記ディスク装置に前記セーブポイント管理テーブルのコピーを記録する、
請求項１乃至６の何れかに記載のデータベース装置。
【請求項８】
クライアントから発行されたバッチ処理に係るクエリを実行するデータベース装置が実行するバッチ処理管理方法であって、
前記クエリの実行計画を作成し、前記実行計画の各ステップの進捗状況をトランザクション進捗管理テーブルに記録しながら前記クエリを実行し、
前記進捗状況を含むセーブポイントのデータをセーブポイント管理テーブルに記録する、
バッチ処理管理方法。
【請求項９】
クライアントから発行されたバッチ処理に係るクエリを実行するコンピュータを、
前記クエリの実行計画を作成し、前記実行計画の各ステップの進捗状況をトランザクション進捗管理テーブルに記録しながら前記クエリを実行するトランザクション制御部と、
前記進捗状況を含むセーブポイントのデータをセーブポイント管理テーブルに記録する自動セーブポイント生成部と、
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアントから発行されたクエリを実行するデータベース装置、バッチ処理管理方法、及びプログラムに関する。
【背景技術】
【０００２】
複数のクエリを含むバッチ処理の中断が発生しても、バッチ処理を効率的に再実行するデータベース装置が特許文献１に記載されている。
【０００３】
特許文献１に記載されたデータベース装置（以下、本発明に関連するデータベース装置と記す）では、バッチ処理の実行において各クエリが完了する毎にセーブポイントを生成する。これにより、バッチ処理が規定時間内に終わらないために一旦中断して後刻に再開する場合、バッチ処理の最初からでなく未実行のクエリの先頭から再開できるようにしている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−９１９５号公報
【特許文献２】特許第４４２５３７７号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、リソース不足等の理由によってバッチ処理の中断はクエリの実行中にも発生する。本発明に関連するデータベース装置では、クエリの実行途中にセーブポイントを生成することは困難である。そのため、クエリの実行途中に中断が生じると、中断したクエリをその最初から実行しなければならない無駄がある。
【０００６】
本発明の目的は、上述した課題を解決するデータベース装置を提供することにある。
【課題を解決するための手段】
【０００７】
本発明の一形態に係るデータベース装置は、
クライアントから発行されたバッチ処理に係るクエリを実行するデータベース装置であって、
前記クエリの実行計画を作成し、前記実行計画の各ステップの進捗状況をトランザクション進捗管理テーブルに記録しながら前記クエリを実行するトランザクション制御部と、
前記進捗状況を含むセーブポイントのデータをセーブポイント管理テーブルに記録する自動セーブポイント生成部と、
を含む。
【０００８】
本発明の他の形態に係るバッチ処理管理方法は、
クライアントから発行されたバッチ処理に係るクエリを実行するデータベース装置が実行するバッチ処理管理方法であって、
前記クエリの実行計画を作成し、前記実行計画の各ステップの進捗状況をトランザクション進捗管理テーブルに記録しながら前記クエリを実行し、
前記進捗状況を含むセーブポイントのデータをセーブポイント管理テーブルに記録する。
【０００９】
本発明の他の形態に係るプログラムは、
クライアントから発行されたバッチ処理に係るクエリを実行するコンピュータを、
前記クエリの実行計画を作成し、前記実行計画の各ステップの進捗状況をトランザクション進捗管理テーブルに記録しながら前記クエリを実行するトランザクション制御部と、
前記進捗状況を含むセーブポイントのデータをセーブポイント管理テーブルに記録する自動セーブポイント生成部と、
して機能させる。
【発明の効果】
【００１０】
本発明は上述した構成を有することにより、クエリの実行途中であってもセーブポイントを生成することができる。これにより、中断したクエリの実行開始から中断までの間にセーブポイントが生成されていれば、そのクエリの実行途中から再開することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の第１の実施形態の構成例を示す図である。
【図２】本発明の第１の実施形態において、バッチ処理の開始後、クエリが終わった時点やクエリの実行途中でセーブポイント（静止点）を自動的に取得する様子、およびアボート後にクエリの途中からバッチ処理を再開している様子を示す図である。
【図３】本発明の第１の実施形態におけるセーブポイント管理テーブルの構成例を示す図である。
【図４】本発明の第１の実施形態におけるトランザクション進捗管理テーブルの構成例を示す図である。
【図５】本発明の第１の実施形態における値リスト変更バッファの構成例を示す図である。
【図６】本発明の第１の実施形態において、クライアントからデータベース装置にバッチトランザクションを対話的に実行した際にトランザクションが途中でアボートした例を示す図である。
【図７】本発明の第１の実施形態において、自動セーブポイントからトランザクションを再開した例を示す図である。
【図８】本発明の第１の実施形態におけるトランザクション制御部がクエリを受信したときに行う処理の一例を示すフローチャートである。
【図９】本発明の第１の実施形態において、トランザクションの開始時に作成されるトランザクション進捗管理テーブルのレコードの例を示す図である。
【図１０】本発明の第１の実施形態において、クエリ実行の準備が整った時点のトランザクション進捗管理テーブルのレコードの例を示す図である。
【図１１】本発明の第１の実施形態における実行計画のシリアライズ化の一例を示す図である。
【図１２】本発明の第１の実施形態において、トランザクションの処理開始時のトランザクション進捗管理テーブルのレコードの例を示す図である。
【図１３】本発明の第１の実施形態におけるトランザクション制御部によるトランザクションの処理例を示すフローチャートである。
【図１４】本発明の第１の実施形態におけるトランザクション監視部の処理例を示すフローチャートである。
【図１５】本発明の第１の実施形態におけるトランザクション制御部がコミット／ロールバックの命令を受けた時に実行する処理例を示すフローチャートである。
【図１６】本発明の第１の実施形態における自動セーブポイント生成部の処理例を示すフローチャートである。
【図１７】本発明の第１の実施形態におけるトランザクション進捗管理テーブルに記録される実行計画、進捗フラグ、及び処理にかかった時間の例を示す図である。
【図１８】本発明の第１の実施形態におけるセーブポイントのデータの種類、特徴、及びコスト計算方法の例を示す図である。
【図１９】本発明の第１の実施形態における処理再開時点のセーブポイント管理テーブルの例を示す図である。
【図２０】本発明の第１の実施形態において、操作履歴の形式のセーブポイントのデータを使用して復帰する動作を説明する図である。
【図２１】本発明の第１の実施形態において、直前からの差分の形式のセーブポイントのデータを使用して復帰する動作を説明する図である。
【図２２】本発明の第１の実施形態において、値リスト変更バッファを使用して、値リストをセーブポイントまで復帰する動作を説明する図である。
【図２３】本発明の第２の実施形態の構成図である。
【図２４】ＦＡＳＴ構造データベースの説明図である。
【図２５】ＦＡＳＴ構造データベースにおける表の各行へのアクセス方法の説明図である。
【図２６】ＦＡＳＴ構造データベースにおけるソート処理の説明図である。
【図２７】本発明の第３の実施形態の構成図である。
【発明を実施するための形態】
【００１２】
[第１の実施形態]
次に本発明の第１の実施形態について図面を参照して詳細に説明する。
【００１３】
＜本実施形態が解決しようとする課題＞
一般的なデータベースにおいて、長時間のバッチ処理が途中でアボートしてしまうと、大幅な時間のロスとなる。そのため、バッチ処理の途中でコミットし、バックアップを取り、やり直す場合はリストアを行う、といった運用がされてきた。あるいは、各処理の合間にテーブルのスナップショットを取り、これをセーブポイントとして発行し、途中でアボートした場合にセーブポイントから再実行できるようにするという運用がされてきた。しかし、処理の都度、バックアップを取ったり、セーブポイントを頻繁に発行するといった運用は煩雑になりがちである。そのうえ、バックアップやセーブポイントを取るタイミングはクエリが終わったタイミングでしか取れず、一つのクエリが長い時間かかる状況では、その直前のクエリが完了した時点までしかたどり着けない。メモリ不足や突然の電源断など、正しい処理にも関わらずデータベース外の要因によって強制的にアボートされてしまう場合に、再度同一のクエリを実行することになり大きな時間のロスが発生してしまう。これらのことは大量データのバッチ処理にも優れたＦＡＳＴ（Ｆｉｌｔｅｒ  Ａｒｒａｙ  ＳＴｒｕｃｔｕｒｅ）構造を用いた列指向データベースでも同様のことが言える。
【００１４】
ここで、ＦＡＳＴ構造について説明しておく。収集したデータの集計を行い、他システムと連携できるようにデータの加工を行うといったバッチ処理は昔からあるが、近年増大するデータ量を効率よく扱うために、列指向データベースを使ったバッチ処理が近年広く利用され始めている。列指向データベースの中には特許文献２などに開示されたデータベースシステムなどが提案されている。この技術では、図２４に示すように、昇順かつ重複の内容にデータを格納した値リスト、値リストへの参照を意味する値番号の組を用いて、表の１つの列を表現している。このデータ構造がＦＡＳＴ構造と呼ばれている。表の各行へのアクセスは、図２５に示すように、順序集合、値番号をたどることで行うことができる。行番号に対応する順序集合の要素が値番号の添え字であり、値番号の要素は値リストの添え字となっている。このようにＦＡＳＴ構造のデータベースは順序集合、値番号、値リストという３つのベクトルにデータを分解される。このようにすることで、直接文字列などのデータを扱うことなく、整数値で管理されている順序集合や値番号での操作だけで完結させることができるケースがある。また、その多くはシーケンシャルなメモリアクセスであり、キャッシュヒット率も高く良好な性能をもたらす。図２６に示すソートの例のように、実際の値を格納している値リストを参照することなく処理が完結することも可能となる。
【００１５】
＜本実施形態による解決手段＞
本実施形態では、バッチ処理中に自動で不揮発なセーブポイントを生成する。これにより、手動でのバックアップやリストア、セーブポイントの発行を伴わずに簡単にバッチ処理が再開できる。また図２に示すように、バッチ処理の途中でアボートが起きてもバッチ処理を再開することが可能となる。
【００１６】
また本実施形態では、クエリの途中であってもセーブポイントが生成される。これにより、長いクエリがあるバッチ処理では、再開の時間が短くて済む。
【００１７】
また本実施形態では、クエリ中の処理時間が短い操作は復旧時にその操作を実施し、そうでないものは、データの差分を保存し、復旧時にこれを用いる。このとき、ＦＡＳＴ構造において、順序集合と値番号はその整数配列を記録し、値リストは変化する場所と変更後のデータのリストを差分として記録する。順序集合と値番号は整数配列であり、容量が小さくなりやすく、値リストは更新前後で格納されているデータの件数が少ないことが多い。そのため、上述のようにすることにより、データの使用量を削減し、ディスク装置のＩ／Ｏ負荷を軽減できる。これによって高速なセーブポイントの作成とセーブポイントへの復旧を実現する。
【００１８】
＜本実施形態の構成＞
本実施形態の構成について、図１を用いて説明する。本実施形態のデータベースシステムの構成要素は、大きく分けてデータベース装置１、データベース装置１から見えるディスク装置２、およびクライアント３がある。
【００１９】
またデータベース装置１は、トランザクション進捗管理テーブル１０、トランザクション制御部１１、トランザクション復旧部１２、トランザクション監視部１３、自動セーブポイント生成部１４、値リスト変更バッファ１５、作業用メモリ１６、ユーザテーブル１７、データベース管理テーブル１８、及び、セーブポイント管理テーブル１９を含んでいる。トランザクション進捗管理テーブル１０、値リスト変更バッファ１５、作業用メモリ１６、ユーザテーブル１７、データベース管理テーブル１８、及び、セーブポイント管理テーブル１９は、データベース装置１を構成する主記憶部に設けられる。また、トランザクション進捗管理テーブル１０、ユーザテーブル１７、データベース管理テーブル１８、及び、セーブポイント管理テーブル１９は、主記憶部上のＦＡＳＴ構造型データベース管理領域に設けられている。一方、トランザクション制御部１１、トランザクション復旧部１２、トランザクション監視部１３、及び、自動セーブポイント生成部１４は、データベース装置１を構成するＣＰＵ等の演算処理部に所定のプログラムを実行させることによって実現される。
【００２０】
またディスク装置２は、ＦＡＳＴ構造型データベース記憶領域２１とセーブポイント記憶領域２２とを含む。
【００２１】
クライアント３は、データベース装置１と通信することができ、これは複数あってもよい。クライアント３からデータベース装置２にバッチトランザクション開始の通知を送ると、トランザクション制御部１１がこれを受け、トランザクションＩＤを発行し、トランザクション制御を行う。トランザクション制御の方法は多々あるが、本実施形態はそのどれを用いてもよい。また、トランザクション制御部１１は、トランザクション進捗管理テーブル１０にトランザクションの進捗状況を記入する。
【００２２】
トランザクション監視部１２は、トランザクション進捗管理テーブル１０を監視し、前回の実行から自動セーブポイント間隔Ｔより経過しているか、クエリ完了が確認されたタイミングで、自動セーブポイント生成部１４にセーブポイントを生成するように命令を送る。
【００２３】
トランザクション復旧部１３は、アボートされたトランザクションを再開する際の処理を行う部品である。トランザクション復旧部１３は、トランザクション進捗管理テーブル１０とセーブポイント管理テーブル１９を参照して、復旧処理を実施する。
【００２４】
自動セーブポイント生成部１４は、トランザクション進捗管理テーブル１０とセーブポイント管理テーブル１９を更新し、セーブポイントを作成する。
【００２５】
セーブポイント管理テーブル１９は、セーブポイントの管理を行うテーブルで、図３に示すようなデータを格納する。このセーブポイント管理テーブル１９は、トランザクションとセーブポイント、およびセーブポイント記憶領域２２との関係が記録される。セーブポイント管理テーブル１９のレコードは、トランザクションＩＤ、セーブポイントＩＤ、ステータス、実行計画、進捗フラグ、各処理にかかった時間、データの種類、データの保存先、コスト、といったカラムを有する。
【００２６】
トランザクション進捗管理テーブル１０は、トランザクションの進捗情報が記録されるテーブルで、図４に示すようなデータを格納する。トランザクション進捗管理テーブル１０のレコードは、トランザクションＩＤ、ステータス、前回の時刻、実行計画、進捗フラグ、各処理にかかった時間、といったカラムを有する。
【００２７】
値リスト変更バッファ１５は、自動セーブポイントが有効な場合において、問合せの途中結果として生成されるＦＡＳＴ構造のテーブルの値リストが元々あるテーブルと異なる場合にその差分を記録するバッファであり、図５に示すようなヘッダとデータを格納する。
【００２８】
作業用メモリ１６は、クライアントからの問合せ中に使われる汎用的な一時バッファであり、本実施形態では特に用途を定めない。また、ユーザテーブル１７、データベース管理テーブル１８は、ＦＡＳＴ構造ではあるが、一般的なデータベースと同様の用途であり、本実施形態では特に用途を定めない。
【００２９】
セーブポイント記憶領域２２は、セーブポイントのデータを管理するディスク装置上の記憶領域であり、ＦＡＳＴ構造型データベース記憶領域２１に格納されるデータ構造とは異なる。換言すれば、セーブポイント記憶領域２２は、バッチ処理再開に必要な情報を永続的に管理するディスク上の記憶領域である。セーブポイント記憶領域２２には、少なくともセーブポイント管理テーブル１９のコピーが記憶される。またセーブポイント記憶領域２２には、セーブポイント管理テーブル１９の保存先カラムに記載された保存先のデータが記録される。セーブポイント記憶領域２２は、主記憶部のセーブポイント管理テーブル１９と常に同期がとれている。
【００３０】
ＦＡＳＴ構造型データベース記憶領域２１は、ＦＡＳＴ構造型データベースのデータを永続的に管理するディスク上の記憶領域である。主記憶部のＦＡＳＴ構造型データベース管理領域上にあるコミットされたデータと常に同期がとれている。
【００３１】
＜本実施形態の動作＞
＜自動セーブポイント概要＞
クライアント３からデータベース装置１にバッチトランザクションを対話的に実行した場合の例を図６に示す。この図６の例は、クエリの実行途中でメモリ不足になってしまい、トランザクションが途中でアボートしたことを示している。ただし、自動セーブポイントがいくつか生成されており、図７に示すように自動セーブポイントからトランザクションを再開することが可能であることを示している。
【００３２】
＜トランザクション処理＞
バッチ処理が開始されるときの、トランザクション制御部１１の動作を、図８を用いて説明する。まず、トランザクション制御部１１は、トランザクションが開始されると、トランザクション進捗管理テーブル１０に図９に示すようにステータスをＷＡＩＴとしてレコードを追加する（ステップＳ１）。次にトランザクション制御部１１は、クライアントからクエリが来たら、パースを行い、実行計画を生成する（ステップＳ２）。そして、トランザクション制御部１１は、図１０に示すように、先ほどトランザクション進捗管理テーブル１０に追加したレコードを更新する（ステップＳ２）。即ち、実行計画をシリアライズしたデータ＜Ｔｒｅｅ＞に、実行計画の各処理に対応する進捗フラグをすべて０に、各処理にかかった時間を０に、ステータスをＡＣＣＥＰＴＥＤに更新する。実行計画のシリアライズは、例えば図１１に示すようにすることで実現できる。ここまででクエリ実行の準備ができたことになる。
【００３３】
次にトランザクション制御部１１は、図１２に示すように、トランザクション進捗管理テーブル１０の先ほど追加したレコードの前回の時刻カラムに現在時刻を設定し、ステータスをＲＵＮＮＩＮＧとし、処理を始める（ステップＳ３）。このようにトランザクション進捗管理テーブル１０に進捗状況を書き込むことで、他のスレッドやプロセス（たとえば、トランザクション監視部１３など）からも可視になる。
【００３４】
次にトランザクション制御部１１は、ステータスがＲＵＮＮＩＮＧとなっているテーブルに対し、通常の関係データベースのように、実行計画のツリーのリーフから順番に処理をしていく。この時の処理を図１３に示す。図１３に示すように、トランザクション制御部１１は、実行計画の各処理が終わる度にトランザクション進捗管理テーブル１０の進捗フラグを立て、更新していく（ステップＳ１１）。次にトランザクション制御部１１は、実行計画をすべて終えたタイミングで、トランザクション進捗管理テーブル１０に登録したレコードのステータスをＷＡＩＴとし、自動セーブポイント生成部１４に生成命令を発行する（ステップＳ１２）。そして、トランザクション制御部１１は、次のクエリか、或いはコミット／ロールバックの命令がクライアントから送信されるのを待つ。
【００３５】
ところで、トランザクション監視部１３は、トランザクション制御部１１とは独立して、図１４に示すようなフローチャートにしたがって定期的にトランザクション進捗管理テーブル１０を監視する（ステップＳ２１）。トランザクション監視部１３は、トランザクション進捗管理テーブル１０のステータスがＲＵＮＮＩＮＧであり、監視タイミングにおける時刻が前回の時刻＋自動セーブポイント間隔Ｔよりも大きいレコードを発見すると（ステップＳ２２でＹｅｓ）、自動セーブポイント生成部１４に生成命令を発行する（ステップＳ２３）。
【００３６】
トランザクション制御部１１がコミット／ロールバックの命令を受けるときの処理手順を図１５に示す。コミットまたは明示的なロールバック命令は、このトランザクションが確定か無効であるかを決定することを意味し、中間結果が不要になる。そのため、トランザクション制御部１１は、トランザクション進捗管理テーブル１０から該当するレコードを削除し（ステップＳ３１）、自動セーブポイント生成部１４に自動セーブポイントの削除命令を発行して（ステップＳ３２）、トランザクションのコミット／ロールバックを実行し、クローズする。
【００３７】
＜自動セーブポイントの生成＞
自動セーブポイント生成部１４は、自動セーブポイント作成命令を受けると、図１６に示すような処理にしたがって自動セーブポイントの作成を行う。まず、自動セーブポイント生成部１４は、トランザクション制御部１１、トランザクション監視部１３の処理を一時停止する（ステップＳ４１）。そして、自動セーブポイント生成部１４は、セーブポイント管理テーブル１９を用いて、対象のトランザクションＩＤにおけるセーブポイントのＩＤを０から順に採番する（ステップＳ４２）。そして、自動セーブポイント生成部１４は、この時のトランザクションのステータス、実行計画、進捗フラグ、処理時間をトランザクション進捗管理テーブル１０から取得する（ステップＳ４３）。次に自動セーブポイント生成部１４は、これらの取得した情報から自動セーブポイントの保存形式を決定する（ステップＳ４４）。即ち、自動セーブポイント生成部１４は、後述するコスト算出を行い、最もコストが小さくなる保存形式を選択する。自動セーブポイント生成部１４は、保存形式が決まったら、その形式でデータファイル（セーブポイントファイル）を作成する（ステップＳ４５）。また、このときの保存先、コストを取得する（ステップＳ４５）。ここまで済んだところで、自動セーブポイント生成部１４は、図３に示すセーブポイント管理テーブル１９に新たにレコードを追加する（ステップＳ４６）。このとき追加するレコードには、上記対象のトランザクションＩＤ、採番されたセーブポイントＩＤ、トランザクション進捗管理テーブルから取得されたステータス、実行計画、進捗フラグ、各処理にかかった時間、選択されたデータの種類、作成したデータファイルの保存先、コストが記録される。その後、自動セーブポイント生成部１４は、トランザクション進捗管理テーブル１０の前回の時刻のカラムに現在の時刻を設定し（ステップＳ４７）、トランザクション制御部１１、トランザクション監視部１３の動作を再開させる（ステップＳ４８）。
【００３８】
＜自動セーブポイントの削除＞
自動セーブポイント生成部１４は、トランザクション制御部１１から上述した自動セーブポイントの削除命令を受けると、自動セーブポイントの削除命令の対象となるトランザクションＩＤのセーブポイントファイルをすべて削除し、セーブポイント管理テーブル１９の対象のトランザクションＩＤのレコードを削除することで、自動セーブポイントの削除を行う。
【００３９】
＜セーブポイントの保存形式＞
本実施形態では、セーブポイントの保存形式として、図１８のデータの種類の欄に記載するように、「操作履歴」、「直前からの差分」、「開始時点からの差分」の３種類を用意する。
【００４０】
操作履歴の保存形式は、差分データを記録せず、セーブポイント復帰時に実行計画にしたがって次に進捗フラグを付けるべき操作をし直すことを表す。
【００４１】
直前からの差分の保存形式は、直前に発行したセーブポイントから新たに追加・更新された、順序集合、値番号、値リストを差分として保存する方法を表す。順序集合、値番号は、その整数配列をそのまますべて書きだす。一方、値リストの差分は、図５に示すように、変更元となる値リストの情報（対象となるテーブルやカラム）を記載したヘッダと、変更方法、変更場所を記載したデータ部とから成る値リスト変更バッファの情報を保存する。これは、ＦＡＳＴ構造の値リストは処理によって使いまわせるケースが多く、すべてを書きだすよりも変更を記録することで、作成時間の短縮と復旧時の処理速度を上げるためである。
【００４２】
開始時点からの差分の保存形式は、バッチトランザクションが開始した時点から新たに追加された順序集合、値番号、値リストを差分として保存する方法を表す。
【００４３】
＜コスト算出＞
セーブポイントの保存形式を選択する際に行うコスト算出について説明する。トランザクション進捗管理テーブル１０には、実行計画の各処理について、処理時間が図１７に示すように記録されている。自動セーブポイント生成部１４は、この各処理の処理時間等を参照し、図１８に示すコスト計算方法に従って各保存形式のコスト（復帰に要する時間）を計算する。
【００４４】
自動セーブポイント生成部１４は、操作履歴の保存形式では、実行計画の各処理の処理時間に係数をかけたものをコストとして算出する。またデータの差分（直前からの差分の保存形式）の場合、自動セーブポイント生成部１４は、ディスクからの読み込みや適用に掛かる推定時間をコストとして計上する。計算されたコストが最小のものを採用することで、軽量な処理の場合は操作履歴を、最終的に生成されるデータが軽量の場合は直前からの差分が、履歴が複雑な場合は開始時点からの差分が選ばれやすくなる。
【００４５】
＜セーブポイントからの再開＞
セーブポイントからの再開処理について、図１９に示すセーブポイント管理テーブル１９の例を用いて説明する。まず、トランザクション復旧部１２は、再開時に指定するトランザクションＩＤと一致するレコードをセーブポイント管理テーブル１９から検索する。トランザクションＩＤが１２３４６のトランザクションをセーブポイントＩＤ＝４から再開する図１９の場合、トランザクション復旧部１２は、トランザクションＩＤが１２３４６のレコードすべてを選択する。次にトランザクション復旧部１２は、選択したレコードのうち、再開時に指定するセーブポイントＩＤより小さい中で、「開始時点からの差分」を保存しているもっとも大きいセーブポイントＩＤのレコードを探す。図１９の場合はセーブポイントＩＤが２のレコードがこれに該当する。そして、トランザクション復旧部１２は、そのレコードから再開時に指定しているセーブポイントＩＤまでのレコードの情報を元に、順番に復旧の処理を実行していく。図１９の場合、トランザクション復旧部１２は、先ずセーブポイントＩＤ＝２のセーブポイントに復旧し、次にセーブポイントＩＤ＝３のセーブポイントに復旧し、最後にセーブポイントＩＤ＝４のセーブポイントに復旧することになる。もし再開時に指定するセーブポイントＩＤより小さいセーブポイントＩＤが、上記選択したレコードにない場合は、トランザクション復旧部１２は、セーブポイントＩＤが０のレコードから順番に、再開時に指定しているセーブポイントＩＤまで実行する。
【００４６】
操作履歴を使ってセーブポイントまで復旧する方法を図２０に示す。トランザクション復旧部１２は、実行計画の進捗状況から次に行うべき処理が分かるので、それを通常通りのトランザクション処理として行えばよい。
【００４７】
直前からの差分のデータを使ってセーブポイントまで復旧する方法を図２１に示す。トランザクション復旧部１２は、処理の対象が元々あるテーブルの場合であれば、元々のテーブルをワークメモリ内に取り込んだのち、順序集合、値番号はセーブポイントに保存されたデータに置き換える。またトランザクション復旧部１２は、値リストについては、図２２に示すように、保存された値リスト変更バッファを適用し、復旧を行う。このとき、値リスト変更バッファがシリアライズ化されて保存されている場合、デシリアライズ化して使用する。
【００４８】
開始時点からの差分のデータを使ってセーブポイントまで復旧する方法は、直前からの差分のデータを使ってセーブポイントまで復旧する方法と同じである。
【００４９】
＜本実施形態の特徴＞
以上のように本実施形態は、以下の点を特徴とする。
（１）バッチ処理中に自動的にセーブポイント（バッチ処理の復帰点）を発行できる自動セーブポイント生成部１４や関連する部品を有しているＦＡＳＴ構造のデータベース装置１である点。
（２）自動セーブポイント生成部１４は、バッチ処理中のクエリが長い場合は、クエリの途中でもセーブポイントを発行する点。
（３）セーブポイントは、不揮発性のデータ（ディスクに書き込む）のため、電源断やクエリのアボートが起きても復帰が可能な点。
（４）セーブポイントは、「操作の履歴」、「開始時点との差分」、「直前との差分」の３種類の保存形式があり、再開時の実行時間が最短となるように自動的に決定される点。
（５）セーブポイントに用いる差分として、ＦＡＳＴ構造の構成要素である値番号、値リスト、順序集合の変化する部分を差分として記録する点。このとき、順序集合と値番号はその配列を記録し、値リストは元となるテーブルの値リストに対して、追加・削除・更新されるところだけの差分を記録する値リスト変更バッファ１５を利用する点。このようにすることで、ＦＡＳＴ構造の構成要素の性質を活かし、セーブポイントの作成時間と再開時の処理時間の短縮を図る点。
【００５０】
＜本実施形態の効果＞
本実施形態によれば、上記特徴を有することにより、バッチ処理中に予測していなかった電源断やアボートが発生しても、効率よくバッチ処理の再開が可能である。
【００５１】
また本実施形態によれば、データ差分をＦＡＳＴ構造の構成要素レベルでみた差分とすることで、テーブルデータすべての保存が入らず、セーブポイントの作成もセーブポイントへの復帰も高速に行うことができる。
【００５２】
例えば、売上明細情報を蓄積していたデータベースから分析用データベースに月末の夜間にデータを加工したうえで投入するようなシステムがあったとする。このシステムは稼働当初はデータ量に対して十分なサーバメモリを搭載していたが、当月はたまたま想定外に売上がよく、データ量が当初想定していた量を大きく上回り、バッチ処理が全体の８０％程度終わっていたところでメモリが枯渇しアボートしてしまったとする。この場合、メモリを増強すればアボートの回避は可能だが、ここまでのバッチ処理が数時間要してしまった場合、もう一度最初から始めてしまうと翌日の業務が支障をきたす恐れがある。本発明を適用すると、自動で処理の途中にセーブポイントが発行され、そこから再開できるので、影響を最小限に食い止めることができる。
【００５３】
［第２の実施形態］
本発明の第２の実施形態の構成を図２３に示す。本実施形態では、第１の実施形態におけるデータベース装置１と同じものを２つ用意し、一方のデータベース装置１Ａを稼働系、他方のデータベース装置１Ｂを待機系とし、また、ディスク装置２を共有ストレージ２Ａに置き換えている。
【００５４】
２つデータベース装置１Ａ、１Ｂは、共有ストレージ２Ａに接続されている。トランザクション開始前のデータは、共有ストレージ２ＡのＦＡＳＴ構造型データベース記憶領域２１にあり、バッチ処理再開に必要な情報が共有ストレージ２Ａのセーブポイント記憶領域２２にある。ここで、稼働系のデータベース装置１Ａがバッチ処理中に故障した場合、バッチ処理再開に必要な情報が全て共有ストレージ２Ａにあるため、クライアント３が待機しているデータベース装置１Ｂにつなぎ直すことで、バッチ処理を再開することが可能である。
【００５５】
［第３の実施形態］
図２７は、本発明の第３の実施形態に係るデータベース装置１００の構成図である。図２７を参照すると、データベース装置１００は、クライアント１０１から発行されたクエリを実行する機能を有する。データベース装置１００は、トランザクション制御部１０２と自動セーブポイント生成部１０３とを含む。
【００５６】
トランザクション制御部１０２は、クライアント１０１から発行されたバッチ処理に係るクエリの実行計画を作成し、その実行計画の各ステップ（各処理）の進捗状況をトランザクション進捗管理テーブル１０４に記録しながらクエリを実行する。
【００５７】
自動セーブポイント生成部１０３は、クエリの実行計画の各ステップの進捗状況を含むセーブポイントのデータをセーブポイント管理テーブル１０５に記録する。
【００５８】
このように構成されたデータベース装置１００は、以下のように動作する。即ち、クライアント１０１からクエリが発行されると、トランザクション制御部１０２は、クエリの実行計画を作成し、その実行計画の各ステップの進捗状況をトランザクション進捗管理テーブル１０４に記録しながらクエリを実行する。また、自動セーブポイント生成部１０３は、例えば前回セーブポイントを生成した時刻から予め定められた時間が経過すると、クエリ実行途中であってもセーブポイントを生成する。このとき自動セーブポイント生成部１０３は、クエリの実行計画の各ステップの進捗状況を含むセーブポイントのデータをセーブポイント管理テーブル１０５に記録する。
【００５９】
このように本実施形態によれば、クエリの実行途中であってもセーブポイントを生成することができる。また、クエリの実行計画の各ステップの進捗状況を含むセーブポイントのデータがセーブポイント管理テーブル１０５に記録される。これにより、中断したクエリの実行開始から中断までの間にセーブポイントが生成されていれば、そのクエリの実行途中から再開することができる。
【００６０】
以上、本発明を幾つかの実施形態を挙げて説明したが、本発明は以上の実施形態にのみ限定されず、その他各種の付加変更が可能である。例えば、本発明はＦＡＳＴ構造のデータベースにのみ限定されず、関係データベース等の他の形式のデータベースにも適用できる。
【産業上の利用可能性】
【００６１】
本発明は、クライアントから発行されたクエリを実行するデータベース装置全般に利用できる。
【符号の説明】
【００６２】
１…データベース装置
１Ａ…データベース装置（稼働系）
１Ｂ…データベース装置（待機系）
２…ディスク装置
２Ａ…共有ストレージ
３…クライアント
１０…トランザクション進捗管理テーブル
１１…トランザクション制御部
１２…トランザクション復旧部
１３…トランザクション監視部
１４…自動セーブポイント生成部
１５…値リスト変更バッファ
１６…作業用メモリ
１７…ユーザテーブル
１８…データベース管理テーブル
１９…セーブポイント管理テーブル
２１…ＦＡＳＴ構造型データベース記憶領域
２２…セーブポイント記憶領域
１００…データベース装置
１０１…クライアント
１０２…トランザクション制御部
１０３…自動セーブポイント生成部
１０４…トランザクション進捗管理テーブル
１０５…セーブポイント管理テーブル
【図１】
2018136815.tif 000003
【図２】
2018136815.tif 000004
【図３】
2018136815.tif 000005
【図４】
2018136815.tif 000006
【図５】
2018136815.tif 000007
【図６】
2018136815.tif 000008
【図７】
2018136815.tif 000009
【図８】
2018136815.tif 000010
【図９】
2018136815.tif 000011
【図１０】
2018136815.tif 000012
【図１１】
2018136815.tif 000013
【図１２】
2018136815.tif 000014
【図１３】
2018136815.tif 000015
【図１４】
2018136815.tif 000016
【図１５】
2018136815.tif 000017
【図１６】
2018136815.tif 000018
【図１７】
2018136815.tif 000019
【図１８】
2018136815.tif 000020
【図１９】
2018136815.tif 000021
【図２０】
2018136815.tif 000022
【図２１】
2018136815.tif 000023
【図２２】
2018136815.tif 000024
【図２３】
2018136815.tif 000025
【図２４】
2018136815.tif 000026
【図２５】
2018136815.tif 000027
【図２６】
2018136815.tif 000028
【図２７】
2018136815.tif 000029