(57)【特許請求の範囲】
【請求項１】
計算機に制御されるディスクドライブに格納されたデータベースの再編成方法であって、
前記ディスクドライブは、データベースを格納する第一のボリュームと、前記第一のボリュームとペアを構成して前記データベースの複製を格納する第二のボリュームとを含み、
前記計算機がデータベースのトランザクションを静止化する処理と、
前記第一のボリュームと前記第二のボリュームのペアを分割して、前記第一のボリュームに対してのみ、前記データベースのアクセスを行うように設定する処理と、
前記トランザクションの静止化を解除する処理と、
前記第二のボリュームのデータベースから疎の空間を特定する処理と、
前記第二のボリュームのうち、前記特定した疎の空間についてのみ部分的に再編成を行う処理と、
前記部分的な再編成を行った第二のボリュームの内容を前記第一のボリュームに複写して、前記第一のボリュームと前記第二のボリュームとのペアを再同期する処理と、を含み、
前記第二のボリュームのデータベースから疎の空間を特定する処理は、
前記データベースのデータ領域について、再編成の単位領域毎に、実際のデータ量を全データ量で除した比率を演算する処理と、
前記比率が所定の第１の比率以下の場合には、当該単位領域を部分的な再編成の対象領域として特定する処理と、
を含むことを特徴とするデータベースの再編成方法。
【請求項２】
前記データベースのデータ領域について、再編成の単位領域毎に、実際のデータ量を全データ量で除した比率を演算する処理は、
前記単位領域を構成するブロックのうち、データを満たしたブロックの数を、前記単位領域を構成するブロックの数で除した比率を充填率として演算し、
当該単位領域を部分的な再編成の対象領域として特定する処理は、
前記充填率が所定の第１の比率以下の場合には、当該単位領域を部分的な再編成の対象領域として特定することを特徴とする請求項１に記載のデータベースの再編成方法。
【請求項３】
前記疎の空間を特定する処理は、
前記データベースの索引領域について、再編成の単位領域毎に不連続性を示す値をＩ／Ｏコストとして算出する処理と、
前記Ｉ／Ｏコストが所定の第２の値を超えた場合には、当該単位領域を部分的な再編成の対象領域として特定する処理と、を含んで、前記充填率と前記Ｉ／Ｏコストの少なくとも一方から前記疎の空間を特定し、
前記不連続性を示す値をＩ／Ｏコストとして算出する処理は、
前記索引領域の再編成単位領域は、前記データベースを検索する検索キーを格納するキー値を含んで構成され、前記キー値のうち、隣り合うキー値の第二ボリューム上の物理的な位置の距離を示す値を前記Ｉ／Ｏコストとして算出することを特徴とする請求項１に記載のデータベースの再編成方法。
【請求項４】
前記第一または第二のボリュームのデータベースを所定の周期で監視する処理を含み、
前記データベースのうち更新されたデータの比率が所定の比率を超えたとき、または削除されたデータの比率が所定の比率を超えたときに、前記トランザクションを静止化する処理を開始し、部分的なデータベースの再編成を行うことを特徴とする請求項１に記載のデータベースの再編成方法。
【請求項５】
前記ディスクドライブは、前記データベースへのアクセスによって生成されるログを格納する第三のボリュームと、前記第二のボリュームに格納されたデータベースの内容の複製を格納可能なアンロード用ボリュームとを含み、
前記第二のボリュームを部分的に再編成する処理は、
前記第二のボリュームに格納されたデータベースのうち前記特定した疎の空間を前記アンロード用ボリュームに論理的に複写する処理と、
前記複写が完了した第二のボリュームのうち前記特定した疎の空間を初期化する処理と、
前記アンロード用ボリュームに格納されたデータベースの内容を前記第二のボリュームに物理的に複写する処理と、
前記トランザクションの静止化以後のログを前記第三のボリュームから取得し、前記第二のボリュームに格納されたデータベースに当該ログを適用することを特徴とする請求項１に記載のデータベースの再編成方法。
【請求項６】
ホストコンピュータによってアクセスされるデータベースと、
前記データベースを格納する第一のボリュームと、前記第一のボリュームとペアを構成し、前記データベースの複製を格納する第二のボリュームとを含むディスクドライブを有するストレージ装置と、を備えるデータベースシステムにおいて、
前記ホストコンピュータは、
前記データベースの再編成を制御するデータベース再編成制御部と、を備え、
前記ストレージ装置は、
前記ホストコンピュータからの制御信号を受け付けるホストインタフェースと、
前記データベース再編成制御部からの指令に応じてディスクドライブに格納されたデータベースを再編成するデータベース再編成処理部と、を有し、
前記データベース再編成処理部は、
前記第二のボリュームのデータベースから疎の空間を特定する部分再編成対象特定部と、
前記第二ボリュームのうち前記特定した疎の空間についてのみ部分的に再編成を行う部分再編成実行部と、
前記部分的な再編成を行った第二のボリュームの内容を前記第一のボリュームに複写して、前記第一のボリュームと前記第二のボリュームとのペアを再同期する再同期部と、
を備え、
前記部分再編成対象特定部は、
前記データベースのデータ領域について、再編成の単位領域毎に、実際のデータ量を全データ量で除した比率を算出する満杯ブロック比率算出部を有し、
前記比率が所定の第１の比率以下の場合には、当該単位領域を部分的な再編成の対象領域として特定することを特徴とするデータベースシステム。
【請求項７】
前記部分再編成対象特定部は、
前記データベースのデータ領域について、再編成の単位領域毎に、前記単位領域を構成するブロックのうち、データを満たしたブロックの数と、前記単位領域を構成するブロックの数との比率を充填率として算出する満杯ブロック比率算出部を有し、
前記充填率が所定の第１の比率以下の場合には、当該単位領域を部分的な再編成の対象領域として特定することを特徴とする請求項６に記載のデータベースシステム。
【請求項８】
前記部分再編成対象特定部は、
前記データベースの索引領域について、再編成の単位領域毎に不連続性を示す値をＩ／Ｏコストとして算出するＩ／Ｏコスト算出部を有し、
前記Ｉ／Ｏコストが所定の第２の値を超えた場合には、当該単位領域を部分的な再編成の対象領域として特定し、前記充填率と前記Ｉ／Ｏコストの少なくとも一方から前記疎の空間を特定し、
前記Ｉ／Ｏコスト算出部は、
前記索引領域の再編成単位領域は、前記データベースを検索する検索キーを格納するキー値を含んで構成され、前記キー値のうち、隣り合うキー値の第二ボリューム上の物理的な位置の距離を示す値を前記Ｉ／Ｏコストとして算出することを特徴とする請求項６に記載のデータベースシステム。
【請求項９】
前記ストレージ装置は、
前記第一または第二のボリュームのデータベースを所定の周期で監視する診断処理部を備え、
前記診断処理部は、前記データベースのうち更新されたデータの比率が所定の比率を超えたとき、または削除されたデータの比率が所定の比率を超えたときに、前記データベース再編成処理部に、部分的なデータベースの再編成を開始させることを特徴とする請求項６に記載のデータベースシステム。
【請求項１０】
前記ホストコンピュータは、
前記第一または第二のボリュームのデータベースを所定の周期で監視する状態解析制御部を備え、
前記状態解析制御部は、前記データベースのうち更新されたデータの比率が所定の比率を超えたとき、または削除されたデータの比率が所定の比率を超えたときに、データベース再編成制御部に、部分的なデータベースの再編成を開始させることを特徴とする請求項６に記載のデータベースシステム。
【請求項１１】
前記ディスクドライブは、前記データベースへのアクセスによって生成されるログを格納する第三のボリュームと、前記第二のボリュームに格納されたデータベースの内容の複製を格納可能なアンロード用ボリュームとを含み、
前記データベース再編成処理部は、
前記第二のボリュームに格納されたデータベースのうち前記特定した疎の空間を前記アンロード用ボリュームに論理的に複写し、
前記複写が完了した第二のボリュームのうち前記特定した疎の空間を初期化し、
前記アンロード用ボリュームに格納されたデータベースの内容を前記第二のボリュームに物理的に複写し、
前記再編成中のトランザクションのログを前記第三のボリュームから取得し、前記第二のボリュームに格納されたデータベースに当該ログを適用することを特徴とする請求項６に記載のデータベースシステム。
【請求項１２】
前記ホストコンピュータは、
前記データベースの運用操作を制御する運用操作制御部を有し、
前記運用操作制御部は、
前記ホストコンピュータのトランザクションを静止化し、
前記ボリュームペアを分割させ、
前記データベースへのアクセスを前記第一のボリュームに対してのみ行うように設定し、
前記トランザクションの静止化を解除し、
前記データベース再編成制御部に再編成の開始を指示することを特徴とする請求項６に記載のデータベースシステム。
【請求項１３】
ホストコンピュータによってアクセスされるデータベースと、
前記データベースを格納する第一のボリュームと、前記第一のボリュームとペアを構成し、前記データベースの複製を格納する第二のボリュームとを含むディスクドライブを有するストレージ装置と、を備えるデータベースシステムにおいて、
前記ホストコンピュータは、
前記データベースの再編成に先だって、前記ホストコンピュータのトランザクションを静止化し、前記ボリュームペアを分割させ、前記データベースへのアクセスを前記第一のボリュームに対してのみ行うように設定し、前記トランザクションの静止化を解除する運用操作制御部と、
前記データベースの再編成を制御するデータベース再編成制御部と、を備え、
前記ストレージ装置は、
前記ホストコンピュータからの制御信号を受け付けるホストインタフェースと、
前記データベース再編成制御部からの指令に応じてディスクドライブに格納されたデータベースを再編成するデータベース再編成処理部と、
前記ディスクドライブは、前記データベースへのアクセスによって生成されるログを格納する第三のボリュームと、前記第二のボリュームに格納されたデータベースの内容の複製を格納可能なアンロード用ボリュームとを含み、
前記データベース再編成処理部は、
前記第二のボリュームのデータベースのデータ領域について、再編成の単位領域毎に、前記単位領域を構成するブロックのうち、データが空のブロックの数を、前記単位領域を構成するブロックの数で除した比率を充填率として演算する満杯ブロック比率算出部と、
前記充填率が所定の第１の比率を超えた場合には、当該単位領域を部分的な再編成の対象領域として特定する対象領域抽出部と、
前記第二ボリュームのうち前記特定した対象領域についてのみ部分的に再編成を行う部分再編成実行部と、
前記部分的な再編成を行った第二のボリュームの内容を前記第一のボリュームに複写して、前記第一のボリュームと前記第二のボリュームとのペアを再同期する再同期部と、
を備えたことを特徴とするデータベースシステム。
【請求項１４】
計算機に制御されるディスクドライブに格納されたデータベースの再編成方法であって、
前記ディスクドライブは、データベースを格納する第一のボリュームと、前記第一のボリュームとペアを構成して前記データベースの複製を格納する第二のボリュームとを含み、
前記計算機がデータベースのトランザクションを静止化する処理と、
前記第一のボリュームと前記第二のボリュームのペアを分割して、前記第一のボリュームに対してのみ、前記データベースのアクセスを行うように設定する処理と、
前記トランザクションの静止化を解除する処理と、
前記第二のボリュームのデータベースから疎の空間を特定する処理と、
前記第二のボリュームのうち、前記特定した疎の空間についてのみ部分的に再編成を行う処理と、
前記部分的な再編成を行った第二のボリュームの内容を前記第一のボリュームに複写して、前記第一のボリュームと前記第二のボリュームとのペアを再同期する処理と、を含み、
前記第二のボリュームのデータベースから疎の空間を特定する処理は、
前記データベースの索引領域について、再編成の単位領域毎に不連続性を示す値をＩ／Ｏコストとして算出する処理と、
前記Ｉ／Ｏコストが所定の第２の値を超えた場合には、当該単位領域を部分的な再編成の対象領域として特定する処理と、を含み、
前記不連続性を示す値をＩ／Ｏコストとして算出する処理は、
前記索引領域の再編成単位領域は、前記データベースを検索する検索キーを格納するキー値を含んで構成され、前記キー値のうち、隣り合うキー値の第二ボリューム上の物理的な位置の距離を示す値を前記Ｉ／Ｏコストとして算出することを特徴とするデータベースの再編成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースを運用するストレージシステムに関し、特にデータベースの再編成方法に関する。
【背景技術】
【０００２】
従来、データベースを管理するＤＢＭＳ（Data Base Management System）は、データベースの応答性を高めるように設計されている。ストレージ等の記憶空間は、データベースの格納領域を頻繁に変えないなど、できるだけ複雑な管理を避けるように設計されている。従って、データベースの記憶空間は、運用の時間経過に伴って、徐々に「乱れ」が発生する。「乱れ」とは、断片化空間や未回収領域、空間管理構造の不均衡化が発生していることである。記憶空間の乱れは、データベースの応答性（Ｉ／Ｏ性能や検索性能）を劣化させ、記憶空間の予想外の消費を発生させる。
【０００３】
記憶空間の乱れを解消するために、多くのＤＢＭＳには専用のソフトウェアが用意されている。このソフトウェアは、データベースの記憶空間上で断片化の解消、未回収領域の回収、空間管理構造の均衡化を行うことによって、記憶空間を乱れのない理想的な状態に変化させる。この処理を「再編成」と呼ぶ。
【０００４】
ＤＢＭＳの管理者は、定期的に再編成用ソフトウェアを用いて再編成を行うことによって、データベースの応答性の劣化、記憶空間の予想外の消費を解消する必要がある。
【０００５】
例えば、このような再編成を行うものとしては、再編成元のデータを再編成先の記憶装置に転送し、再編成先でデータベースの再編成を行う。再編成先でデータの再編成が完了した後、再編成中に再編成元で発生した更新を再編成先に適用し、ＤＢＭＳが使用するデータを再編成先に切り換えるものが知られている（例えば、非特許文献１）。
【０００６】
また、近年のデータベースではデータの量が増大しており、データ全体について再編成を行うと処理時間も長くなるため、管理者などが指定した記憶領域上のデータについてのみ再編成を行うものが知られている（例えば、非特許文献２）。これは、データを複数の記憶領域に分散して格納し、管理者などが指定した記憶領域上のデータについてのみ再編成を行うものである。
【非特許文献１】オンライン中データベース再編成機能、日立製作所発行、「平成１７年４月１０日検索」、インターネット＜URL:http://www.hitachi.co.jp/Prod/comp/soft1/4vsp/products/dbr.html＞
【非特許文献２】IMS Parallel Reorganization、IBM  発行、「平成１７年４月１０日検索」、インターネット＜URL:http://www-6.ibm.com/jp/domino02/NewAIS/aisextr.nsf/ByLetterNo/DBA04099?OpenDocument&ExpandSection=1＞
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記後者の従来例では、データベースの全体を再編成する場合に比して処理時間を短縮することができるものの、複数の記憶領域にあるデータベースのうち、いずれの記憶領域に再編成を必要とする乱れが実際に生じているかを管理者が判定することは極めて困難である。このため、管理者が指定した記憶領域で再編成を行っても、データベースの応答性や記憶空間の消費削減を効果的に行うことができないという問題がある。
【０００８】
そこで本発明は、上記問題点に鑑みてなされたもので、短時間で効率よくデータベースの再編成を行うことを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、計算機に制御されるディスクドライブに格納されたデータベースの再編成方法であって、前記ディスクドライブは、データベースを格納する第一のボリュームと、前記第一のボリュームとペアを構成して前記データベースの複製を格納する第二のボリュームとを含み、前記計算機がデータベースのトランザクションを静止化し、前記第一のボリュームと前記第二のボリュームのペアを分割して、前記第一のボリュームに対してのみ、前記データベースのアクセスを行うように設定し、前記トランザクションの静止化を解除して、前記第二のボリュームのデータベースから疎の空間を特定し、前記第二のボリュームのうち、前記特定した疎の空間についてのみ部分的に再編成を行い、前記部分的な再編成を行った第二のボリュームの内容を前記第一のボリュームに複写して、前記第一のボリュームと前記第二のボリュームとのペアを再同期し、前記第二のボリュームのデータベースからの疎の空間の特定は、前記データベースのデータ領域について、再編成の単位領域毎に、実際のデータ量を全データ量で除した比率を演算し、前記比率が所定の第１の比率以下の場合には、当該単位領域を部分的な再編成の対象領域として特定する。
【発明の効果】
【００１０】
したがって、本発明は、全再編成に比して極めて短時間に、データベースの最適化を行って、データベースの応答性の向上と、記憶空間の消費削減を効果的に行うことが可能となる。特に、近年の大規模なデータベースに適用することで、無停止でデータベースを運用しながら部分再編成を実施することで、短時間で効率よくデータベースの再編成を行うことができ、データベースの性能の劣化を確実に防止することが可能となる。また、管理者は、再編成を行う領域（または範囲）を検討する必要がないので、データベースの運用に係る労力を大幅に低減することが可能となる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１２】
図１は、本発明の第１の実施形態を示すデータベースシステムのブロック図である。
【００１３】
ホストコンピュータ１００が、ＳＡＮ（Storage Area Network）３００を介してストレージ装置２００に接続している。
【００１４】
ホストコンピュータ１００は、ＳＡＮ３００を介してストレージ装置２００のデータの操作を要求する。ストレージ装置２００は、操作要求の結果をホストコンピュータ１００に返す。なお、ホストコンピュータ１００とストレージ装置２００の接続は、ＳＡＮ３００に限定されるものではなく、ホストコンピュータ１００とストレージ装置２００とのネットワーク機能を実現するものであればよい。
【００１５】
ホストコンピュータ１００は、ＣＰＵ１１０、メモリ１２０等によって構成される。ＣＰＵ１１０は、各種プログラムを実行してホストコンピュータ１００を制御する。メモリ１２０は、データベース管理システム（以下、ＤＢ管理システムとする）１３０を格納する。このＤＢ管理システム１３０は、プログラムによって構成される。このプログラムがＣＰＵ１１０によって実行されることで、ホストコンピュータ１００がＤＢ管理システム１３０として機能する。
【００１６】
なお、ＤＢ管理システム１３０はソフトウェアで構成されなくてもよい。例えば、オブジェクトによって実現されるものであっても、ハードウェア構成によって実現されるものであってもよい。また、ホストコンピュータ１００は、仮想計算機であってもよい。
【００１７】
ＤＢ管理システム１３０は、ＤＢアクセス制御部１４０、ＤＢ運用操作制御部１５０、ログバッファ１６０及びＤＢバッファ１７０によって構成される。
【００１８】
ＤＢアクセス制御部１４０は、ＤＢバッファ１６０に格納されたデータベースの内容をストレージ装置２００内のディスクドライブ２２０のデータとして反映させる。このとき、後述するログ出力処理部１４３は、ＤＢバッファ１６０の内容が更新されたときには更新内容をログ情報としてログバッファ１６０に格納する。格納されたログ情報は、ストレージ装置２００内のディスクドライブのログ領域２２１に反映される。
【００１９】
ＤＢアクセス制御部１４０は、ＤＢ問合せ制御部１４１、ＤＢアクセス処理部１４２及びログ出力処理部１４３によって構成される。ＤＢ問合せ制御部１４１は、データベースの表空間（インデックス）を参照して、データベースの格納位置を取得する。ＤＢアクセス処理部１４２は、データベースにデータを書き込み、又はデータを読み出す。ログ出力処理部１４３は、データベース処理の更新内容を示すログをストレージ装置２００に格納させる。
【００２０】
ＤＢ運用操作制御部１５０は、ストレージ装置２００にデータベースの運用に関する処理を指示する。具体的には、ＤＢ運用操作制御部１５０は、データベースのバックアップや再編成処理を指示する。
【００２１】
ＤＢ運用操作制御部１５０は、ＤＢ再編成処理部１５１、ＤＢバックアップ制御部１５２、ＤＢ回復制御部１５３及びＤＢ状態解析制御部１５４によって構成される。
【００２２】
ＤＢ再編成処理部１５１は、データベースの空間の乱れや不均衡化を解決するための再編成処理をストレージ装置２００に指示する。
【００２３】
ＤＢバックアップ制御部１５２は、データベースのバックアップ作成処理をストレージ装置２００に指示する。
【００２４】
ＤＢ回復制御部１５３は、データベースの回復を制御する。
【００２５】
ＤＢ状態解析制御部１５４は、ストレージ装置２００にデータベースの状態を問い合わせ、データベースの状態を解析する。たとえば、データベースの空間の乱れや不均衡化の状態を解析する。
【００２６】
ストレージ装置２００は、ディスク制御部２１０及びディスクドライブ２２０によって構成される。
【００２７】
ディスク制御部２１０は、ディスクドライブ２２０へのデータの読み書きを制御する。
【００２８】
ディスク制御部２１０は、キャッシュメモリ２１１、ホストインタフェース処理部２１２、ＤＢ再編成処理部２１３、ボリュームコピー処理部２１４及びディスクアクセス制御部２１５によって構成される。
【００２９】
キャッシュメモリ２１１は、ディスクドライブ２２０に読み書きされるデータを一時的に格納する。
【００３０】
ホストインタフェース処理部２１２は、ホストコンピュータ１００から送られた要求を解析し、当該要求をディスク制御部２１０の他の処理部に送る。また、ディスク制御部２１０の他の処理部から受け取った結果をホストコンピュータ１００に返す。
【００３１】
ＤＢ再編成処理部２１３は、ディスクドライブ２２０に生じたデータベースの空間の乱れや不均衡化を解決する再編成処理を実行する。
【００３２】
ボリュームコピー処理部２１４は、ディスクドライブ２２０のボリューム間のコピー、ボリューム間の同期及びボリューム間の同期の解除等を制御する。
【００３３】
ディスクアクセス制御部２１５は、ディスクドライブ２２０に、ＳＣＳＩやＦｉｂｒｅＣｈａｎｎｅｌ等のプロトコルに基づいてアクセスする。
【００３４】
ディスクドライブ２２０は、一つ以上の磁気ディスクドライブによって構成される。
【００３５】
これら複数の磁気ディスクドライブは、ＲＡＩＤ構成等によって論理的な領域が構成される。この領域は複数の領域（ＬＵ：論理ユニットまたは論理ボリューム）に論理的に分割される。そして、データを格納する領域である論理ボリュームが、一つ以上の論理ユニットによって構成される。
【００３６】
なお、本実施形態の各処理部や制御部は、オブジェクトやプログラム、プロセス、スレッド等によって実現されるものであってもよい。また、ハードウェア構成によって実現されるものであってもよい。
【００３７】
ディスクドライブ２２０には、ログ２２１、正ＤＢ２２２、副ＤＢ２２３、ＤＢ定義情報２２４、ＤＢ−ディスクブロック変換テーブル２２５及びアドレス変換表２２６等の複数のデータ格納領域が構成される。なお、本発明のディスクドライブ２２０はハードディスクに限定されるものではなく、データを記憶できる機能を有するものであればよい。
【００３８】
ログ２２１は、データベース処理における差分ログ（ログ情報）を格納する。
【００３９】
正ＤＢ２２２は、ホストコンピュータ１００によってアクセスされるデータベースを格納する。
【００４０】
副ＤＢ２２３は、正ＤＢ２２２の複製を格納する。業務運用時は、正ＤＢ２２２及び副ＤＢ２２３は同期状態である。すなわち、ホストコンピュータ１００から正ＤＢ２２２への書き込みデータは、副ＤＢ２２３にも書き込まれる。正ＤＢ２２２及び副ＤＢ２２３が同期状態であれば、正ＤＢ２２２及び副ＤＢ２２３の内容は同一となる。
【００４１】
ＤＢ定義情報２２４は、ディスクドライブ２２０に格納されるデータベースの構成情報を格納する。データベースの構成情報は、例えば、データベース名、各データベースのデータ及び索引（インデックス）のスキーマ、統計情報等である。
【００４２】
ＤＢ−ディスクブロック変換テーブル２２５は、データベースの各データと当該データが格納されている物理的な位置との対応が格納される。
【００４３】
アドレス変換表２２６は、データベースの再編成処理及びその後の追い付き処理に用いられる。アドレス変換表２２６には、再編成処理の前後でデータのディスクドライブ２２０上の物理的な格納位置が変更された場合に、その前後の物理的な位置が格納される。
【００４４】
なお、アドレス変換表２２６は、ディスクドライブ２２０ではなく、メモリ２１６上の所定の領域の格納されるものであってもよい。
【００４５】
次に、ディスクドライブ２２０に格納されるデータベースの構成を説明する。
【００４６】
ディスクドライブ２２０に格納されるデータは、主にデータベースの本体である「表データ」及びその検索や一覧のために用いられる「索引データ」によって構成される。
【００４７】
図２は、正ＤＢ２２２のデータ領域１の一例を示す説明図である。
【００４８】
正ＤＢ２２２のデータ領域１には、複数のエクステント（セグメント）２０からなり、一つまたは複数のエクステント２０から表データ（テーブル）や索引データ（インデックス）が格納される。
【００４９】
表データは、ディレクトリ部１０を先頭にして複数のエクステント２０内の複数の表データブロック（ページ）３０から構成される。これらの複数の表データブロック３０によってファイルが構成される。各表データブロック３０には表データの最小構成単位である行データが含まれている。なお、このファイルの構成は後述のＤＢ−ディスクブロック変換テーブル２２５（図４参照）に格納されている。
【００５０】
図２の例では、データ領域１には、エクステント２０の管理情報等を保持するディレクトリ部１０を先頭にして、複数のエクステント２０が連続して配置される。そして、一つのエクステント２０は、複数の表データブロック３０から構成されており、図２の例では、１８個の表データブロック３０が一つのエクステント２０を構成する。例えば、一つの表データは、ディレクトリ部１０をヘッダーとして、複数のエクステント２０から構成される。なお、エクステント２０及び表データブロック３０は、正ＤＢ２２２上で論理的に連続して配置されればよい。また、表データブロック３０にはインデックスなども格納される。
【００５１】
表データのヘッダーに配置されるディレクトリ部１０は、このディレクトリ部１０に続く複数のエクステント２０に格納されたオブジェクトを管理するオブジェクト管理領域１１と、各エクステント２０の使用状況を管理するエクステント管理領域１２と、エクステント２０内のデータブロック３０の使用状況を管理するデータブロック空き管理領域１３から構成されている。
【００５２】
オブジェクト管理領域１１は、エクステント２０に格納されるオブジェクトの識別子を格納するオブジェクトＩＤ１１ａと、オブジェクトの種別を示す種別１１ｂと、オブジェクトが格納される複数のエクステント２０の先頭のエクステントＩＤを格納する先頭エクステントＩＤ１１ｃと、このオブジェクトが格納される複数のエクステント２０の最後のエクステントＩＤを格納する先頭エクステントＩＤ１１ｄを有し、各エントリ毎に設定される。オブジェクトの種別１１ｂは、例えば、「Ｔ」が表データ（テーブル）を示し、「Ｉ」がインデックスを示す。
【００５３】
図２の例では、ディレクトリ部１０が一つの表データ（オブジェクトＩＤ＝０００１）と、２つのインデックス（オブジェクトＩＤ＝０００２、０００３）が、エクステントＩＤ＝０００１〜２ｃ４の領域で管理される例を示している。なお、オブジェクトＩＤと種別及びエクステントＩＤは、それぞれＤＢ管理システム１４０が付与するものである。
【００５４】
次に、エクステント管理領域１２は、オブジェクト管理領域１１で管理する先頭（エクステントＩＤが最小）のエクステント２０から最後（エクステントＩＤが最大）のエクステント２０まで、各エクステント２０が使用中であるか否かを示すビットマップで構成される。図中「１」で示されるエクステント２０は使用中を示し、「０」のエクステント２０は未使用であることを示している。そして、図示の例では、先頭から５つめまでのエクステント２０が使用中であり、６つ目と七つ目のエクステント２０が未使用であることを示している。このビットマップの設定は、ＤＢ運用操作制御部１５０のＤＢ状態解析部１５４が所定の周期などで設定するものである。
【００５５】
次に、データブロック空き管理領域１３は、各エクステント２０内の表データブロック３０のそれぞれについて、使用状況と満杯情報をビットマップにより示すものである。各エントリには、自エクステント２０に続く次のエクステントＩＤを格納する次エクステントＩＤ１３ａと、エクステント２０内の各表データブロック３０の領域が使用中であるか否かをビットマップで示す空き管理１３ｂと、各表データブロック３０のデータ量の状態をビットマップで示す満杯管理１３ｃが設けられる。
【００５６】
空き管理１３ｂは、「１」が使用中を示し、「０」が未使用を示しており、この例では、一つのエクステント２０が１８個の表データブロック３０から構成されるので、一つのエクステント２０の空き管理１２ｂは１８ｂｉｔで示される。満杯管理１３ｃは、「１」であれば、該当するビットに対応する表データブロック３０がデータで満杯となっている状態を示し、「０」であればデータを追加可能な空き領域があることを示しており、一つのエクステント２０の満杯管理１３ｃは１８ｂｉｔで示される。したがって、一つの表データブロック３０は、２ビットのビットマップにより使用中／未使用と、データ追加可能／不可能が示される。
【００５７】
以上のように、ディレクトリ部１０は、オブジェクト管理領域１１、エクステント管理領域１２、データブロック空き管理領域１３により、データ領域１の空きの有無を管理し、後述するように、ＤＢ再編成処理部２１３はディレクトリ部１０を読み込むことで、データ領域１の空間について疎密を判定することができる。
【００５８】
次に、再編成の際の単位領域となるエクステント２０を構成する表データブロック３０は、各表データブロック３０の先頭に管理情報１（３１）が設定され、最後に管理情報２（３２）が設定されており、管理情報１、２の間に複数の行データ３３が配置される。
【００５９】
管理情報１、２にはそれぞれデータが更新された日時を保持する領域を有し、管理情報１の日時と、管理情報２の日時を比較することでデータの整合性を確認することができる。
【００６０】
そして、管理情報２には、この表データブロック３０の正ＤＢ２２２上の位置を示す位置情報（例えば、論理アドレスｉ）が格納される。
【００６１】
図３は、エクステント２０に格納される索引データの一例を示す説明図である。
【００６２】
索引データは、ブロックの集合から構成され、これらのブロックは木構造（ツリー構造）となっている。
【００６３】
木構造は、根ブロック４０、枝ブロック４１及び葉ブロック４２から構成される。根ブロック４０には参照先の枝ブロック４１のアドレスが格納される。枝ブロック４１には参照先の葉ブロック４２のアドレスが格納される。葉ブロック４２には索引エントリ４２０が格納される。葉ブロック４２の索引エントリ４２０は、キー値４２０、重複数４２１、行アドレス４２１によって構成される。キー値４２１は、データベースのデータを検索するための検索キーが格納され、各ブロック内で所定の順序（例えば、昇順）となるように配置される。重複数４２２は、参照先の重複の数を示す情報が格納される。行アドレス４２３３は、表データを構成する行データの格納先を示すアドレスが格納される。行アドレス４２３は、ＬＵ上の論理的なアドレスを示すページ番号４２３１と、ページ番号４２３１からのオフセット量を示すスロット番号４２３２から構成されている。なお、各キー値４２１に対応する行アドレス４２３は、連続的に配置されている。一方、各キー値４２１間は、データの挿入や削除によりＬＵ上の配置が不連続になる場合がある。
【００６４】
ここで、ページ番号４２３１の論理アドレスｉは、アドレス変換表２２６を参照することで、ＬＵ（正ＤＢ２２２または副ＤＢ２２３）上の物理的な位置を示すＬＢＮ（Logical Block Number）を参照することができる。このＬＢＮにＬＵのブロックサイズ（例えば、１６ＫＢ）を乗じたものがＬＵ上のデータブロックの物理的な格納位置を示すＬＢＡ（Logical Block Address）となる。そして、スロット番号４２３２は、ページ番号４２３１のアドレスが指し示す示すＬＢＡからのオフセット量を示すことで、実際の行データの位置を指定する。
【００６５】
ＤＢ管理システム１３０は、検索キーを用いてこの索引データを検索することによって、表データの行アドレスを得る。そして、この行アドレスを用いて表データにアクセスする。
【００６６】
図４は、ＤＢ−ディスクブロック変換テーブル２２５の一例の表である。
【００６７】
ＤＢ−ディスクブロック変換テーブル２２５は、データベース領域ＩＤ２２５１、種別２２５２、ファイルＩＤ２２５３、ブロック長２２５４、論理ボリュームＩＤ２２５５、物理デバイスＩＤ２２５６及び相対位置２２５７によって構成される。
【００６８】
データベース領域ＩＤ２２５１は、データベースが格納されるデータベース領域毎に付けられる固有の識別子である。
【００６９】
種別２２５２は、データベース領域に格納されるデータベースの種別である。種別には、ＤＢ（データベースを示す）、ログ等の情報が格納される。
【００７０】
ファイルＩＤ２２５３は、データベース領域ＩＤ２２５１に格納されるデータベース領域が複数のファイルで構成されている場合に、ファイル毎に付けられる固有の識別子である。
【００７１】
ブロック長２２５４は、そのデータベース領域を構成する表データブロックの長さ（サイズ）が示される。
【００７２】
論理ボリュームＩＤ２２５５は、データベース領域ＩＤ２２５１の構成ファイルが格納されている論理ボリュームを識別するための識別子である。
【００７３】
物理デバイスＩＤ２２５６は、論理ボリュームＩＤによって識別される論理ボリューム（ＬＵ）がマッピングされている物理デバイスを識別するための識別子である。具体的には、ＬＵ毎に個別に付けられる番号であるＬＵＮ（Logical Unit Number）である。
【００７４】
相対位置２２５７は、ファイルが格納される領域がＬＵの中のどの場所であるか、ＬＵの相対位置によって示される。具体的にはＬＢＡ（Logical Block Address）が格納される。
【００７５】
本実施形態のデータベースを構成するファイルは、ホストコンピュータ１００で稼働しているオペレーティングシステム（ＯＳ）が認識するファイルシステムとして論理ボリュームにマッピングされる。また、論理ボリュームは、ストレージ装置２００の物理デバイスであるディスクドライブ２２０に対応したデバイスファイルとしてマッピングされる。
【００７６】
ストレージ装置２００内では、デバイスファイルは、ＬＵに対応している。従って、データベース領域を構成するファイルは、最終的に物理デバイスであるディスクドライブの磁気ディスクドライブにマッピングされる。対応する物理情報は、ストレージ装置２００内の磁気ディスクドライブを識別するための物理デバイスＩＤと、物理デバイス内の相対位置であるＬＢＡである。
【００７７】
図５は、マッピングの関係を示す説明図である。
【００７８】
図５は、ホストコンピュータ１００によって認識されるデータベース領域、ホストコンピュータ１００で稼働するオペレーティングシステムによって認識される論理ボリューム、デバイスファイル、及び、ストレージ装置２００のＬＵのマッピング関連の例を示す。
【００７９】
データベース管理システム１３０は、データを格納するデータベース領域は、複数のファイルから構成されるものとして認識する。構成される各ファイルは、ホストコンピュータ１００で稼働するオペレーティングシステムのファイルに対応している。なお、図５では、オペレーティングシステムにおいてＲＡＷデバイスとして認識されるケースを想定している。
【００８０】
また、オペレーティングシステムのファイルは、物理的なディスクドライブに対応するデバイスファイルとして管理されている。デバイスファイルは、ストレージ装置２００のＬＵにマッピングされている。
【００８１】
次に、本実施形態のデータベースシステムの処理を説明する。
【００８２】
図６は、ストレージ装置２００の受け付けコマンド解析処理のフローチャートである。
【００８３】
ストレージ装置２００は、ホストコンピュータ１００からの要求に基づいて、この処理を行う。
【００８４】
ホストインタフェース処理部２１２は、ホストコンピュータ１００からの要求を受信し、その内容を解析する。
【００８５】
ホストコンピュータ１００からの要求が読み出し要求（Ｒｅａｄコマンド）又は書き込み要求（Ｗｒｉｔｅコマンド）であった場合は（ステップ１００１）、ステップ１００２に移行する。ステップ１００２では、ホストコンピュータ１００からの要求がＲｅａｄコマンドであるかＷｒｉｔｅコマンドであるかが判定される。
【００８６】
ホストコンピュータ１００からの要求がＲｅａｄコマンドであった場合は、Ｒｅａｄ処理（図７参照）が実行される（ステップ１０１１）。ホストコンピュータ１００からの要求がＷｒｉｔｅコマンドであった場合は、Ｗｒｉｔｅ処理（図８参照）が実行される（ステップ１０１２）。
【００８７】
ホストコンピュータ１００からの要求がボリュームコピーコマンドであった場合は（ステップ１００３）、ボリュームコピー処理（図９参照）が実行される（ステップ１００４）。
【００８８】
ホストコンピュータ１００からの要求がＤＢ再編成コマンド（全再編成コマンドまたは部分再編成コマンド）であった場合は（ステップ１００５）、図１１に示すＤＢ再編成処理が実行される（ステップ１００６）。なお、本実施形態ではＤＢ管理システム１４０から、管理者などが再編成を行うデータベース領域（あるいはデータ領域１や表データあるいは索引データ）を指定し、当該データベースの全体の再編成を行う全再編成コマンドと、当該データベースを部分的に再編成する部分再編成コマンドの何れかをディスク制御部２１０に対して発行するものとする。
【００８９】
何れのコマンドでもない場合は、処理が終了される。
【００９０】
図７は、Ｒｅａｄ処理のフローチャートである。
【００９１】
この処理は、ホストインタフェース処理部２１２によって実行される。
【００９２】
まず、受信したコマンドが解析され、当該コマンドの内容及びアクセス先のアドレスを取得する（ステップ１１０１）。
【００９３】
次に、取得されたアクセス先のアドレスのデータが、キャッシュメモリ２１１に格納されているか否かを判定する（ステップ１１０２）。
【００９４】
データがキャッシュメモリ２１１に格納されていると判定した場合は、ステップ１１０５に移行する。
【００９５】
データがキャッシュメモリ２１１に格納されていないと判定した場合は、要求データを読み出してキャッシュメモリ２１１に転送させる旨の転送依頼を、ディスクアクセス制御部２１５に送る（ステップ１１０３）。このとき、転送先のキャッシュメモリ２１１の転送先アドレスのデータが更新されたことを示す情報が、キャッシュメモリ２１１に設けられたキャッシュ管理テーブルに登録される。
【００９６】
この転送要求によって、ディスクドライブ２２０からキャッシュメモリ２１１にデータが転送される。そして、このデータの転送が終了したか否かを判定する（ステップ１１０４）。
【００９７】
データの転送がまだ終了していないと判定した場合は、データの転送が終了するまで待機する。データの転送が完了したと判定した場合は、ステップ１１０５に移行する。
【００９８】
ステップ１１０５では、キャッシュメモリ２１１に格納されている要求データを、ホストコンピュータ１００に送信する。その後、処理を終了する。
【００９９】
このＲｅａｄ処理によって、要求データがホストコンピュータ１００に送信される。
【０１００】
図８は、Ｗｒｉｔｅ処理のフローチャートである。
【０１０１】
この処理は、ホストインタフェース処理部２１２によって実行される。
【０１０２】
まず、受信したＷｒｉｔｅコマンドが解析され、当該コマンドの内容、アクセス先のアドレス及び書き込みデータを取得する（ステップ１２０１）。
【０１０３】
次に、取得したアクセス先のアドレスに既に存在するデータは、キャッシュメモリ２１１に格納されているか否かを判定する（ステップ１２０２）。
【０１０４】
データがキャッシュメモリ２１１に格納されていると判定した場合は、ステップ１２０５に移行する。
【０１０５】
データがキャッシュメモリ２１１に格納されていないと判定した場合は、当該アドレスに存在するデータを読み出してキャッシュメモリ２１１に転送させる旨の転送要求を、ディスクアクセス制御部２１５に送る（ステップ１２０３）。このとき、転送先のキャッシュメモリ２１１の転送先アドレスのデータが更新されたことを示す情報が、キャッシュメモリ２１１に設けられたキャッシュ管理テーブルに登録される。
【０１０６】
この転送要求によって、ディスクドライブ２２０からキャッシュメモリ２１１にデータが転送される。そして、このデータの転送が終了したか否かを判定する（ステップ１２０４）。
【０１０７】
データの転送がまだ終了していないと判定した場合は、データの転送が終了するまで待機する。データの転送が完了したと判定した場合は、ステップ１２０５に移行する。
【０１０８】
ステップ１２０５では、キャッシュメモリ２１１に格納されているデータを、Ｗｒｉｔｅコマンドによって指示された書き込みデータに更新する。
【０１０９】
このデータの更新が完了すると、ステップ１２０６に移行し、Ｗｒｉｔｅ処理が完了した旨を、ホストコンピュータ１００に送信する。その後、処理を終了する。
【０１１０】
図９は、ボリュームコピー処理のフローチャートである。
【０１１１】
この処理は、ホストインタフェース処理部２１２及びボリュームコピー処理部２１４によって実行される。
【０１１２】
ホストインタフェース処理部２１２は、ホストコンピュータ１００からの要求を受信し、その内容を解析する。ボリュームコピーコマンドであれば当該コマンドをボリュームコピー処理部２１４に送り、ボリュームコピーコマンドには、コピー処理及びペア切り離し処理があり、いずれかの処理が選択される。
【０１１３】
ホストコンピュータ１００からの要求がペア生成コマンドであった場合は（ステップ１３０１）、ボリュームコピー処理部２１４がコピー処理を実行する（ステップ１３０２）。具体的には、コピー元の論理ボリュームの内容をコピー先の論理ボリュームに全て複写（コピー）する。また。この処理によってコピー元論理ボリューム及びコピー先論理ボリュームが同期状態となる。
【０１１４】
ホストコンピュータ１００からの要求がペア分割コマンドであった場合は（ステップ１３０３）、ボリュームコピー処理部２１４がペア切り離し処理を実行する（ステップ１３０４）。具体的には、同期されている二つの論理ボリュームの同期が解除される。
【０１１５】
ホストコンピュータ１００からの要求がペア再同期コマンドであった場合は（ステップ１３０５）、ボリュームコピー処理部２１４がボリュームコピー処理を実行する（ステップ１３０６）。この処理はステップ１３０２と同様である。
【０１１６】
何れのコマンドでもない場合は、処理を終了する。
【０１１７】
図１０は、ＤＢ再編成制御処理のフローチャートである。
【０１１８】
この処理は、ホストコンピュータ１００のＤＢ再編成制御部１５１で実行される。
【０１１９】
ＤＢ再編成制御部１５１は、ＤＢ再編成制御処理を開始すると、まず、管理者等の指令によって再編成を指示されたデータベースを静止化する（ステップ１４０１、図１１のＳ１）。具体的には、ＤＢ再編成制御部１５１は、ＤＢアクセス制御部１４０に対して、データベースに対するトランザクションの受け付けを停止させ、実行中のトランザクションを全て完了させる要求を送る。
【０１２０】
次に、ボリュームペアを分割する（ステップ１４０２、図１１のＳ２）。具体的には、ＤＢ再編成制御部１５１は、ストレージ装置２００に対してペア分割コマンドを送る。これによって、同期されているボリュームペアである主ＤＢ２２２及び副ＤＢ２２３の同期を解除し、ボリュームペアが分割される。
【０１２１】
次に、データベースの処理を受け付けるボリューム（カレントデータベース）を主ＤＢ２２２のみに変更する。その後、データベースの静止化を解除する（ステップ１４０３、図１１のＳ３）。具体的には、ＤＢ再編成制御部１５１は、ＤＢアクセス制御部１４０に、カレントデータベース主ＤＢ２２２のみにする要求を送る。また、ＤＢ再編成処理部１５１は、ＤＢアクセス制御部１４０に、データベースに対するトランザクションの受付を開始する要求を送る。この処理によって、主ＤＢ２２２のみがホストコンピュータ１００のアクセス対象となる。
【０１２２】
次に、後述する図１１、図１２に示すＤＢ再編成処理を実行する（ステップ１４０４、図１１のＳ４）。具体的には、ＤＢ再編成制御部１５１が、ストレージ装置２００に対して、ＤＢ再編成コマンドを送信する。ストレージ装置２００のディスク制御部２１０のＤＢ再編成処理部２１３が、ホストコンピュータ１００からのＤＢ再編成コマンド（全再編成コマンドまたは部分再編成コマンド）を受信して、再編成を実行する。
【０１２３】
ＤＢ再編成処理が完了すると、再編成期間中に生じた主ＤＢ２２２に対するデータベースの更新履歴をログ（ＬＵ＃１）から読み込んで、副ＤＢ２２３に適用する追いつき処理（図１１のＳ５）を行い、ボリュームペアを再同期させる（ステップ１４０５、図１１のＳ６）。具体的には、ＤＢ再編成制御部１５１は、ストレージ装置２００に対してボリュームペア再同期コマンドを送る。これによって、主ＤＢ２２２及び副ＤＢ２２３がボリュームペアとして再同期される。
【０１２４】
この再同期において、副ＤＢ２２３の内容はＤＢ再編理完了後のデータベースの空間の乱れや不均衡化が解決された状態である。この副ＤＢ２２３の内容を主ＤＢ２２２にコピーすることで、主ＤＢ２２２及び副ＤＢ２２３の内容が、共に再編成処理完了後の内容となる。
【０１２５】
以上の処理によって、データベースが再編成される。
【０１２６】
図１１は、ディスクドライブの再編成処理の説明図である。
【０１２７】
この処理は、ストレージ装置２００のＤＢ再編成処理部２１３によって実行される。
【０１２８】
図１１では、３つのＬＵ（ＬＩ＃１、ＬＵ＃２及びＬＵ＃３）が示されている。これらはそれぞれ主ＤＢ２２２、副ＤＢ２２３及びログ２２１の領域として設定されている。
【０１２９】
業務運用時は、ＬＵ＃１及びＬＵ＃２は同期している。ＬＵ＃１、すなわち主ＤＢ２２２に対するアクセスは、ＬＵ＃２、すなわち副ＤＢ２２３に対しても実行され、ＬＵ＃１とＬＵ＃２との内容は常に同一となる。また、このアクセス結果のログがＬＵ＃３に格納される。
【０１３０】
再編成処理では、まず、データベースの静止化が実行され（Ｓ１）、トランザクションの受け付けを停止する。データベースの静止化が完了すると、ＬＵ＃１とＬＵ＃２との同期を解除し、ＬＵ＃１とＬＵ＃２とでのボリュームペアが分割される（Ｓ２）。
【０１３１】
ボリュームペアが分割されると、データベースの静止化が解除され（Ｓ３）、トランザクションの受け付けが再開される。このとき、データベースのアクセスはＬＵ＃１に対してのみ行われるよう設定を変更する。
【０１３２】
この状態でＬＵ＃２の再編成処理が実行される（Ｓ４）。ＬＵ＃１とＬＵ＃２とは分割され非同期状態にあるので、システムの運用は再編成処理の影響を受けない。また、再編成処理中の正ＤＢ２２２（ＬＵ＃１）に対するアクセスのログはＬＵ＃３に格納される。
【０１３３】
ＬＵ＃２の再編成が完了すると、ＬＵ＃３に格納されたログを用いて追い付き処理が実行される（Ｓ５）。
【０１３４】
この追い付き処理が完了すると、アクセスを受け付けているＬＵ＃１とＬＵ＃２とのデータは論理的に等価となる。
【０１３５】
次に、ＬＵ＃２の内容をＬＵ＃１にコピーすることで、ＬＵ＃２とＬＵ＃１とを同期させる（Ｓ６）。
【０１３６】
同期が完了すると、再編成処理が完了する。
【０１３７】
図１２は、上記ＤＢ再編成処理のフローチャートである。
【０１３８】
この処理は、ストレージ装置２００のＤＢ再編成処理部２１３によって実行される。
【０１３９】
ＤＢ再編成処理部２１３は、まず、指定されたデータベースのデータベース領域ＩＤを取得する。なお、データベース領域ＩＤは、管理者等がホストコンピュータ１００から指定するファイルに対応するもので、ＤＢ定義情報２２４及びＤＢ−ディスクブロック変換テーブル２２５を参照し、当該データベースが格納されている領域（論理ボリューム）を示す識別子を取得する（ステップ１５０１）。
【０１４０】
次に、ホストコンピュータ１００から受信した再編成コマンドが全再編成コマンドと部分再編成コマンドのいずれであるかを判定する（ステップ１５０２）。ここで、再編成コマンドの一例を図１４に示す。再編成コマンド２１３１は、コマンドの種類を示すコマンド種別２１３２と、再編成対象のデータベース名を示す対象データベース２１３３と、再編成の対象が対象データベース２１３３の全体であるか部分的であるかを示す再編成種別２１３４と、再編成種別が部分的な場合には再編成を行う対象を指定する部分再編成対象範囲２１３５とから構成される。コマンド種別２１３２には、再編成を示す値が設定され、再編成種別２１３４には、全再編成または部分再編成の何れかを示す値が設定される。そして、再編成種別２１３４が部分再編成の場合には、部分再編成対象範囲２１３５に、後述する充填率またはＩ／Ｏコスト等、再編成の対象を特定する要素が設定される。
【０１４１】
そして、ＤＢ再編成処理部２１３は受信した再編成コマンドが部分再編成コマンドであれば、ステップ１５０３に進んで再編成を行うデータ領域１の部分の同定を行う。一方、受信した再編成コマンドが全再編成コマンドであれば、ステップ１５０７に進む。
【０１４２】
部分再編成コマンドを受信したステップ１５０３では、データベース領域ＩＤに対応するデータ領域１のデータの充填率またはＩ／Ｏコストを後述するように検出し、充填率がしきい値Ｔｈ１以下の空間またはＩ／Ｏコストがしきい値Ｔｈ以上の空間を、部分再編成を行うデータ空間として同定（決定）する。
【０１４３】
ここで、データの充填率は、図２で示したエクステント２０を構成する表データブロック３０のうち、データで満たされた表データブロック３０の比率を示し、例えば、
充填率＝満データブロック数／エクステント２０のデータブロック数  ………（１）
で示される。充填率が高ければ、データで満たされた表データブロック３０の比率が高いエクステント２０であり、充填率が低ければ、空きデータブロックの多いエクステント２０となる。また、Ｉ／Ｏコストは、後述のように、隣り合う索引データが指し示すＬＢＡの不連続性を示す値である。
【０１４４】
すなわち、ステップ１５０３では、指定されたデータベースのデータ領域１が部分再編成の対象範囲とすると、図２で示したエクステント２０のうち、空きデータブロックの多いエクステント２０、換言すれば上記充填率がしきい値Ｔｈ１以下のエクステント２０を指定する。あるいは、図３で示した葉ブロックにおいて、隣り合う行アドレスが指し示すＬＵ上のＬＢＡが、しきい値Ｔｈ２以上に離れている場合、当該葉ブロックを部分再編成の対象とする。なお、しきい値Ｔｈ２は、ディスクドライブ２２０の性能や容量に応じて適宜設定される値である。
【０１４５】
次に、ステップ１５０３で決定した再編成対象領域と同じ（又はそれ以上）の容量を持つ論理ボリューム（以降、「アンロード用ボリューム」と呼ぶ）をディスクドライブ２２０上に新たに作成する。そして、作成したアンロード用ボリュームに、再編成を行うデータベースの再編成対象領域を論理的に複写（コピー）して初期化する（ステップ１５０４）。このとき、データベースの再編成対象領域の空間の乱れや不均衡化を解決するように、各データのディスクドライブ上の配置を考慮して、論理ボリュームの内容をアンロード用ボリュームにコピーする。
【０１４６】
アンロード用ボリュームへのコピーは、例えば、同一の表データブロック３０又は同一の索引ブロックは、物理的に連続した領域に格納される。また、予め指定された充填率目標値に基づいて、アンロード用ボリュームにデータを格納する。なお、このステップ１５０４の処理を、以降は「アンロード処理」と呼ぶ。
【０１４７】
このように、アンロード処理によってデータベースのデータを部分的にコピーしたアンロード用ボリュームとデータベースが格納されていた論理ボリューム（副ＤＢ２２３）とは、論理的には等価であるが、各データの物理配置は必ずしも等価ではない。
【０１４８】
次に、アンロード処理が完了したデータのコピー元である論理ボリューム（副ＤＢ２２３）を初期化する（ステップ１５０５）。
【０１４９】
次に、アンロード用ボリュームの内容を、初期化した論理ボリュームにコピーする（ステップ１５０６）。この場合は、ステップ１５０４のアンロード処理のコピーとは異なり、図９において前述したコピー処理として、アンロード用ボリュームの内容がそのままコピーされる。この処理をリロード処理という。
【０１５０】
ステップ１５０３〜１５０６の処理によって、指定されたデータベースの部分再編成が完了する。
【０１５１】
一方、上記ステップ１５０２の判定で、再編成コマンドが全再編成コマンドの場合には、ステップ１５０７に進み、指定されたデータベースの全てのデータについて再編成を行う。
【０１５２】
ステップ１５０７では、指定されたデータベースと同じ（又はそれ以上）の容量を持つアンロード用ボリュームを新たに作成する。そして、作成したアンロード用ボリュームに、再編成を行うデータベースの全てのデータを副ＤＢ２２３から論理的に複写（コピー）するアンロード処理を行う。このとき、上記ステップ１５０４と同様に、データベースの空間の乱れや不均衡化を解決するように、各データのディスクドライブ上の配置を考慮して、論理ボリュームの内容をアンロード用ボリュームにコピーする。
【０１５３】
例えば、同一の表データブロック又は同一の索引ブロックは、物理的に連続した領域に格納される。また、予め設定された充填率目標値に基づいて、アンロード用ボリュームにデータを格納する。
【０１５４】
次に、アンロード処理が完了したデータのコピー元である論理ボリュームを初期化する（ステップ１５０８）。
【０１５５】
次に、アンロード用ボリュームの内容を、初期化した論理ボリュームにコピーする（ステップ１５０９）。この処理は、ステップ１５０７のアンロード処理のコピーとは異なり、図９において前述したコピー処理として、論理ボリュームの内容がそのままコピーされる。
【０１５６】
ステップ１５０７〜１５０９の処理によって、指定されたデータベース全体の再編成が完了する。
【０１５７】
上記ステップ１５０３〜１５０６の部分再編成またはステップ１５０７〜１５０９の全再編成が完了すると、ステップ１５１０で、データベースの再編成の処理の間に記録された正ＤＢ２２２のログを、データベースの再編成が完了したアンロードボリュームに適用し、反映させる追い付き処理を実行する（ステップ１５０５）。この追い付き処理は図１８で後述する。
【０１５８】
追い付き処理が完了すると、ＤＢ再編成処理部２１３は、ホストコンピュータ１００に、ＤＢ再編成処理が完了した旨を送信し、図１０のフローチャートに復帰する。
【０１５９】
図１３は、上記ステップ１５０３で行われる再編成対象範囲同定処理のサブルーチンの一例を示すフローチャートである。
【０１６０】
まず、ステップ１５１１では、ＤＢ再編成処理部２１３が受信した再編成コマンドから部分再編成対象範囲２１３５を読み込んで、再編成対象を特定する要素が充填率であるか否かを判定する。再編成対象範囲を充填率によって決定する場合は、ステップ１５１２へ進み、Ｉ／Ｏコストによって再編成対象範囲を決定する場合は、ステップ１５１８へ進む。
【０１６１】
ステップ１５１２では、指定されたデータベースのデータ領域１からディレクトリ部１０（図２参照）を読み込んで、オブジェクト管理領域１１から種別１０ｂが「Ｔ」（テーブル）を示すオブジェクトＩＤについて先頭エクステントＩＤ１０ｃと最終エクステントＩＤ１０ｄを取得する。
【０１６２】
次に、ステップ１５１３以降では、先頭エクステントＩＤ１０ｃから最終エクステントＩＤ１０ｄに向けて各エクステント２０の充填率を順次算出する。
【０１６３】
まず、ステップ１５１３では、データブロック空き管理領域１３の満杯管理１３ｃから、当該エクステント２０を構成する表データブロック３０のうち満杯（＝「１」）となって、データの空きがない表データブロック３０の数（満データブロック数）を取得し、 上記（１）式より充填率を算出する。
【０１６４】
そして、ステップ１５１４で、求めた充填率が予め設定したしきい値Ｔｈ１以下であるか否かを判定する。このしきい値Ｔｈ１は、例えば、５０％などの比率に設定されて、充填率がしきい値Ｔｈ１以下の場合は、当該エクステント２０内に疎の空間が増大したと判定して、ステップ１５１５に進んで部分再編成の設定を行う。一方、充填率がしきい値Ｔｈ１を超える場合は、当該エクステント２０がデータで満たされており、部分再編成を行う必要がないと判定してステップ１５１６に進む。
【０１６５】
充填率がしきい値Ｔｈ１以下の場合のステップ１５１５では、充填率がしきい値Ｔｈ１以下となった当該エクステント２０のエクステントＩＤを、図１５に示す対象エクステントリスト５０に追加する。なお、対象エクステントリスト５０は、ディスク制御部２１０のメモリ２１６等に予め設定された領域である。また、対象エクステントリスト５０は、部分再編成が完了するとクリアされるものである。
【０１６６】
次に、現在のエクステントＩＤを、図２のデータブロック空き管理領域１３に示す次エクステントＩＤ１３ａに設定し、このエクステントＩＤが最終エクステントＩＤ１０ｄを超えていなければ、ステップ１５１３に戻って次のエクステント２０について充填率の判定を行い、次エクステントＩＤ１３ａが最終エクステントＩＤ１０ｃを超えていれば、サブルーチンを終了する。
【０１６７】
上記ステップ１５１２〜１５１７の処理により、図１５で示すように、各エクステント２０を構成する表データブロック３０の満杯管理１３ｃの情報から、データで満たされたデータブロックの比率がしきい値Ｔｈ１以下の疎の空間は、部分再編成の対象としてエクステントＩＤが対象エクステントリスト５０に順次蓄積されていく。
【０１６８】
そして、再編成対象を特定する要素が充填率である場合には、上記図１２のステップ１５０４〜１５０６では、対象エクステントリスト５０に格納されたエクステント２０について再編成を部分的に行うのである。これにより、部分再編成では、図１５の上部に示した再編成前のエクステント２０のうち、疎の空間が対象エクステントリスト５０に追加され、図中下部のように部分再編成によって充填率を高めた密の空間のエクステント２０として、副ＤＢ２２３にリロードされるのである。この結果、充填率の高いエクステント２０が論理的に連続させることで、データベースの応答性の向上や記憶空間の消費削減を効果的に行うことが可能となる。
【０１６９】
一方、上記ステップ１５１１の判定で、再編成対象を特定する要素がＩ／Ｏコストの場合は、ステップ１５１８〜１５２５の処理を行う。
【０１７０】
ここで、Ｉ／Ｏコストについて説明する。ストレージ装置２００内のディスクドライブ２２０では、複数のシリンダ上で分割されたセクタを最小記憶領域として、ヘッドが目的のセクタにシークしてから読み書きが行われている。
【０１７１】
ランダムアクセスによりデータの読み書きに要する時間（Ｉ／Ｏレスポンスタイム）は、ヘッドのシークタイムと、ディスクが１回転するローテンションタイムと、ヘッドがデータを読み出す時間であるトランスファータイムの和で表される。ここで、最も影響が大きい値がシークタイムであり、ローテンションタイムやトランスファータイムに比して極めて大きな値となる。
【０１７２】
そして、ディスクドライブ２２０の管理は複数のセクタをまとめたブロックをアクセスの単位としている。上記図３のツリー構造において、葉ブロック４２内の隣り合うキー値４２１の先頭行アドレス４２３は、ページ番号４２３１の論理アドレスｉが指し示すＬＢＮが近いほど、Ｉ／Ｏレスポンスタイムは小さくなり、データベースの応答性は向上する。つまり、図３の葉ブロック４２の索引エントリにおいて、先頭（図中上方）のキー値４２１に対応する行アドレスのページ番号（論理アドレスｉ）が、図中下方のキー値４２１へ向けてｉ＝０〜ｎまで昇順に設定されているとき、各論理アドレスｉが指し示すＬＢＮが図１６のような場合、論理アドレスｉを０から順次読み込んでいくと、ＬＢＮは６、３、５…となりヘッドのシークが頻繁に行われ、Ｉ／Ｏレスポンスタイムが大きくなりデータベースの応答性が低下する。
【０１７３】
そこで、本実施形態では、隣り合うキー値４２１の先頭の行アドレス４２３に対応する論理アドレスｉ（Ｐａｇｅ）、ｉ−１（Ｐａｇｅ）が、それぞれ指し示す物理的なディスク上の位置をＬＢＮｉ（Ｐａｇｅ）、ＬＢＮｉ−１（Ｐａｇｅ）とし、このキー値４２１が隣り合うアドレスｉが指すＬＢＮの差分ΔＬＢＮｉを、
ΔＬＢＮｉ＝ＬＢＮｉ（Ｐａｇｅ）−（ＬＢＮｉ−１（Ｐａｇｅ）） ………（２）
と表して、Ｉ／Ｏコストとして用いることとする。
【０１７４】
このＩ／Ｏコストを示すΔＬＢＮｉは、値が大きくなるにつれてヘッドのシークタイムが増大し、Ｉ／Ｏレスポンスタイムが増大し、値が小さくなるにつれてヘッドのシークタイムが減少して、Ｉ／Ｏレスポンスタイムを短縮できることを示す。つまり、Ｉ／ＯコストΔＬＢＮｉは、隣り合うキー値４２１のＬＵ上の距離を示す値となる。
【０１７５】
以下にＩ／Ｏコストを用いて、部分再編成の対象範囲を同定するステップ１５１８〜１８２５の処理を説明する。
【０１７６】
ステップ１５１８では、指定されたデータベースのデータ領域１からディレクトリ部１０（図２参照）を読み込んで、オブジェクト管理領域１１から種別１０ｂが「ｉ」（索引データ＝インデックス）を示すオブジェクトＩＤを取得し、当該索引データの根（ルート）ブロック４０のページ番号を取得する。
【０１７７】
そして、図３に示したツリー構造から、葉ブロック４２の先頭のアドレスを取得する（１５１９）。次に、取得した葉ブロック４２の索引エントリについて、各キー値４２１に対応付けられた先頭の行アドレス４２３の論理アドレスｉをＬＢＮに変換する。ここで、ＬＢＮへの変換は、例えば、先頭のキー値４２１の先頭行アドレス４２３が指し示す論理アドレスｉ−１に対応するＬＢＮを、アドレス変換表２２６からＬＢＮｉ−１（Ｐａｇｅ）として求め、次のキー値４２１の先頭行アドレス４２３が指し示す論理アドレスｉに対応するＬＢＮをアドレス変換表２２６からＬＢＮｉ（Ｐａｇｅ）として求める（１５２０）。そして、上記（２）式よりＩ／ＯコストであるΔＬＢＮｉを算出する（１５２１）。
【０１７８】
次に、上記算出したＩ／ＯコストΔＬＢＮｉがしきい値Ｔｈ２以上であるか否かを判定する。Ｉ／ＯコストΔＬＢＮｉがしきい値Ｔｈ２以上であれば、Ｉ／Ｏコストが大（不連続性が高い）であり部分再編成の対象領域としてステップ１５２３に進む、Ｉ／ＯコストΔＬＢＮｉがしきい値Ｔｈ２未満であればＩ／ＯコストΔＬＢＮｉが小さいので、部分再編成は不要と判定してステップ１５２４に進む。
【０１７９】
ステップ１５２３では、当該葉ブロック４２のＩ／Ｏコストが大きいので、予め設定した対象リーフページリスト（図１７の５１）に当該葉ブロック４２を追加する。なお、リーフページリスト５１への追加は、例えば、キー値４２１と先頭の行アドレス４２３等で設定する。
【０１８０】
ステップ１５２４では、Ｉ／Ｏコストを算出する行アドレスｉ、ｉ−１を次のキー値４２１に移動する。つまり、ＬＢＮｉ−１＝ＬＢＮｉ（Ｐａｇｅ）、ＬＢＮｉ＝ＬＢＮｉ＋１（Ｐａｇｅ）とする。
【０１８１】
葉ブロック４２内でキー値４２１の終端に達していない場合には、ステップ１５２０に戻って、次に隣り合うキー値４２１の先頭の行アドレス４２３に基づいてＩ／Ｏコストを判定する（１５２５）。
【０１８２】
そして、ステップ１５２６では、葉ブロック４２内でキー値４２１の終端に達した場合には、次の葉ブロック４２を設定してステップ１５１９に戻って次の葉ブロック４２内のＩ／Ｏコストの比較を行い、全葉ブロック４２についてＩ／Ｏコストの比較が終了した場合には、サブルーチンを終了する。
【０１８３】
上記ステップ１５１８〜１５２５の処理により、図１７で示すように、各葉ブロック４２のＩ／ＯコストΔＬＢＮｉから、キー値４２１間のΔＬＢＮｉがしきい値Ｔｈ２以上の不連続な空間（疎の空間）は、部分再編成の対象としてキー値４２１及び行アドレス４２３が対象リーフページリスト５１に順次蓄積されていく。
【０１８４】
そして、再編成対象を特定する要素がＩ／Ｏコストとした場合には、上記図１２のステップ１５０４〜１５０６では、対象リーフページリスト５１に格納された葉ブロック４２を単位領域として再編成を部分的に行うのである。これにより、部分再編成では、図１７の上部に示した再編成前の葉ブロック４２のうち、Ｉ／Ｏコストが大となる不連続な空間が多い葉ブロック４２が対象リーフページリスト５１に追加され、図中下部のように部分再編成によってキー値４２１間の連続性を高めた密の空間の葉ブロック４２として、副ＤＢ２２３にリロードされるのである。この結果、Ｉ／Ｏコストの低い葉ブロック４２に再編成することで、データベースの応答性の向上を効果的に行うことが可能となる。
【０１８５】
図１８は、追い付き処理のフローチャートである。
【０１８６】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０１８７】
まず、ＤＢ再編成処理が実行されていた間に記録されたログを、ログ領域２２１から一つずつ読み出す（ステップ１６０１）。
【０１８８】
次に、読み出されたログが、表のデータであるか、索引のデータであるかを判定する（ステップ１６０２）。
【０１８９】
読み出されたログが表のデータであると判定された場合は、表追い付き処理が実行される（ステップ１６０３）。この処理は図２０で後述する。
【０１９０】
読み出されたログが索引のデータであると判定された場合は、索引追い付き処理が実行される（ステップ１６０４）。この処理は図２９で後述する。
【０１９１】
実際には、表追い付き処理の完了後に、表追い付き処理によってアドレスが追加されたアドレス変換表２２５を用いて、索引追い付き処理が実行される。
【０１９２】
そして、表追い付き処理及び索引追い付き処理が実行された場合は、図１０のフローチャートに復帰する。
【０１９３】
次に、追い付き処理について説明する。
【０１９４】
本実施の形態では、ＤＢ再編成処理部２１３が、再編成処理期間中のログのうち必要なものを抽出し、そのログをデータベースの行アドレス毎に集約する。そして、集約したログによってデータベースの追い付き処理を行う。
【０１９５】
図１９Ａ、図１９Ｂは、再編成期間中のログから抽出されるログの説明図である。
【０１９６】
表データブロック３０の行データ３３に対するログは、行の挿入、行の削除及び行の更新が抽出される。索引ブロック（葉ブロック４２等）の索引エントリに対するログ（索引ログ）は、索引エントリの挿入及び索引エントリの削除が抽出される。抽出されたログは、後に説明するようにディスク装置２１０のメモリ２１６に設けられたバッファに格納される。
【０１９７】
その他のログ、例えば、表データブロック３０の新規割り当て、表データブロック３０の解放又はブロックの分割などデータベースの構造の変更を示すログは、再編成後のデータベースに対しては考慮する必要がないので抽出されない。
【０１９８】
表データブロック３０の行に対するログ（行更新ログ４００１）は、ログシーケンス番号（ＬＳＮ）、ログの種別、行アドレス及び行データによって構成される（図１９Ａ）。
【０１９９】
ＬＳＮはログ毎に、ログが記録された順に付けられる番号である。ログの種別は、当該ログの操作の種別が格納される。「ＩＮＳ」は挿入を示す。「ＤＥＬ」は削除を示す。「ＵＰＤ」は更新を示す。行アドレスは、対象となる行が格納されているアドレス（論理アドレス）を示す。
【０２００】
図１９Ａにおいて、行データには、挿入であれば、挿入される新たな行データが格納される。削除であれば行データは空欄となる。更新であれば、更新前の行データと更新後の行データとが格納される。
【０２０１】
索引エントリに対するログ（索引ログ４００２）は、ログシーケンス番号（ＬＳＮ）、ログの種別、索引アドレス、キーデータ及び行アドレスによって構成される（図１９Ｂ）。
【０２０２】
ログの種別は、索引エントリに対する操作の種別が格納される。図１９Ｂにおいて、「ＩＳ１」は索引エントリの挿入を示す。「ＤＬ１」は索引エントリの削除を示す。
【０２０３】
キーデータには、挿入であれば、挿入される新たなキーデータが格納される。削除であればキーデータは空欄となる。
【０２０４】
行アドレスには、当該索引エントリに対応する行のアドレスが格納される。
【０２０５】
図２０は、表追い付き処理の概要のフローチャートである。
【０２０６】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０２０７】
まず、時系列に格納されているログ領域２２１から、再編成処理中に記録されたログが切り出され、取得される。
【０２０８】
なお、再編成処理中のみでなく、再編成処理後に、この表追い付き処理の実行中に記録されるログについても考慮する必要がある。これに対しては、再編成処理中のログの追い付き処理を完了した後に、追い付き処理中に記録されたログを、さらに追い付き処理する方法や、再編成処理中のログの追い付き処理中に記録されたログについても、並行して追い付き処理する方法等が考えられる。
【０２０９】
次に、切り出されたログ系列から、挿入（ＩＮＳ）、削除（ＤＥＬ）及び更新（ＵＰＤ）のログが抽出される。
【０２１０】
次に、抽出されたログ系列が、行アドレス毎に集約される。具体的には、抽出されたログ系列が行アドレス毎にまとめられ、行アドレス毎に時系列順に並べられる。そして、行アドレス毎に一つのログに変換される。このログの変換は図２１Ａ、図２１Ｂで後述する。
【０２１１】
そして、この行アドレス毎に、行データへのログが適用される。このとき、ログの対象となっている行アドレスが、アドレス変換表２２６に記録されているか否かが判定される。
【０２１２】
アドレス変換表に記録されている場合は、アドレス変換表２２６を参照することで、再編成処理後の行アドレスを参照できる。
【０２１３】
一方、アドレス変換表２２６に記録されていない場合は、再編成処理前に存在しなかった行のアドレスに、再編成処理中に挿入がされている。アドレス変換表２２６に記録されているか否かは、当該ログの行アドレスを参照することで判定される。
【０２１４】
アドレス変換表２２６に記録されている行アドレスについては、アドレス変換後のアドレスに並び替えを行い、一つのログに集約された処理が実行される。例えば集約された当該ログが「削除」であった場合は、当該行アドレスの行が削除される。
【０２１５】
一方、アドレス変換表２２６に記録されていない行アドレスについては、新たな行アドレスの領域を挿入し、当該挿入された行アドレスにデータを書き込む。この新たな行アドレスは、アドレス変換表２２６に記録される。
【０２１６】
図２１Ａ、図２１Ｂは、ログの集約の説明図である。
【０２１７】
図２１Ａにおいて、既に主ＤＢ２２２に存在する行アドレスの行に対してされた操作が「ＤＥＬ」（削除）又は「ＵＰＤ」（更新）のみであった場合は、そのまま、「ＤＥＬ」又は「ＵＰＤ」ログとする。
【０２１８】
行アドレスで特定される行に、複数のログが記録されている場合は、複数のログのうち、最古のログ（最初に記録されたログ）及び最新のログ（最後に記録されたログ）のみを取り出して変換処理を行う。
【０２１９】
最古のログが「ＤＥＬ」であり、最新のログが「ＩＮＳ」（挿入）である場合は、当該行アドレスに対する操作は、一つの「ＵＰＤ」に変換される。
【０２２０】
最古のログが「ＤＥＬ」であり、最新のログが「ＤＥＬ」である場合は、当該行アドレスに対する操作は、一つの「ＤＥＬ」に変換される。
【０２２１】
最古のログが「ＤＥＬ」であり、最新のログが「ＵＰＤ」である場合は、当該行アドレスに対する操作は、一つの「ＵＰＤ」に変換される。
【０２２２】
最古のログが「ＵＰＤ」であり、最新のログが「ＩＮＳ」である場合は、当該行アドレスに対する操作は、一つの「ＵＰＤ」に変換される。
【０２２３】
最古のログが「ＵＰＤ」であり、最新のログが「ＤＥＬ」である場合は、当該行アドレスに対する操作は、一つの「ＤＥＬ」に変換される。
【０２２４】
最古のログが「ＵＰＤ」であり、最新のログが「ＵＰＤ」である場合は、当該行アドレスに対する操作は、一つの「ＵＰＤ」に変換される。
【０２２５】
一方、図２１Ｂにおいて、再編成処理前に存在しなかった行アドレスに対してなされた操作、すなわち、最古のログが「ＩＮＳ」である場合は、アドレス変換表に記録されていないログとしてログが変更される。
【０２２６】
この場合、当該行アドレスに対してなされた操作が「ＩＮＳ」のみであった場合は、そのまま「ＩＮＳ」ログとする。
【０２２７】
行アドレスで特定される行に、複数のログが記録されている場合は、複数のログのうち、最古のログ（最初に記録されたログ）及び最新のログ（最後に記録されたログ）のみを取り出して変換処理を行う。
【０２２８】
最古のログが「ＩＮＳ」であり、最新のログが「ＩＮＳ」である場合は、当該行アドレスに対する操作は、一つの「ＩＮＳ」に変換される。
【０２２９】
最古のログが「ＩＮＳ」であり、最新のログが「ＤＥＬ」である場合は、当該行アドレスに対する操作は、「ＮＯＰ」（No Operation）に変換される。実際には、当該行アドレスには操作は行われない。
【０２３０】
最古のログが「ＩＮＳ」であり、最新のログが「ＵＰＤ」である場合は、当該行アドレスに対する操作は、一つの「ＩＮＳ」に変換される。
【０２３１】
図２２は、表追い付き処理のフローチャートである。
【０２３２】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０２３３】
まず、ログの終端までを読み出したか否かを判定する（ステップ２００１）。
【０２３４】
ログの終端まで読み出されたと判定した場合は、処理を終了する。
【０２３５】
まだログの終端まで読み出されていないと判定した場合は、ログ系列の読み出し処理が実行される（ステップ２００２）。この処理によって、ログ２２１から必要なログがログ系列として抽出される。抽出されたログ系列は、メモリ２１６上に設定されたバッファＡに格納される。
【０２３６】
次に、バッファＡに格納されたログ系列の集約処理が実行される（ステップ２００３）。この処理によって、行アドレス毎に一つのログに変換され、バッファＢに格納される。
【０２３７】
次に、集約されたログの、アドレス変換処理が実行される（ステップ２００４）。この処理によって、アドレス変換表２２６に記録されているログとアドレス変換表２２６に記録されていないログとが判別され、アドレス変換表２２６に基づいて再編成処理前後の行アドレスが変換され、それぞれ別のバッファ（バッファＣ、バッファＤ）に格納される。なお、これらのバッファＣ，Ｄ及び後述のバッファＢも、メモリ２１６上に予め設定されたものである。
【０２３８】
次に、バッファＣに格納されたログをデータベースの表に適用するログ適用処理１が実行される（ステップ２００５）。
【０２３９】
次に、バッファＤに格納されたログをデータベースの表に適用するログ適用処理２が実行される（ステップ２００６）。
【０２４０】
以上の処理が、全てのログの読み込みが完了するまで実行される。
【０２４１】
なお、ステップ２００５及びステップ２００６は、必ずこのフローチャートの処理順序で実行される必要はない。バッファＣ及びバッファＤにログが格納された時点で、各々の処理が開始されるようにしてもよい。
【０２４２】
なお、これらのバッファＡ、Ｂ、Ｃ及びＤは、ディスク制御装置２１０のメモリ２１６に設けられる。
【０２４３】
図２３は、図２２のステップ２００２のログ系列の読み出し処理のフローチャートである。
【０２４４】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０２４５】
まず、ログの終端まで読み出されたか否か、又は、バッファＡに設定された容量の上限までログが格納され、バッファＡが満杯となったか否かを判定する（ステップ２１０１）。
【０２４６】
ログの終端まで読み出されたと判定した場合、又は、バッファＡが満杯となったと判定した場合は、図２２のフローチャートに復帰する。
【０２４７】
一方、またログの終端ではなく、かつ、まだバッファＡは満杯でないと判定した場合は、ログ２２１に記録された再編成処理中のログが読み出される（ステップ２１０２）。
【０２４８】
次に、読み出されたログの種類が判別される（ステップ２１０３）。読み出されたログの種類が、ＩＮＳ（挿入）、ＵＰＤ（更新）、ＤＥＬ（削除）であった場合は、ステップ２１４０に移行し、当該ログがバッファＡに格納される。
【０２４９】
一方、読み出されたログの種類が、ＩＮＳ（挿入）、ＵＰＤ（更新）、ＤＥＬ（削除）の何れでもない場合は、ログを適用する必要がないため、ステップ２１０１に戻る。
【０２５０】
このログ系列の読み出し処理によって、追い付き処理に必要なログ、すなわちＩＮＳ（挿入）、ＵＰＤ（更新）、ＤＥＬ（削除）のログが抽出され、バッファＡに格納される。
【０２５１】
図２４は、図２２のステップ２００３のログ系列の集約処理のフローチャートである。
【０２５２】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０２５３】
前述したように、抽出したログ系列が行アドレス毎に集約され、ログの変換が行われる。
【０２５４】
まず、バッファＡに格納されたログを、行アドレスの順で並べ替える（ステップ２２０１）。
【０２５５】
次に、バッファＡから並べ替えられたログの終端まで読み出されたか否かを判定する（ステップ２１０１）。並び替えられたログの終端まで読み出されたと判定した場合は、図２２のフローチャートに復帰する。
【０２５６】
並び替えられたログが、まだ終端まで読み出されていないと判定した場合は、バッファＡから、同一の行アドレスのログが読み出される（ステップ２２０３）。
【０２５７】
次に、読み出された同一の行アドレスのログが変換される（ステップ２２０４）。なお、この処理は図２５で後述する。この処理によって、同一の行アドレスに対する操作が一つのログに変換される。
【０２５８】
次に、変換されたログが、行アドレス毎にバッファＢに格納される（ステップ２２０５）。そして、ステップ２２０２に戻り、次の行アドレスについて処理する。
【０２５９】
図２５は、図２４のステップ２２０３のログの変換のフローチャートである。
【０２６０】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０２６１】
まず、同一の行アドレスのログのうち、最古のログの種別を判定する（ステップ２３０１）。最古のログの種別が更新（ＵＰＤ）又は削除（ＤＥＬ）であると判定した場合は、ステップ２３０２に移行する。最古のログの種類が挿入（ＩＮＳ）であると判定した場合は、ステップ２３０５に移行する。
【０２６２】
ステップ２３０２では、同一の行アドレスのログのうち、最新のログの種別が判別される。最新のログの種類がＩＮＳ又はＵＰＤであると判定した場合は、ステップ２３０３において、当該行アドレスのログはＵＰＤに変換される。
【０２６３】
一方、最新のログの種類がＤＥＬであると判定した場合は、ステップ２３０４において、当該行アドレスへのログはＤＥＬに変換される。
【０２６４】
同様に、ステップ２３０５では、同一の行アドレスのログのうち、最新のログの種別を判別する。最新のログの種類がＩＮＳ又はＵＰＤであると判定した場合は、ステップ２３０６において、当該行アドレスへのログはＩＮＳに変換される。
【０２６５】
一方、最新のログの種類がＤＥＬであると判定した場合は、ステップ２３０７において、当該行アドレスへのログは出力されない。
【０２６６】
ログの変換が完了すると、図２４の処理に復帰する。
【０２６７】
図２６は、図２２のステップ２００４のアドレス変換処理のフローチャートである。
【０２６８】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０２６９】
まず、バッファＢに格納されたログが、終端まで読み出されたか否かを判定する（ステップ２４０１）。ログの終端まで読み出されたと判定した場合は、図２２のフローチャートに復帰する。
【０２７０】
ログがまだ終端まで読み出されていないと判定した場合は、バッファＢから、同一の行アドレスのログが読み出される（ステップ２４０２）。
【０２７１】
次に、読み出されたログの行アドレスが、アドレス変換表に記録されているか否かを判定する（ステップ２４０３）。当該行アドレスがアドレス変換表に記録されていないと判定した場合は、ステップ２４０４に移行し、当該ログがバッファＤに格納される。
【０２７２】
当該行アドレスがアドレス変換表に記録されていると判定した場合は、ステップ２４０５に移行し、アドレス変換表に基づいて、当該ログの行アドレスを再編成処理後の行アドレスに変換する。
【０２７３】
次に、行アドレスが変換されたログを、バッファＢに格納する（ステップ２４０６）。
【０２７４】
図２７は、図２２のステップ２２０５のログ適用処理１のフローチャートである。
【０２７５】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０２７６】
まず、バッファＣに格納されたログを、行アドレスの順で並べ替えられる（ステップ２５０１）。
【０２７７】
次に、並び替えられたログが読み出され、ディスクドライブ２２０のデータベースに適用される（ステップ２５０２）。具体的には、読み出されたログが、データベース上のログが示す行アドレスに適用される。
【０２７８】
なお、適用されたログのうち、ＤＥＬ（削除）のログは、当該ログの示す行アドレスがアドレス変換表から削除される（ステップ２５０３）。
【０２７９】
このログの適用処理１が完了すると、図２２の処理に復帰する。
【０２８０】
なお、このログの適用の際に、ディスクドライブ２２０の磁気ディスクドライブ毎にログを分離し、磁気ディスクドライブ毎に並列処理を行うことによって、ログの適用の処理を高速化してもよい。
【０２８１】
図２８は、図２２のステップ２００６のログ適用処理２のフローチャートである。
【０２８２】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０２８３】
まず、バッファＤに格納されているログを読み出し、ディスクドライブ２２０のデータベースに適用する（ステップ２６０１）。この場合のログは、全てＩＮＳであるので（図２１Ｂ参照）具体的には、当該ログに基づいて、データベースへの挿入が処理される（ステップ２６０１）。
【０２８４】
次に、適用したログの行アドレスが、アドレス変換表に登録される（ステップ２６０２）。
【０２８５】
このログの適用処理２が完了すると、図２２の処理に復帰する。
【０２８６】
このように、表追い付き処理（図２２）によって、再編成処理中の記録された行ブロックに対するログが、再編成処理後のデータベースに適用される。
【０２８７】
次に、索引追い付き処理について説明する。
【０２８８】
図２９は、索引追い付き処理の概要のフローチャートである。
【０２８９】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０２９０】
まず、時系列に格納されているログから、再編成処理中に記録された索引ログが切り出され、取得される。
【０２９１】
なお、再編成処理中のみでなく、再編成処理後に、この索引追い付き処理の実行中に記録されるログについても考慮する必要がある。これに対しては、再編成処理中のログの追い付き処理を完了した後に、追い付き処理中に記録されたログを、さらに追い付き処理する方法や、再編成処理中のログの追い付き処理中に記録されたログについても、並行して追い付き処理する方法等が考えられる。
【０２９２】
次に、切り出された索引ログから、ＩＳ１（挿入）及びＤＬ１（削除）の索引ログが抽出される。
【０２９３】
次に、抽出された索引ログが、行アドレス毎に集約される。具体的には、抽出された索引ログに示される行アドレス毎にまとめられ、時系列順に並べられる。そして、行アドレス毎の索引ログに変換される。この索引ログの変換は図３２で後述する。
【０２９４】
そして、この行アドレスが、アドレス変換表に記録されているか否かが判定される。
【０２９５】
アドレス変換表に記録されている場合は、アドレス変換表２２６を参照することで、当該索引ログに含まれている行アドレスから、再編成処理後の行アドレスを参照できる。一方、アドレス変換表２２６に記録されていない場合は、再編成処理前に存在しなかった行のアドレスに、再編成処理中に挿入されている。
【０２９６】
アドレス変換表２２６に記録されているか否かは、当該索引ログの行アドレスを参照することで判定される。アドレス変換表２２６に記録されている行アドレスについては、最古の索引ログが「ＤＬ１」である行アドレスが抽出される。
【０２９７】
次に、アドレス変換表に基づいて、索引アドレスが変換される。
【０２９８】
この場合、索引アドレスが変換されない場合、すなわち、再編成処理中に、索引エントリが削除された索引アドレスは、索引アドレスが変換できないので、当該索引ログに従って索引エントリが削除される。
【０２９９】
アドレス変換表２２６に基づいて、索引アドレスが変換される場合は、まず、索引アドレス順にログが並び替えられる。そして、並び替えられた索引ログをデータベースに適用する。
【０３００】
一方、アドレス変換表２２６に記録されていない行アドレスについては、最古の索引ログがＩＳ１である行アドレスが抽出される。なお、アドレス変換表２２６に記録されていない行アドレスの最古の索引ログがＩＳ１であり、最新の索引ログがＤＬ１である場合は、アドレス変換表２２６に記録されているログとして扱う。この索引ログについては、新たな行アドレスの領域を挿入する。この新たな行アドレスは、アドレス変換表２２６に記録される。
【０３０１】
図３０Ａ、図３０Ｂは、索引ログのアドレス変換の説明図である。
【０３０２】
再編成処理前に存在しなかった索引アドレスの索引ログは、図３０Ａのように当該索引アドレスに対応する行アドレスを、アドレス変換表に基づいて変換する。
【０３０３】
この場合、当該行アドレスに対してなされた操作が「ＤＬ１」のみであった場合は、そのまま「ＤＬ１」ログとする。
【０３０４】
一方、同一の索引アドレスに対して、複数の索引ログが記録されている場合は、複数の索引ログのうち、最古の索引ログ（最初に記録された索引ログ）及び最新の索引ログ（最後に記録された索引ログ）のみを取り出して変換処理を行う。
【０３０５】
最古のログが「ＩＳ１」であり、最新のログが「ＤＬ１」である場合は、当該索引アドレスに対する操作は、「ＮＯＰ」（No Operation）に変換される。実際には、当該索引アドレスには操作は行われない。
【０３０６】
最古のログが「ＤＬ１」（削除）であり、最新のログが「ＤＬ１」である場合は、当該行アドレスに対する操作は、一つの「ＤＬ１」に変換される。
【０３０７】
既にデータベースに存在する索引アドレスの索引エントリに対してなされた操作が「ＩＳ１」（挿入）のみであった場合は、図３０Ｂのように、そのまま「ＩＳ１」ログに変換される。
【０３０８】
一方、同一の索引アドレスに対して、複数の索引ログが記録されている場合は、複数の索引ログのうち、最古の索引ログ（最初に記録された索引ログ）及び最新の索引ログ（最後に記録された索引ログ）のみを取り出して変換処理を行う。
【０３０９】
最古のログが「ＩＳ１」であり、最新のログが「ＩＳ１」である場合は、当該行アドレスに対する操作は、一つの「ＩＳ１」に変換される。
【０３１０】
最古のログが「ＤＬ１」（削除）であり、最新のログが「ＩＳ１」である場合は、当該行アドレスに対する操作は、「ＤＬ１」、「ＩＳ１」という二つのログに変換される。
【０３１１】
図３１は、索引追い付き処理を示すフローチャートである。
【０３１２】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０３１３】
まず、索引ログを終端まで読み出したか否かを判定する（ステップ３００１）。
【０３１４】
索引ログの終端まで読み出されたと判定した場合は、処理を終了する。
【０３１５】
まだ索引ログの終端まで読み出されていないと判定した場合は、索引ログの読み込み処理が実行される（ステップ３００２）。この処理によって、ログ２２１から必要な索引ログがログ系列として抽出され、バッファＥに格納される。
【０３１６】
次に、バッファＥに格納された索引ログ系列の集約処理が実行される（ステップ３００３）。この処理によって、行アドレス毎の索引ログに変換され、バッファＦに格納される。
【０３１７】
次に、アドレス変換処理が実行される（ステップ３００４）。この処理によって、アドレス変換表に記録されている索引ログとアドレス変換表に記録されていない索引ログとが判別され、それぞれ別のバッファＧ、バッファＨに格納される。なお、バッファＥ〜Ｈは、メモリ２１６上に予め設定されたものである。
【０３１８】
次に、バッファＧに格納された索引ログをデータベースの表に適用する索引ログ適用処理１が実行される（ステップ３００５）。
【０３１９】
次に、バッファＨに格納された索引ログをデータベースの表に適用する索引ログ適用処理２が実行される（ステップ３００６）。
【０３２０】
以上の処理が、全ての索引ログの読み込みが完了するまで実行される。
【０３２１】
なお、ステップ３００５及びステップ３００６は、必ずこのフローチャートの処理順序で実行される必要はない。バッファＧ及びバッファＨにログが格納された時点で、順次処理を開始するようにしてもよい。
【０３２２】
なお、これらのバッファＥ、Ｆ、Ｇ及びＨは、ディスク制御装置２１０のメモリ２１６に設けられる。
【０３２３】
図３２は、図３１のステップ３００２の索引ログ系列読み込み処理のフローチャートである。
【０３２４】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０３２５】
まず、索引ログの終端まで読み出されたか否か、又は、バッファＥに設定された容量の上限まで索引ログが格納され、バッファＥが満杯となったか否かを判定する（ステップ３１０１）。
【０３２６】
索引ログの終端まで読み出されたと判定した場合、又は、バッファＥが満杯となったと判定した場合は、図３１のフローチャートに復帰する。
【０３２７】
一方、またログの終端ではなく、かつ、まだバッファＥは満杯でないと判定した場合は、ログ２２１に記録された再編成処理中の索引ログが読み出される（ステップ３１０２）。
【０３２８】
次に、読み出されたログの種類が判別される（ステップ３１０３）。読み出されたログの種類が、ＩＮ１（挿入）又はＤＬ１（削除）であった場合は、ステップ３１４０に移行し、当該ログがバッファＥに格納される。
【０３２９】
一方、読み出されたログの種類が、ＩＮ１（挿入）及びＤＬ１（削除）の何れでもない場合は、ログを適用する必要がないため、ステップ３１０１に戻る。
【０３３０】
このログ読み込み処理によって、追い付き処理に必要なログ、すなわちＩＳ１（挿入）及びＤＬ１（削除）の索引ログが抽出され、バッファＥに格納される。
【０３３１】
図３３は、図３１のステップ３００３の索引ログ系列の集約処理のフローチャートである。
【０３３２】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０３３３】
前述したように、抽出されたログ系列が行アドレス毎に集約され、索引ログが変換される。
【０３３４】
まず、バッファＥに格納された索引ログ系列が、行アドレスの順で並べ替えられる（ステップ３２０１）。
【０３３５】
次に、バッファＥに格納された並べ替えられた索引ログの終端まで読み出されたか否かを判定する（ステップ３１０１）。並び替えられた索引ログの終端まで読み出されたと判定した場合は、図３１のフローチャートに復帰する。
【０３３６】
並び替えられた索引ログが、まだ終端まで読み出されていないと判定した場合は、バッファＥから、同一の行アドレスの索引ログが読み出される（ステップ３２０３）。
【０３３７】
次に、読み出された同一の行アドレスのログが変換される（ステップ３２０４）なお、この処理は図３４で後述する。この処理によって、同一の行アドレス毎の索引ログに変換される。
【０３３８】
次に、変換された索引ログが、バッファＦに格納される（ステップ３２０５）。そして、ステップ３２０２に戻り、次の行アドレスについて処理される。
【０３３９】
図３４は、図３３の索引ログ変換のフローチャートである。
【０３４０】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０３４１】
まず、同一の行アドレスに対する索引ログのうち、最古の索引ログの種別を判定する（ステップ３３０１）。最古の索引ログの種別がＤＬ１であると判定した場合は、ステップ３３０２に移行する。最古の索引ログの種類がＩＳ１であると判定した場合は、ステップ３３０５に移行する。
【０３４２】
ステップ３３０２では、同一の行アドレスの索引ログのうち、最新の索引ログの種別が判別される。最新の索引ログの種類がＩＳ１であると判定した場合は、ステップ３３０３において、当該行アドレスの索引ログは、ＤＬ１及びＩＳ１に変換される。
【０３４３】
一方、最新の索引ログの種類がＤＬ１であると判定した場合は、ステップ３３０４において、当該行アドレスへの索引ログはＤＬ１に変換される。
【０３４４】
同様にステップ３３０５では、同一の行アドレスに対する索引ログのうち、最新の索引ログの種別を判別する。最新の索引ログの種類がＩＳ１あると判定した場合は、ステップ３３０６において、当該行アドレスの索引ログはＩＳ１に変換される。
【０３４５】
一方、最新の索引ログの種類がＤＬ１であると判定した場合は、ステップ３３０７において、当該行アドレスの索引ログは出力されない。
【０３４６】
索引ログの変換が完了すると、図３３の処理に復帰する。
【０３４７】
図３５は、図３１のステップ３００４のアドレス変換処理のフローチャートである。
【０３４８】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０３４９】
まず、バッファＦに格納された索引ログが、終端まで読み出されたか否かを判定する（ステップ３４０１）。索引ログの終端まで読み出されたと判定した場合は、図３１のフローチャートに復帰する。
【０３５０】
索引ログがまだ終端まで読み出されていないと判定した場合は、バッファＦから、同一の行アドレスの索引ログが読み出される（ステップ３４０２）。
【０３５１】
次に、読み込んだ索引ログの行アドレスが、アドレス変換表に記録されていており、アドレス変換表から当該行アドレスが参照可能か否かを判定する（ステップ３４０３）。当該行アドレスがアドレス変換表に記録されていない場合と判定した場合は、ステップ３４０４に移行する。
【０３５２】
ステップ３４０４では、当該索引ログが、アドレス変換表２２６に基づいて、変換後の行アドレスに変換される。そして、行アドレスの変換された索引ログが、バッファＨに格納される（ステップ３４０５）。
【０３５３】
一方、当該行アドレスがアドレス変換表に記録されていると判定された場合は、ステップ３４０６に移行し、当該行索引ログの索引アドレスが、アドレス変換表２２６に基づいて変換後の索引アドレスに変換される。
【０３５４】
そして、行アドレスの変換されたログが、バッファＧに格納される（ステップ３４０７）。
【０３５５】
図３６は、図３１のステップ２００５の索引ログ適用処理１のフローチャートである。
【０３５６】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０３５７】
まず、バッファＧに格納された索引ログを、索引アドレスの順で並べ替えられる（ステップ３５０１）。
【０３５８】
次に、並び替えられた索引ログが読み出され、ディスクドライブ２２０のデータベースに適用される（ステップ３５０２）。具体的には、読み出された索引ログに示される索引アドレスの索引エントリに、当該索引ログの内容が適用される。
【０３５９】
また、ＤＬ１（削除）を指示する索引ログに関しては、当該索引アドレスがアドレス変換表から削除される（ステップ３５０３）。
【０３６０】
この索引ログ適用処理１が完了すると、図３１の処理に復帰する。
【０３６１】
なお、このログの適用の際に、ディスクドライブ２２０の磁気ディスクドライブ毎にログを分離し、磁気ディスクドライブ毎に並列処理を行うことによって、ログの適用の処理を高速化してもよい。
【０３６２】
図３７は、図３１のステップ３００６の索引ログ適用処理２のフローチャートである。
【０３６３】
この処理は、ＤＢ再編成処理部２１３によって実行される。
【０３６４】
まず、バッファＨに格納されている索引ログが読み出され、ディスクドライブ２２０のデータベースに適用される（ステップ３６０２）。具体的には、読み出された索引ログに示される索引アドレスに対して、当該索引ログの内容に基づいて索引エントリの領域が挿入され、索引ログに基づいてその内容が適用される。
【０３６５】
次に、索引エントリを挿入した索引アドレスが、アドレス変換表に登録される（ステップ３６０２）。
【０３６６】
この索引ログ適用処理２が完了すると、図３１の処理に復帰する。
【０３６７】
このように、索引追い付き処理（図３１）によって、再編成処理中のデータベースの索引ログが、再編成が処理されたＬＵに適用される。
【０３６８】
以上のように、本発明の実施形態のデータベースシステムでは、ストレージ装置２００に再編成処理部２１３を設け、ホストコンピュータ１００からの指示によってストレージ装置２００がデータベースの部分再編成と全再編成を選択的に行うことができる。
【０３６９】
部分再編成では、充填率（疎密の度合い）がしきい値Ｔｈ１以下のエクステント２０を対象として部分再編成を実施することで、再編成が必要な領域を的確に検出して、再編成が必要な領域のみについて再編成処理を実施することができる。また、再編成対象を特定する要素がＩ／Ｏコストである場合には、葉ブロック４２のうち、Ｉ／Ｏコストが大となる不連続な空間が多い葉ブロック４２についてのみ部分再編成を実施することで、データベースの応答性を確保できる。
【０３７０】
これにより、全再編成に比して極めて短時間に、データベースの最適化を行って、データベースの応答性の向上と、記憶空間の消費削減を効果的に行うことが可能となる。特に、近年の大規模なデータベースに適用することで、正ＤＢ２２２を無停止で運用しながら本発明の部分再編成を実施することで、短時間で効率よくデータベースの再編成を行うことができ、データベースの性能の劣化を確実に防止することが可能となる。また、管理者は、再編成を行う領域（または範囲）を検討する必要がないので、データベースの運用に係る労力を大幅に低減することが可能となる。
【０３７１】
なお、上記第１の実施形態において、充填率による部分再編成では、エクステント２０を再編成の単位領域として部分再編成を行ったが、表データブロック３０を再編成の単位領域として部分再編成を実施しても良い。
【０３７２】
また、上記第１実施形態に充填率として、充填率＝満データブロック数／エクステント２０のデータブロック数として、エクステント２０の実際のデータ量と全データ量の比率である満杯ブロック比率を用いたが、この他、充填率＝表データブロック３０内の空き領域の比率（データブロック内空き領域比率）や、充填率＝空きデータブロック数／エクステント２０のデータブロック数の比率（空きブロック比率）などを用いることができる。      
【０３７３】
そして、上記データブロック内空き領域比率または空きブロック比率を用いる場合では、これらの比率がしきい値Ｔｈ１を超えたら部分再編成を行うように、しきい値Ｔｈ１及び判定条件を変更すればよい。
【０３７４】
ここで、上記空きブロック比率、データブロック内空き領域比率、満杯ブロック比率の順で、データ領域のスペース効率は良くなる。空きブロック比率を用いた場合は、表データブロック３０の集合体であるエクステント２０内で再編成を実施すると、データが１行も入らない空きブロックができる可能性がある。データブロック内空き領域比率を用いた場合では、データブロック内のガベージコレクションにより空き領域比率を求めることになるので、エクステント２０内の空きスペースをサーチする際のオーバーヘッドが高くなる場合がある。このため、上記の順でデータ領域１のスペース効率は良くなる。
【０３７５】
＜第２実施形態＞
図３８は、第２の実施形態を示し、ストレージ装置２００のディスク制御部２１０にデータベースの再編成の要否を診断するＤＢ診断処理部２１７を設けたもので、その他の構成は前記第１実施形態と同様である。
【０３７６】
前記第１実施形態では、ホストコンピュータ１００からの指示に応じてＤＢ再編成処理部２１３が再編成処理を実施したが、本第２実施形態では、ストレージ装置２００に設けたＤＢ診断処理部２１７がデータベース（正ＤＢ２２２または副ＤＢ２２３）の状態を監視し、所定の条件となったときにＤＢ再編成処理部２１３に部分再編成の指示を行い、ストレージ装置２００が自立的に部分再編成を行うようにしたものである。
【０３７７】
ＤＢ診断処理部２１７は、所定の周期でデータベースを監視し、更新された行データが所定の比率（例えば、２０％）を超えたとき、あるいは削除された行データが索引エントリの所定の比率（例えば、２０％）を超えたときなど、データベースに局所的な乱れが生じていると推測できる状態になると、ＤＢ再編成処理部２１３に対して部分再編成を指令する。
【０３７８】
ＤＢ再編成処理部２１３は、上記図１３のステップ１５１２〜１５１７の充填率に基づく部分再編成またはステップ１５１８〜１５２６のＩ／Ｏコストに基づく部分再編成の少なくとも一方を実施する。なお、何れか一方の部分再編成のみを実施する場合では、疎の空間を縮小する充填率に基づく部分再編成が好ましい。
【０３７９】
これにより、管理者などが再編成の指示を行うこと無しに、自動的に部分再編成を実施することで、データベースの空間の乱れを常時最小にして、データベースの応答性の確保と記憶空間の消費削減を自動的に行うことができ、データベースの管理に要する労力またはコストを大幅に低減できる。
【０３８０】
なお、図１の構成において、ＤＢ状態解析制御部１５４が、上記ＤＢ診断処理部２１７と同様に、所定の周期でデータベースを監視し、データベースが上述のようにデータベースに局所的な乱れが生じていると推測できる状態になると、ＤＢ再編成制御部１５１に部分再編成の指令を行っても良い。この場合も、管理者が介在することなく、自立的にデータベースの部分再編成を実施することができる。
【図面の簡単な説明】
【０３８１】
【図１】本発明の第１の実施形態の、データベースシステムのブロック図である。
【図３】本発明の第１実施形態の、表データの説明図である。
【図２】本発明の第１実施形態の、索引データの説明図である。
【図４】本発明の第１実施形態の、ＤＢ−ディスクブロック変換テーブルの一例を示す説明図である。
【図５】本発明の第１実施形態の、ＬＵのマッピングの関係を示す説明図である。
【図６】本発明の第１実施形態の、ストレージ装置のディスク制御部で行われる処理の一例を示すフローチャートである。
【図７】本発明の第１実施形態の、Ｒｅａｄ処理のフローチャートである。
【図８】本発明の第１実施形態の、Ｗｒｉｔｅ処理のフローチャートである。
【図９】本発明の第１実施形態の、ボリュームコピー処理のフローチャートである。
【図１０】本発明の第１実施形態の、ＤＢ再編成制御処理のフローチャートである。
【図１１】本発明の第１実施形態の、ディスクドライブの再編成処理の説明図である。
【図１２】本発明の第１実施形態の、ＤＢ再編成処理のフローチャートである。
【図１３】本発明の第１実施形態の、ＤＢ再編成処理の再編成対象同定処理の一例を示すフローチャートである。
【図１４】本発明の第１実施形態の、再編成コマンドの説明図である。
【図１５】本発明の第１実施形態の、充填率に基づく部分再編成の様子を示す説明図である。
【図１６】本発明の第１実施形態の、論理アドレスｉとＬＢＮの関係を示す説明図である。
【図１７】本発明の第１実施形態の、Ｉ／Ｏコストに基づく部分再編成の様子を示す説明図である。
【図１８】本発明の第１実施形態の、追い付き処理のフローチャートである。
【図１９Ａ】本発明の第１実施形態の、再編成期間中のログから抽出されるログの説明図である。
【図１９Ｂ】本発明の第１実施形態の、再編成期間中のログから抽出されるログの説明図である。
【図２０】本発明の第１実施形態の、表追い付き処理の概要のフローチャートである。
【図２１Ａ】本発明の第１実施形態の、ログの集約の説明図である。
【図２１Ｂ】本発明の第１実施形態の、ログの集約の説明図である。
【図２２】本発明の第１実施形態の、表追い付き処理を示すフローチャートである。
【図２３】本発明の第１実施形態の、ログ読み出し処理のフローチャートである。
【図２４】本発明の第１実施形態の、ログの集約処理のフローチャートである。
【図２５】本発明の第１実施形態の、ログの変換のフローチャートである。
【図２６】本発明の第１実施形態の、アドレス変換処理のフローチャートである。
【図２７】本発明の第１実施形態の、ログ適用処理１のフローチャートである。
【図２８】本発明の第１実施形態の、ログ適用処理２のフローチャートである。
【図２９】本発明の第１実施形態の、索引追い付き処理の概要のフローチャートである。
【図３０Ａ】本発明の第１実施形態の、索引ログのアドレス変換の説明図である。
【図３０Ｂ】本発明の第１実施形態の、索引ログのアドレス変換の説明図である。
【図３１】本発明の第１実施形態の、索引追い付き処理を示すフローチャートである。
【図３２】本発明の第１実施形態の、索引ログ読み込み処理のフローチャートである。
【図３３】本発明の第１実施形態の、索引ログの集約処理のフローチャートである。
【図３４】本発明の第１実施形態の、索引ログの変換のフローチャートである。
【図３５】本発明の第１実施形態の、アドレス変換処理のフローチャートである。
【図３６】本発明の第１実施形態の、索引ログ適用処理１のフローチャートである。
【図３７】本発明の第１実施形態の、索引ログ適用処理２のフローチャートである。
【図３８】本発明の第２の実施形態の、データベースシステムのブロック図である。
【符号の説明】
【０３８２】
１００  ホストコンピュータ
１２０  メモリ
１３０  ＤＢ管理システム
１４０  ＤＢアクセス制御部
１４１  ＤＢ問合せ制御部
１４２  ＤＢアクセス処理部
１４３  ログ出力処理部
１５０  ＤＢ運用操作制御部
１５１  ＤＢ再編成処理部
１５２  ＤＢバックアップ制御部
１５３  ＤＢ回復制御部
１５４  ＤＢ状態回復制御部
１６０  ログバッファ
１７０  ＤＢバッファ
２１０  ディスク制御部
２１１  キャッシュメモリ
２１３  ＤＢ再編成処理部
２１５  ディスクアクセス制御部
２１７  ＤＢ診断処理部
２２１  ログ
２２２  主ＤＢ
２２３  副ＤＢ
２２４  ＤＢ定義情報
２２５  ＤＢ−ディスクブロック変換テーブル
２２６  アドレス変換表
【図１】
0004683546.tif 000002
【図２】
0004683546.tif 000003
【図３】
0004683546.tif 000004
【図４】
0004683546.tif 000005
【図５】
0004683546.tif 000006
【図６】
0004683546.tif 000007
【図７】
0004683546.tif 000008
【図８】
0004683546.tif 000009
【図９】
0004683546.tif 000010
【図１０】
0004683546.tif 000011
【図１１】
0004683546.tif 000012
【図１２】
0004683546.tif 000013
【図１３】
0004683546.tif 000014
【図１４】
0004683546.tif 000015
【図１５】
0004683546.tif 000016
【図１６】
0004683546.tif 000017
【図１７】
0004683546.tif 000018
【図１８】
0004683546.tif 000019
【図１９Ａ】
0004683546.tif 000020
【図１９Ｂ】
0004683546.tif 000021
【図２０】
0004683546.tif 000022
【図２１Ａ】
0004683546.tif 000023
【図２１Ｂ】
0004683546.tif 000024
【図２２】
0004683546.tif 000025
【図２３】
0004683546.tif 000026
【図２４】
0004683546.tif 000027
【図２５】
0004683546.tif 000028
【図２６】
0004683546.tif 000029
【図２７】
0004683546.tif 000030
【図２８】
0004683546.tif 000031
【図２９】
0004683546.tif 000032
【図３０Ａ】
0004683546.tif 000033
【図３０Ｂ】
0004683546.tif 000034
【図３１】
0004683546.tif 000035
【図３２】
0004683546.tif 000036
【図３３】
0004683546.tif 000037
【図３４】
0004683546.tif 000038
【図３５】
0004683546.tif 000039
【図３６】
0004683546.tif 000040
【図３７】
0004683546.tif 000041
【図３８】
0004683546.tif 000042