(57)【特許請求の範囲】
【請求項１】
第１のボリュームと第２のボリュームを備えるストレージ装置のデータを管理する方法であって、
サーバ装置が、端末計算機からデータの操作指示を受信するステップと、
前記サーバ装置が、前記データの操作指示に基づいて操作対象のデータを決定するステップと、
前記サーバ装置が、前記操作対象のデータが更新用か参照用かを判定するステップと、
前記サーバ装置が、当該サーバ装置に設定されたバッファに、前記操作対象のデータが読み込まれているか否かを判定するステップと、
前記操作対象のデータが参照用で、かつ、前記操作対象のデータが前記バッファに読み込まれていない場合に、前記サーバ装置が、前記第１のボリュームから読み出された前記操作対象のデータを前記バッファに読み込むステップと、
前記操作対象のデータが更新用で、かつ、前記操作対象のデータが前記バッファに読み込まれてない場合に、前記サーバ装置が、前記ストレージ装置に、前記第１のボリュームから前記操作対象のデータを読み出し、かつ、前記操作対象のデータを前記第２のボリュームに退避することを指示する第１のコマンドを発行し、前記ストレージ装置から前記操作対象のデータを受信して前記バッファに格納し、当該バッファにおいて更新を実行するステップと、
前記操作対象のデータが更新用で、かつ、前記操作対象のデータが前記バッファに読み込まれている場合に、前記サーバ装置が、前記ストレージ装置に、前記操作対象のデータを前記第１のボリュームから前記第２のボリュームに退避することを指示する第２のコマンドを発行し、前記バッファにおいて更新を実行するステップと、
を含むストレージ装置のデータ管理方法。
【請求項２】
前記サーバ装置が前記端末計算機から受付けるデータの操作指示は、ＳＱＬ文を含み、
前記サーバ装置が前記操作対象のデータが更新用か参照用かを判定するステップは、操作指示に含まれるＳＱＬ文の種類に応じて判定をする、
請求項１に記載のストレージ装置のデータ管理方法。
【請求項３】
第１のボリュームと第２のボリュームを備えるストレージ装置と、サーバ装置と、を含む計算機システムであって、
前記サーバ装置は、端末計算機からデータの操作指示を受信し、
前記サーバ装置は、前記データの操作指示に基づいて操作対象のデータを決定し、
前記サーバ装置は、前記操作対象のデータが更新用か参照用かを判定し、
前記サーバ装置は、当該サーバ装置に設定されたバッファに、前記操作対象のデータが読み込まれているか否かを判定し、
前記操作対象のデータが参照用で、かつ、前記操作対象のデータが前記バッファに読み込まれていない場合に、前記サーバ装置は、前記第１のボリュームから読み出された前記操作対象のデータを前記バッファに読み込み、
前記操作対象のデータが更新用で、かつ、前記操作対象のデータが前記バッファに読み込まれてない場合に、前記サーバ装置は、前記ストレージ装置に、前記第１のボリュームから前記操作対象のデータを読み出し、かつ、前記操作対象のデータを前記第２のボリュームに退避することを指示する第１のコマンドを発行し、前記ストレージ装置から前記操作対象のデータを受信して前記バッファに格納し、当該バッファにおいて更新を実行し、
前記操作対象のデータが更新用で、かつ、前記操作対象のデータが前記バッファに読み込まれている場合に、前記サーバ装置は、前記ストレージ装置に、前記操作対象のデータを前記第１のボリュームから前記第２のボリュームに退避することを指示する第２のコマンドを発行し、前記バッファにおいて更新を実行し、
前記第１のコマンド及び第２のコマンドの一方のコマンドを受信した前記ストレージ装置は、前記操作対象のデータが退避済みであるか否かを前記一方のコマンドに従って判定し、退避済みでない場合に前記一方のコマンドに従って前記操作対象のデータを前記第１のボリュームから前記第２のボリュームに退避する、
計算機システム。
【請求項４】
前記サーバ装置が前記端末計算機から受付けるデータの操作指示は、ＳＱＬ文を含み、
前記サーバ装置は、前記操作指示に含まれるＳＱＬ文の種類に応じて前記操作対象のデータが更新用か参照用かを判定する、
請求項３に記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置のデータ管理方法、特に、差分スナップショット技術を用いる場合のデータ管理方法に関する。
【背景技術】
【０００２】
計算機システムでは、データバックアップやデータチェックのために、ストレージ装置に格納されているデータを複製する場合がある。データを複製する方法としては、全てのデータを別のデータ領域にコピーする方法がある。しかし、この方法では、元のデータと、コピー先のデータの二つのデータを格納するために、大きなサイズのデータ格納領域が必要である。そのため、データの更新差分だけを管理し、仮想的にデータを複製する差分スナップショットという技術が用いられている。
【０００３】
差分スナップショット技術を用いる場合、ストレージ装置に対し、二つのデータ格納領域を設定する。一つ目のデータ格納領域をプライマリボリュームと呼び、二つ目のデータ格納領域を差分ボリュームと呼ぶ。プライマリボリュームには、複製元のデータを格納する。そして、プライマリボリュームのデータを更新する際に、更新前のデータを差分ボリュームに退避する。コピー先のデータを参照する場合には、まず差分ボリュームに該当データが退避されているか否かをチェックする。そして、データが退避されている場合には、差分ボリュームのデータを参照し、退避されていない場合には、プライマリボリュームのデータを参照する。また、差分ボリュームのデータを更新する場合には、その更新したデータを差分ボリュームに格納する。
【０００４】
差分スナップボリュームには、更新されたデータだけを格納するため、通常、そのサイズは小さい。そのため、差分スナップショット技術を用いることで、大きなサイズのデータ格納領域を用いずに、仮想的にデータを複製できる。
差分スナップショット技術に関しては、例えば、特許文献１に記載されている。また、データ退避に関する技術としては、非特許文献１が知られている。
【特許文献１】特開２００４−２７２８５４号公報
【非特許文献１】Kazuo Goda, Takayuki Tamura, Masato Oguchi and Masaru Kitsuregawa  著、「Run-time Load Balancing System on SAN-connected PC Cluster for Dynamic Injection of CPU and Disk Resource --- A Case Study of Data Mining Application ---」、Proceedings of 13th International Conference on Database and Expert Systems Applications (DEXA2002)  刊、２００２年９月発行、第１８２頁−第１９２頁
【発明の開示】
【発明が解決しようとする課題】
【０００５】
計算機システムでは、サーバ装置上で動作するアプリケーションプログラムが、ストレージ装置に対してデータ操作の指示を行なう場合が多い。このアプリケーションプログラムの例としては、ＤＢＭＳ（Database Management System）が挙げられる。ＤＢＭＳなどのアプリケーションプログラムがデータ更新を行なう場合、該当データを一旦サーバ装置のメモリ領域にデータを読み込み、メモリ領域のデータを変更した後、変更したデータをストレージ装置に書き出す場合がある。
【０００６】
そのため、プライマリボリュームのデータを更新する場合、以下のようにプライマリボリュームに対して３回のアクセスが行なわれる。まず、アプリケーションプログラムが、プライマリボリュームから更新対象のデータをメモリ領域に読み込む。次に、アプリケーションプログラムが、データをストレージ装置に書き出す。この書き出しの際に、更新前のデータを退避するために、プライマリボリュームのデータを読み出す。また、更新後のデータをプライマリボリュームに書き込む。このように、プライマリボリュームに対するアクセス回数が増大し、ストレージ装置の負荷が大きくなる問題があった。
【０００７】
本発明は、上記を鑑みてなされたもので、差分スナップショットを利用する際の、ストレージ装置の負荷を削減することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一態様は、第１のボリュームと第２のボリュームを備えるストレージ装置のデータを管理する方法であって、サーバ装置が、端末計算機からデータの操作指示を受信するステップと、前記サーバ装置が、前記データの操作指示に基づいて操作対象のデータを決定するステップと、前記サーバ装置が、前記操作対象のデータが更新用か参照用かを判定するステップと、前記サーバ装置が、当該サーバ装置に設定されたバッファに、前記操作対象のデータが読み込まれているか否かを判定するステップと、前記操作対象のデータが参照用で、かつ、前記操作対象のデータが前記バッファに読み込まれていない場合に、前記サーバ装置が、前記第１のボリュームから読み出された前記操作対象のデータを前記バッファに読み込むステップと、前記操作対象のデータが更新用で、かつ、前記操作対象のデータが前記バッファに読み込まれてない場合に、前記サーバ装置が、前記ストレージ装置に、前記第１のボリュームから前記操作対象のデータを読み出し、かつ、前記操作対象のデータを前記第２のボリュームに退避することを指示する第１のコマンドを発行し、前記ストレージ装置から前記操作対象のデータを受信して前記バッファに格納し、当該バッファにおいて更新を実行するステップと、前記操作対象のデータが更新用で、かつ、前記操作対象のデータが前記バッファに読み込まれている場合に、前記サーバ装置が、前記ストレージ装置に、前記操作対象のデータを前記第１のボリュームから前記第２のボリュームに退避することを指示する第２のコマンドを発行し、前記バッファにおいて更新を実行するステップと、を含む。
【発明の効果】
【０００９】
本発明により、データをメモリ領域に読み込む際に、差分ボリュームへデータを退避でき、第１のボリュームに対するアクセス回数を２回に削減できる。そしてデータの退避は完了しているため、データ更新の際に第１のボリュームのデータを読み出す必要がない。これにより、ストレージ装置の負荷が削減される。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の一実施形態を添付図面に基づいて説明する。
図１は、本発明を適用する第１の実施形態の計算機システムの構成を示すブロック図である。図１では、サーバ１でＤＢＭＳ（DataBase Management System）が動作し、ストレージ２がデータベース１０１を格納する計算機システムを示している。
【００１１】
サーバ１のＤＢＭＳ１００が、ネットワーク３を介して操作端末（端末計算機）５などからデータの操作要求を受け付け、その要求に従ってデータベース１０１に対するデータの操作を実行する。
【００１２】
ここで、サーバ１には、演算処理を実行するＣＰＵ１１と、プログラムやデータを一時的に格納するメモリ１２と、ＣＰＵ１１とＩ／Ｏのアクセスを制御するデータ転送コントローラ１３と、ネットワーク３に接続された通信部（ネットワークインターフェース）１４及びストレージ用のインターフェース１５が設けられている。
【００１３】
メモリ１２にはＤＢＭＳ１００のプログラムが格納されており、ＣＰＵ１１がＤＢＭＳ１００のプログラムを実行する。データ転送コントローラ１３は、ＣＰＵ１１、通信部１４、ストレージ用のインターフェース１５の間でデータを転送する。ストレージ用のインターフェース１５はＳＡＮ（Storage Area Network）４を介してストレージ２に接続されている。ＤＢＭＳ１００は、ＳＱＬ実行部１１０、バッファ管理部１２０、ディスク管理部１３０、データ領域管理テーブル１２１、ＤＢバッファ１４０によって構成されている。
【００１４】
ストレージ２は、ドライブ３０、ドライブ３１と、これらのドライブを制御するストレージコントローラ２０から構成される。ここに、ドライブ３０、ドライブ３１は、データを格納する装置である。以下、図１と図２における３０番のドライブをドライブ１、３１番のドライブをドライブ２と記す。
【００１５】
ストレージコントローラ２０は、演算処理を実行するＣＰＵ２１と、プログラムやデータを格納するメモリ２２と、データ転送コントローラ２３と、ＳＡＮ４に接続されたインターフェース２４と、ドライブ１と、ドライブ２に接続されたインターフェース２５と、ネットワーク３に接続されたインターフェース２６が設けられている。
【００１６】
メモリ２２には、ストレージ制御部２１０と退避指示判定部２２０のプログラムが格納されており、ＣＰＵ２１がこれらのプログラムを実行することによって、ドライブ１、ドライブ２へのアクセスを実行する。データ転送コントローラ２３は、ＣＰＵ２１、インターフェース２４、２５の間でデータを転送する。
【００１７】
ストレージ制御部２１０は、サーバ１からデータ操作に関するコマンドを受信し、それに基づいてドライブ１、ドライブ２に格納されたデータの操作を行なう。ここに、データ操作コマンドとは、データの参照（Ｒｅａｄ）やデータの更新（Ｗｒｉｔｅ）である。但し、本発明のストレージ２は、後に説明するように、データ退避の指示を含むデータ参照コマンドや、データ退避コマンドを受付けることができる。
【００１８】
ストレージ制御部２１０は、サーバ１から受信したコマンドに、データ退避の指示が含まれるか否かを判定するために、受信したコマンドを、退避指示判定部２２０に送信する。退避指示判定部２２０は、コマンドにデータ退避の指示が含まれるか否かの判定を行ない、その結果をストレージ制御部２１０に送信する。後に図１０と図１２のフローチャートを用いて説明するように、ストレージ制御部２１０は、コマンドにデータ退避の指示が含まれている場合には、データの退避を実行する。
【００１９】
図２に示すように、ストレージ制御部２１０は、ボリューム管理テーブル２１１を管理している。図５に例示するように、ボリューム管理テーブル２１１には、論理的なデータ格納領域であるボリュームとドライブの対応が記載されている。このボリュームは、ロジカルユニットと呼ばれる場合もある。図５の例では、ボリューム名２１１１「ＶＯＬ１」のエントリの、ドライブ名２１１３に「ドライブ１」が指定されていることから、ＶＯＬ１にドライブ１が対応することを示している。同様に、ＶＯＬ２にはドライブ２が対応することを示している。一つのボリュームに対して複数のドライブを対応させることも可能であるが、図５では、一つのボリュームに一つのドライブを対応させる例を示している。
【００２０】
また、ボリューム管理テーブル２１１には、種別２１１２と差分ボリューム名２１１４が記載されている。種別２１１２には「Ｐｒｉｍａｒｙ」または「Ｄｉｆｆｅｒｅｎｔｉａｌ」が指定され、「Ｐｒｉｍａｒｙ」は差分スナップショットの退避元ボリュームであることを示し、「Ｄｉｆｆｅｒｉｎｔｉａｌ」は差分スナップショットの退避先ボリュームであることを示す。図５の例ではＶＯＬ１に「Ｐｒｉｍａｒｙ」が指定され、ＶＯＬ２に「Ｄｉｆｆｅｒｉｎｔｉａｌ」が記載されていることから、ＶＯＬ１が退避元のボリュームであり、ＶＯＬ２が退避先のボリュームに指定されている。さらに、ＶＯＬ１の差分ボリューム名２１１４にＶＯＬ２が記載されており、ＶＯＬ１の差分スナップショットの退避先ボリュームがＶＯＬ２であることを示している。また、ＶＯＬ２の差分ボリューム名２１１４にＶＯＬ１が記載されており、ＶＯＬ２の差分スナップショットの退避元ボリュームがＶＯＬ１であることを示している。
【００２１】
ボリュームのデータ格納領域は、５１２バイトなどの一定サイズの領域に区切られ、それぞれにアドレスを付与されて管理されている。このアドレスは、ロジカルブロックアドレス（ＬＢＡ）と呼ばれる場合がある。図６は、ＶＯＬ１に格納されているデータベース１０１を例示している。アドレス１０１１はＶＯＬ１の一定サイズの領域ごとに付与される番号であり、図６の例では、ＶＯＬ１のアドレス「０」にデータ“ＡＡＡ”が格納されている。以上のように、ボリューム名とアドレスによって、ストレージが管理するドライブにアクセスできる。例えば、ストレージ制御部２１０が、サーバ１からＶＯＬ１のアドレス「０」のデータのＲｅａｄを指示するデータ操作コマンドを受け取った場合には、サーバ１に“ＡＡＡ”を送信する。
【００２２】
また、ストレージ制御部２１０は、図２に示すように、差分管理テーブル２２１と退避管理テーブル２２２を管理している。図７に例示する差分管理テーブル２２１には、差分スナップショットの退避元ボリュームのアドレス２２１１と、退避先ボリュームのアドレス２２１２が記載されている。図７の最初のエントリは、退避元ボリュームであるＶＯＬ１のアドレス「１００」のデータが、退避先ボリュームであるＶＯＬ２のアドレス「０」に退避されていることを示している。また、２番目のエントリと３番目のエントリは、ＶＯＬ１のアドレス「２００」のデータはＶＯＬ２のアドレス「１」に、ＶＯＬ１のアドレス「３００」のデータはＶＯＬ２のアドレス「２」に退避されていることを示している。
【００２３】
退避管理テーブル２２２は、退避元ボリュームのデータが退避済みか否かを記録するテーブルである。退避フラグ２２２２には、「０」または、「１」が記載され、「０」はデータが退避済みでないことを示し、「１」はデータが退避済みであることを示す。図８の例では、退避元ボリュームであるＶＯＬ１のアドレス「０」の退避フラグ２２２２は「０」であり、退避済みでないことを示している。同様に、ＶＯＬ１のアドレス「１」、アドレス「２」のデータも退避済みでないことを示している。ストレージ制御部２１０は、退避元ボリュームのデータを退避先ボリュームに退避した場合に、差分管理テーブル２２１と退避管理テーブル２２２の内容を変更する。
【００２４】
次に、ＤＢＭＳ１００の動作例について説明する。
【００２５】
図１に示すように、ＤＢＭＳ１００のプログラムはサーバ１のメモリ１２に格納されており、ＣＰＵ１１により実行される。ＤＢＭＳ１００は、操作端末５からデータ操作要求を受け付け、この要求に対応するクエリプランを作成する。ここにデータ操作要求とは、ＳＱＬ（Structured Query Language）などで記述されたデータの更新や参照などの指示である。また、クエリプランとは、指示されたデータ操作の実行方法であり、読み込むデータのボリューム名やアドレス、読み込んだデータの変更方法などが指定されている。
【００２６】
ＳＱＬ実行部１１０は、操作端末５から受信したデータ操作要求に基づいてクエリプランを作成する。データ操作要求とは、例えば、テーブル名が「Ｗａｒｅｈｏｕｓｅ」で識別カラム名「Ｗ＿ｉｄ」が「１」のデータの参照、といったものである。このデータ操作要求からクエリプランを生成するために、ＳＱＬ実行部１１０はデータ領域管理テーブル１２１を使用する。図３に示すように、データ管理テーブル１２１には、テーブル名１２１０、識別カラム名１２１１、識別カラム１２１２、ボリューム名１２１３、および、アドレス１２１４が記載されている。図３の例では、テーブル名が「Ｗａｒｅｈｏｕｓｅ」で識別カラム名「Ｗ＿ｉｄ」が「１」のデータは、ボリューム名「ＶＯＬ１」のアドレス「０」に格納されていることが分かる。従って、外部記憶装置のボリューム名「ＶＯＬ１」のアドレス「０」のデータを取得し操作端末５に送信するというクエリプランを生成することができる。なお、以上では、データ操作要求として一つのデータを参照する例を示したが、以上の操作を繰り返すことによって、複数のデータ参照やデータ更新を含むデータ操作要求に対するクエリプランを作成することも可能である。
【００２７】
ＳＱＬ実行部１１０は生成したクエリプランに従って、データの参照や更新を行なう。データ参照の場合、ＳＱＬ実行部１１０は参照するデータのボリューム名とアドレスをバッファ管理部１２０に通知する。バッファ管理部１２０は、ＤＢバッファ１４０を管理しており、要求されたデータがＤＢバッファ１４０にある場合には、このデータをＳＱＬ実行部１１０に渡す。ＳＱＬ実行部１１０は、バッファ管理部１２０から受け取ったデータを操作端末５に送信する。ＤＢバッファ１４０の格納内容を図４に例示する。ＤＢバッファ１４０には、ボリューム名１４０１とアドレス１４０２とデータ１４０３が記載されており、ＳＱＬ実行部１１０から要求されたデータが既にＤＢバッファ１４０に読み込まれているか否かを判定できる。ＳＱＬ実行部１１０から要求されたデータがＤＢバッファ１４０に読み込まれていない場合、バッファ管理部１２０はストレージ２に対してデータ参照コマンドを発行し、読み込んだデータをＤＢバッファ１４０に格納する。そして、バッファ管理部１２０はＳＱＬ実行部１１０にデータを渡す。
【００２８】
ＳＱＬ実行部１１０がデータ更新をする場合、更新するデータのボリューム名とアドレスをバッファ管理部１２０に通知する。バッファ管理部１２０は、要求されたデータがＤＢバッファ１４０にある場合には、このデータをＳＱＬ実行部１１０に渡す。要求されたデータがＤＢバッファ１４０にない場合には、バッファ管理部１２０はストレージ２に対してデータ読み込みコマンドを発行し、読み込んだデータをＤＢバッファ１４０に格納すし、ＳＱＬ実行部１１０にデータを渡す。ＳＱＬ実行部１１０は受け取ったデータに対し更新を行ない、そのデータをバッファ管理部１２０に渡す。バッファ管理部１２０は受け取ったデータをＤＢバッファ１４０に格納し、ストレージ２に対してデータ更新のコマンドを発行する。
【００２９】
以上のＤＢＭＳ１００の動作例において、ＳＱＬ実行部１１０は、データが参照用か更新用か判定することができる。例えば、操作端末５からデータ更新の要求を受付けた場合、そのデータは更新用のデータである。また、複数のデータ参照とデータ更新を含むクエリプランが生成された場合、参照したデータが後に更新されるのであれば、データ参照の時点で、更新用のデータと判定することができる。更新用データと判定した場合、ＳＱＬ実行部１１０は、ボリューム名とアドレスと更新用データであることをバッファ管理部１２０に通知する。更新用データであることを通知されたバッファ管理部１２０は、データ参照コマンドを退避指示追加部１３０に送信する。退避指示追加部１３０はデータ参照コマンドにデータの退避を指示するタグを追加して、バッファ管理部１２０に送信する。バッファ管理部１２０はデータの退避を指示が追加されたデータ参照コマンドをストレージ２に送信する。データ退避タグ付きのデータ読み込みコマンドを受信したストレージ２は、退避元ボリュームのデータを退避先ボリュームにデータを退避して、データをサーバ１に送信する。
【００３０】
また、バッファ管理部１２０は、更新用のデータが既にＤＢバッファ１４０に存在する場合に、退避だけを指示するコマンドをストレージ２に発行することができる。これにより、ストレージ２は、退避元ボリュームのデータを退避先ボリュームにデータを退避する動作を予め実行することができる。
【００３１】
また、上記の実施例の他に、ストレージ２が、図１５に例示する退避ボリューム設定テーブルを管理する実施例がある。この実施例では、退避ボリューム設定テーブルに設定されたボリュームのデータがアクセスされた場合に、ストレージ２はデータを退避先ボリュームに退避する。
【００３２】
＜処理の詳細＞
次に、サーバ１のＤＢＭＳ１００とストレージ２のストレージ制御部２１０で行われる処理の詳細について説明する。図９は、ＤＢＭＳ１００で行われる処理の一例を示すフローチャートで、操作端末５からクエリを受け付けるたびに実行される。
【００３３】
ＤＢＭＳ１００は、操作端末５からクエリ（データの操作指示）を受け付けると（Ｓ１）、クエリの内容を解析してクエリプランを作成する（Ｓ２）。Ｓ３では、作成したクエリプランに基づいて、ストレージ２からサーバ１へ読み込むデータを決定する。
【００３４】
Ｓ４では、サーバ１へ読み込むべきデータが、ＤＢバッファ１４０に読み込まれているか否かを判定する。既に、読み込むべきデータがＤＢバッファ１４０に読み込まれている場合にはＳ９へ進む。ＤＢバッファ１４０に該当するデータが読み込まれていない場合にはＳ５に進む。
【００３５】
Ｓ５では、ストレージ２から読み込むデータが更新用のデータか否かを判定する。すなわち、上記Ｓ２で作成したクエリプランを解析して、サーバ１へ該当するデータを読み込んだ後に更新するか否かを判定する。そして、更新用のデータである場合にはＳ６に進んでデータ退避タグ付きの参照コマンドを生成する。更新用のデータでない場合には、通常の参照コマンドを設定してＳ７に進む。
【００３６】
Ｓ７では、上記Ｓ５、Ｓ６で設定したデータ退避タグ付き参照コマンドまたは参照コマンドをストレージ２へ送信する。
【００３７】
Ｓ８では、データ退避タグ付き参照コマンドまたは参照コマンドに対するストレージ２からのデータを受信する。そして、ＤＢＭＳ１００は、受信したデータをＤＢバッファ１４０に格納する。
【００３８】
次に、Ｓ９ではＤＢバッファ１４０へ読み込んだ（または既に読み込まれている）データに対して更新するか否かを判定する。更新を行う場合には、Ｓ１０に進んでＤＢバッファ１４０上の該当データに対してクエリプランに従った更新を実行する。一方、読み込んだデータに対して更新を行わない場合にはＳ１１へ進む。Ｓ１１では、クエリを送信した操作端末５に対してクエリの結果を通知する。
【００３９】
以上の処理を操作端末５からクエリを受け付けるたびに実行することにより、サーバ１のＤＢバッファ１４０へ読み込んだデータについて更新を行う場合には、データ退避タグ付き参照コマンドを発行し、データ参照と合わせて該当データの退避を実行することができる。
【００４０】
上記Ｓ１で、操作端末５からサーバ１に送信されるデータ操作指示とは、例えば「UPDATE Warehouse SET name = "Tokyo" WHERE W_id = 1」といったものである。これは、図３で示したように、Warehouseというテーブル名１２１０のW_idという識別カラム名１２１１が「１」のnameカラム１２１２の値をTokyoに変更する指示である。
【００４１】
上記では、UPDATE文の実施例を示したが、「SELECT name FROM Warehouse Where W_id = 1」といったデータ操作指示を受け付けることもできる。これは、WarehouseテーブルのW_idカラムが「１」のnameカラムのデータの読み込みを指示するものである。
次に、ストレージ２のストレージコントローラ２０で行われる処理について説明する。図１０、図１１、図１２は、ストレージコントローラ２０で行われる処理の例を示すフローチャートである。図１０は、ストレージコントローラ２０がＳＡＮ４から参照コマンドまたはデータ退避タグ付き参照コマンドを受信したときの処理を示す。図１１は、ストレージコントローラ２０がＳＡＮ４から書き込みコマンドを受信したときの処理を示し、図１２は、ストレージコントローラ２０がＳＡＮ４からデータ退避コマンドを受信したときの処理を示す。
【００４２】
まず、図１０の参照コマンドまたはデータ退避タグ付き参照コマンドを受信したときの処理では、Ｓ２１でストレージコントローラ２０が、参照コマンド（タグ付き参照コマンド）を受信する。次に、Ｓ２２ではストレージコントローラ２０がプライマリボリュームから参照コマンドで指定されたアドレスのデータを読み込む。
【００４３】
次に、Ｓ２３では、受信した参照コマンドのタグを参照し、タグ付き参照コマンドであるか否かを判定する。例えば、図１３で示すように、ストレージコントローラ２０で受け付けるコマンドがｎビットで表される場合、０ビットをタグ領域とし、１ビットからｎビットをコマンド領域とする。そして、例えば、タグ領域の値が「１」の場合にはデータ退避の指示を示し、「０」の場合にはデータ退避の指示無しを示す。
【００４４】
Ｓ２３では、参照コマンドに付加されたタグ領域の値に基づいてデータ退避の指示の有無を判定し、指示ありと判定した場合にはＳ２４へ進んでデータの退避を実行する。一方、指示無しと判定した場合には、Ｓ２７に進んで要求元のサーバ１へこのデータを送信する。
【００４５】
データ退避タグ付き参照コマンドの場合のＳ２４では、ストレージコントローラ２０は、上記Ｓ２２で読み出したプライマリボリュームのアドレスについて退避管理テーブル２２２を参照し、退避フラグ２２２２の値に基づいて退避が完了しているか否かを判定する。この判定の結果、プライマリボリューム上の該当するデータの退避が完了していなければ、Ｓ２６へ進んで差分スナップショットの作成を行う。一方、該当するデータの退避が完了していればＳ２７に進む。
【００４６】
Ｓ２６では、プライマリボリュームから読み出したデータを差分ボリュームに複写してデータの退避を実施する。そして、ストレージコントローラ２０は、データの退避が完了すると差分管理テーブル２２１に、複写したプライマリボリュームのアドレス２２１１と退避先の差分ボリュームの退避先アドレス２２１２とを書き込む。また、データの退避が完了したのでプライマリボリューム上の該当するアドレス２２２１について退避管理テーブル２２２の退避フラグ２２２２を「１」にセットし、データの退避完了を記録する。
【００４７】
Ｓ２７では、ストレージコントローラ２０が、データの退避が完了したデータを、要求元のサーバ１に送信して処理を終了する。なお、データ退避の指示のない参照コマンドの場合は、Ｓ２２で読み込んだプライマリボリュームのデータを、そのままサーバ１へ送信する。
【００４８】
このように、データ退避タグ付き参照コマンドの場合では、ストレージコントローラ２０が読み込んだデータについてプライマリボリュームから差分ボリュームへ複写してから、サーバ１が要求したデータを送信する。そして、データの退避が完了すると、差分管理テーブル２２１と退避管理テーブル２２２を更新する。
【００４９】
次に、図１１を用いて、ストレージコントローラ２０が更新コマンドを受信したときの処理を説明する。
【００５０】
まず、Ｓ３１でストレージコントローラ２０が、更新コマンドを受信する。次に、Ｓ３２ではストレージコントローラ２０が書き込み対象のアドレスのデータの退避が完了しているか否かを判定する。この判定の結果、退避が完了していなければ、Ｓ３３へ進んで書き込み対象のプライマリボリュームのアドレスのデータを、差分ボリュームに退避する。そして、データの退避が完了すると、差分管理テーブル２２１に、複写したプライマリボリュームのアドレス２２１１と退避先の差分ボリュームの退避先アドレス２２１２とを書き込む。
【００５１】
一方、Ｓ３２の判定で書き込み対象のプライマリボリュームのデータの退避が既に完了している場合には、Ｓ３４に進む。
【００５２】
Ｓ３４では、ストレージコントローラ２０は、書き込み対象のプライマリボリュームのデータを更新する。そして、Ｓ３５では、ストレージコントローラ２０が、データの書き込みが完了した通知をサーバ１に送信して処理を終了する。
【００５３】
次に、図１２を用いて、ストレージコントローラがデータ退避コマンドを受信したときの処理を説明する。
【００５４】
まず、Ｓ４１でストレージコントローラ２０が、データ退避コマンドを受信する。次に、Ｓ４２ではストレージコントローラ２０がデータ退避対象のプライマリボリューム上のアドレスのデータについて退避が完了しているか否かを上記Ｓ２４、Ｓ２５と同様に判定する。この判定の結果、退避が完了していなければ、Ｓ４３へ進んで書き込み対象のプライマリボリュームのデータを読み込む。そして、Ｓ４４では読み込んだデータを差分ボリュームに複写して退避を完了する。ストレージコントローラ２０は、プライマリボリュームのデータの退避が完了すると、差分管理テーブル２２１に、複写したプライマリボリュームのアドレス２２１１と退避先の差分ボリュームの退避先アドレス２２１２とを書き込む。また、退避管理テーブル２２２の該当するアドレス２２２１の退避フラグ２２２２を「１」にリセットし、退避が完了したことを記録する。
【００５５】
一方、書き込み対象のプライマリボリュームのデータの退避が既に完了している場合には、Ｓ４５に進む。
【００５６】
Ｓ４５では、ストレージコントローラ２０が、データの退避が完了した通知をサーバ１に送信して処理を終了する。
【００５７】
このように、データ退避コマンドの場合では、ストレージコントローラ２０がデータの退避対象のプライマリボリュームのデータを差分ボリュームに退避し、差分管理テーブル２２１と退避管理テーブル２２２を更新する。
【００５８】
なお、上記データ退避コマンドは、ＤＢＭＳ１００が参照を行うデータがＤＢバッファ１４０へ既に読み込まれており、かつ、ＤＢバッファ１４０上で更新されている場合に、ＤＢＭＳ１００がストレージ２へ発行するようにしても良い。この場合、ＤＢバッファ１４０上で更新されてからストレージ２へ書き込まれていないデータに対して参照要求があった場合、ストレージ２のストレージコントローラ２０では、データ退避コマンドを受け付けて、書き込みが発生する以前に、事前に差分スナップショットを作成することが可能となる。これにより、ＤＢバッファ１４０上で更新されたデータをストレージ２で更新する際には、既に差分スナップショットが作成されているので、書き込みのみを行えば良く、ストレージ２の処理を迅速に行うことができる。
【００５９】
以上のように、本発明ではサーバ１がストレージ２に対してデータの参照を行う際に、参照を行うデータについて更新を伴うか否かを判定し、更新を伴う場合には参照コマンドにデータの退避を指示するタグを付けた参照コマンドを発行する。データ退避タグ付き参照コマンドを受信したストレージ２のストレージコントローラ２０は、参照を要求されたデータの退避が完了した後に、このデータをサーバ１へ送信する。これにより、サーバ１からストレージ２へタグ付き参照コマンドを一回送信するだけで、データの退避とデータの読み込みを行うことが可能となる。
【００６０】
なお、上記実施形態では、サーバ１でＤＢＭＳ１００が稼動する例を示したが、データの参照をストレージ２へ要求する際に、参照するデータについて後に更新を行うか否かを判定または推定可能なアプリケーションやサービスであれば本発明を適用することができる。
【００６１】
また、サーバ１とストレージ２がＳＡＮ４で接続された例を示したが、ストレージ２がＳＣＳＩやＳＡＴＡなどのインターフェースを介してサーバ１に接続される場合でも本発明を適用することができる。
【００６２】
＜第２実施形態＞
図１４は、前記第１実施形態の図９に示したサーバ１で稼動するＤＢＭＳ１００の処理の一部を変更し、参照を要求するデータがＤＢバッファ１４０に存在した場合も、更新対象のデータであればタグ付き参照コマンドを実行しておき、予めデータの退避を行うようにしたものである。その他の構成は、前記第１実施形態と同様である。
【００６３】
図１４において、ＤＢＭＳ１００の処理は、Ｓ１〜Ｓ３及びＳ５〜Ｓ１１の処理は前記第１実施形態の図９と同様であり、Ｓ４の判定でＹＥＳとなった場合が前記第１実施形態の図９と異なる。
【００６４】
Ｓ４では、参照するデータがＤＢバッファ１４０になければ、前記第１実施形態の図９と同様にＳ５へ進む。一方、参照するデータがＤＢバッファ１４０に既に存在する場合は、Ｓ５１に進んで更新を行うデータであるか否かを判定する。Ｓ２で作成したクエリプランを解析して、サーバ１へ該当するデータを読み込んだ後に更新するか否かを判定する。そして、更新する場合には差分スナップショットの作成を実行するためにＳ５２に進んでタグ付き参照コマンドを設定する。Ｓ５２では、ＤＢバッファ１４０上のデータについて、タグ付き参照コマンドを設定し、Ｓ７へ進んでストレージ２にデータの参照と差分スナップショットの作成を指令する。
【００６５】
一方、Ｓ５１の判定で、更新する必要がない場合には、既に読み込み済みである旨を通知するためＳ１１に進む。
【００６６】
以上のように、ＤＢＭＳ１００が読み込むデータがＤＢバッファ１４０上に存在する場合でも、当該データがサーバ１へ読み込まれた後に、更新が行われるまたは更新が予想される場合には、タグ付き参照コマンドを発行して当該データの差分スナップショットを作成しておく。これにより、更新が予想されるデータに対してＤＢＭＳ１００が更新を行って、ストレージ２へ書き込みを要求すると、このデータは既に差分スナップショットの作成が事前に完了しているので、そのまま書き込みが行われることになる。これにより、ストレージ２では、書き込みを要求されたデータについて差分スナップショットを作成する時間が不要になって書き込み処理の高速化を図ることが可能となる。
【００６７】
＜第３実施形態＞
また、上記の実施例の他に、ストレージコントローラ２０が、図１５に例示する退避ボリューム設定テーブルを管理する実施例がある。ストレージコントローラ２０は、メモリ２２に差分退避属性テーブル２２３を格納する。退避ボリューム設定テーブル２２３には、参照されたデータを差分ボリュームへ退避するボリューム名を格納する。なお、この差分退避属性テーブル２２３は、管理端末６等から設定される。
【００６８】
ストレージ制御部２１０は、サーバ１から参照コマンドを受信すると、コマンドに指定されたボリュームが退避ボリューム設定テーブル２２３に設定されているか否かを判定する。コマンドに指定されたボリュームが退避ボリューム設定テーブル２２３に設定されていれば、プライマリボリュームのデータを差分ボリュームに退避してから、データをサーバ１に送信する。
【００６９】
このような実施例においても、データ参照時にプライマリボリュームのデータを差分ボリュームに退避し、プライマリボリュームに対する負荷を軽減することができる。
【００７０】
なお、本明細書では、データアクセスをするアプリケーションプログラムとしてＤＢＭＳを用いて説明したが、アプリケーションプログラムはＤＢＭＳに限定されない。
【産業上の利用可能性】
【００７１】
以上のように、本発明によればデータ参照の際にデータの退避をすることで、ストレージ装置の負荷を軽減することが可能である。
【図面の簡単な説明】
【００７２】
【図１】本発明の第１の実施形態を示す計算機システムのブロック図。
【図２】サーバのＤＢＭＳと、外部記憶装置のストレージ制御部の機能ブロック図。
【図３】データ領域管理テーブルの一例を示す説明図。
【図４】ＤＢバッファの一例を示す説明図。
【図５】ボリューム管理テーブルの一例を示す説明図。
【図６】データベースの内容を示す説明図。
【図７】差分管理テーブルの一例を示す説明図。
【図８】退避管理テーブルの一例を示す説明図。
【図９】サーバのＤＢＭＳで実行される処理の一例を示すフローチャート。
【図１０】外部記憶装置のストレージ制御部で実行される処理の一例を示し、参照コマンドまたはタグ付き参照コマンドを受信したときのフローチャート。
【図１１】外部記憶装置のストレージ制御部で実行される処理の一例を示し、書き込みコマンドを受信したときのフローチャート。
【図１２】外部記憶装置のストレージ制御部で実行される処理の一例を示し、データ退避コマンドを受信したときのフローチャート。
【図１３】コマンドとタグの説明図。
【図１４】第２の実施形態を示し、サーバのＤＢＭＳで実行される処理の一例を示すフローチャート。
【図１５】第３の実施形態を示し、外部記憶装置のストレージ制御部で管理される差分退避属性テーブルの一例を示す説明図。
【符号の説明】
【００７３】
１  サーバ
２  ストレージ
２０  ストレージコントローラ
３０  ドライブ１
３１  ドライブ２
１００  ＤＢＭＳ
１０１  データベース
１０２  差分データ
１１０  ＳＱＬ実行部
１２０  バッファ管理部
１３０  退避指示追加部
１４０  ＤＢバッファ
２１０  ストレージ制御部
２２０  退避指示判定部
２１１  ボリューム管理テーブル
２２１  差分管理テーブル
２２２  退避管理テーブル
【図１】
0004839133.tif 000002
【図２】
0004839133.tif 000003
【図３】
0004839133.tif 000004
【図４】
0004839133.tif 000005
【図５】
0004839133.tif 000006
【図６】
0004839133.tif 000007
【図７】
0004839133.tif 000008
【図８】
0004839133.tif 000009
【図９】
0004839133.tif 000010
【図１０】
0004839133.tif 000011
【図１１】
0004839133.tif 000012
【図１２】
0004839133.tif 000013
【図１３】
0004839133.tif 000014
【図１４】
0004839133.tif 000015
【図１５】
0004839133.tif 000016