(57)【特許請求の範囲】
【請求項１】
トランザクション処理が実行されるホスト計算機と、前記トランザクション処理により前記ホスト計算機からアクセスされるデータベースを格納した第１の記憶装置及び前記ホスト計算機からの要求に基づいて前記第１の記憶装置のアクセスを行う記憶制御装置とを備える記憶装置サブシステムとを有する計算機システムにおけるデータベースアクセス方法において、
前記記憶制御装置が、前記記憶装置サブシステムが有する第２の記憶装置に対するデータの書き込みを前記第１の記憶装置に反映する二重化を行うよう構成されており、
前記ホスト計算機が、前記トランザクション処理によりデータの更新要求が発生したときに、前記第１の記憶装置からの未完了のデータのリード処理が存在するか判別し、
前記ホスト計算機が、未完了のデータの読み出し処理が存在する場合に、前記第１の記憶装置と前記第２の記憶装置との間のデータの反映の中断を前記記憶制御サブシステムに指示し、その後に、前記更新要求に関連するライトデータのライト要求を前記記憶サブシステムが有する第２の記憶装置を対象として発行することで、前記更新要求に伴うライトデータを前記第１の記憶装置に格納させず前記第２の記憶装置に格納させて前記更新要求に伴う前記記憶装置サブシステムへのライト処理を完了させ、前記ライト処理、及び前記未完了のリード処理が終了した後に、前記第１の記憶装置と前記第２の記憶装置との間のデータの反映を再開することの反映再開指示を前記記憶装置サブシステムに送り、
前記記憶装置サブシステムが、前記ライト処理、及び前記未完了のリード処理が終了した後、前記ホスト計算機からの前記反映再開指示を受けて、前記第２の記憶装置に格納された前記ライトデータを前記第１の記憶装置に転送する、
ことを特徴とするデータベースアクセス方法。
【請求項２】
トランザクション処理が実行されるホスト計算機と、前記トランザクション処理により前記ホスト計算機からアクセスされるデータベースを格納した記憶装置及び前記ホスト計算機からの要求に基づいて前記記憶装置のアクセスを行う記憶制御装置とを備える記憶装置サブシステムとを有する計算機システムにおけるデータベースアクセス方法において、
前記記憶制御装置が、キャッシュメモリを有しており、前記ホスト計算機からのライト要求に伴うデータを前記キャッシュメモリに書き込んで、前記ホスト計算機にライト処理の完了を報告し、前記キャッシュメモリに書き込んだデータを前記記憶装置に転送するよう構成されており、
前記ホスト計算機が、前記トランザクション処理によりデータの更新要求が発生したときに、前記記憶装置からの未完了のデータのリード処理が存在するか判別し、
前記ホスト計算機が、未完了のデータの読み出し処理が存在する場合に、前記記憶装置サブシステムへのライト要求に先立って、前記記憶装置サブシステムに、前記記憶装置へのデータの書き込みの禁止を指示し、その後に、前記記憶装置サブシステムに、前記更新要求に関連するデータのライト要求を発行し、
前記記憶装置サブシステムが、前記禁止の指示に応答して、前記禁止の指示を受け付けた以降に受け付けたライト要求に伴うデータを前記キャッシュメモリに書き込んで前記ホスト計算機にライト処理の完了を報告するが、そのデータの前記キャッシュメモリから前記記憶装置への転送を行わず、
前記ホスト計算機が、前記未完了の読み出し処理及び前記発行したライト要求に伴うデータのライト処理の完了後に、前記記憶装置サブシステムに、前記書き込みの禁止の解除を指示し、
前記記憶制御サブシステムが、前記禁止の解除の指示に応答して、前記キャッシュメモリに格納された前記データを前記記憶装置に転送する、
ことを特徴とするデータベースアクセス方法。
【請求項３】
前記禁止の指示を受け付けた以降に受け付けたライト要求に伴うデータを前記キャッシュメモリに書き込む場合には、前記データを格納した前記キャッシュメモリの記憶領域を特定するための情報と、前記データを書き込むべき前記記憶装置の記憶領域を特定するための管理情報とも記録し、
前記転送するステップは、前記管理情報を参照して行われる、
ことを特徴とする請求項２記載のデータベースアクセス方法。
【請求項４】
前記管理情報は、前記ホスト計算機上で実行される前記トランザクションの単位ごとに記録され、
前記転送するステップは、前記トランザクションの完了ごとに、そのトランザクション内で書き込まれたデータを対象として行われる、
ことを特徴とする請求項３記載のデータベースアクセス方法。
【請求項５】
前記転送するステップは、前記記憶装置サブシステムにおいて前記ホスト計算機からのリード要求を受け付けるステップと、前記管理情報に基づいて、前記ホスト計算機に転送すべきデータが前記第１の記憶装置及び前記第２の記憶装置のいずれに保持されているかを判別するステップと、前記判別の結果に基づいて要求されたデータを前記ホスト計算機に転送するステップとを含む、
ことを特徴とする請求項４記載のデータベースアクセス方法。
【請求項６】
トランザクション処理が実行されるホスト計算機と、該ホスト計算機に接続され、トランザクション処理でアクセスされるデータベースを格納した記憶装置サブシステムとを有する計算機システムにおいて、
前記記憶装置サブシステムは、前記データベースを二重化して格納する第１の記憶装置及び第２の記憶装置と、前記第１及び第２の記憶装置を制御し、前記第２の記憶装置に対するデータの書き込みを前記第１の記憶装置に反映する二重化を行う記憶制御装置とを備え、
前記ホスト計算機は、
前記データベースからのデータの読み出しを前記第１の記憶装置を指定して行い、前記データベースへのデータの書き込みを前記第２の記憶装置を指定して行う手段と、
前記データベースへのデータの書き込み時に、未完了の前記データベースからの読み出し処理が存在するか判別し、未完了の読み出し処理が存在するときに前記記憶装置サブシステムへのライト要求に先立って、前記第１の記憶装置へのデータの反映の中断を前記記憶装置サブシステムに指示し、その後に、ライト要求を前記記憶装置サブシステムに発行し、前記未完了の読み出し処理及び当該データの書き込み処理が終了した後に、中断したデータの反映の再開を前記記憶装置サブシステムに指示する手段と
を備える、
ことを特徴とする計算機システム。
【請求項７】
トランザクション処理が実行されるホスト計算機と、該ホスト計算機に接続され、トランザクション処理でアクセスされるデータベースを格納した記憶装置サブシステムとを有する計算機システムにおいて、
前記記憶装置サブシステムは、前記データベースを格納した記憶装置と、前記記憶装置を制御し、キャッシュメモリを有する記憶制御装置とを備え、
前記ホスト計算機は、前記データベースへのデータの書き込み時に、未完了の前記データベースからの読み出し処理が存在するか判別し、未完了の読み出し処理が存在するときに、前記記憶装置サブシステムへのライト要求に先立って、前記記憶装置へのデータの書き込み禁止を前記記憶装置サブシステムに指示し、その後に、ライト要求を前記記憶装置サブシステムに発行し、前記未完了の読み出し処理及び当該データの書き込み処理が終了した後に、前記記憶装置への書き込みの再開を指示する手段とを備え、
前記記憶制御装置は、前記ホスト計算機からのライト要求に伴うデータを前記キャッシュメモリに書き込んで、前記ホスト計算機にライト処理の完了を報告し、前記キャッシュメモリに書き込んだデータを前記記憶装置に転送するよう構成されており、前記禁止の指示に応答して、前記禁止の指示を受け付けた以降に受け付けたライト要求に伴うデータを前記キャッシュメモリに書き込んで前記ホスト計算機にライト処理の完了を報告するが、そのデータの前記キャッシュメモリから前記記憶装置への転送を行わず、前記再開の指示に応答して、前記キャッシュメモリに書き込んだデータを前記記憶装置に転送する、
ことを特徴とする計算機システム。
【請求項８】
トランザクション処理が実行されるホスト計算機と、該ホスト計算機に接続され、トランザクション処理でアクセスされるデータベースを格納した記憶装置サブシステムとを有する計算機システムにおいて、
前記記憶装置サブシステムは、前記データベースを格納した記憶装置と、前記記憶装置を制御し、キャッシュメモリを有する記憶制御装置とを備え、
前記ホスト計算機は、
前記データベースのアクセスに際して、アクセスが発生したトランザクションを識別するトランザクション識別子を含むリード／ライト要求を発行する手段と、
トランザクションの完了時に前記記憶装置サブシステムにコミットを指示する手段と
を備え、
前記記憶制御装置は、
前記ホスト計算機が発行したライト要求に応答して、該ライト要求に伴うデータを前記キャッシュメモリに書き込んで前記ホスト計算機にライト処理の完了を報告し、該ライト要求に含まれるトランザクション識別子を管理する手段と、
前記コミットの指示に応答して、完了したトランザクションにより発生したライト要求により前記キャッシュメモリに書き込んだデータを前記記憶装置に転送する手段と、
前記ホスト計算機が発行したリード要求に応答して、当該リード要求に含まれるトランザクション識別子から識別されるトランザクションよりも時間的に前に実施されたトランザクションを表すトランザクション識別子に対応するデータが前記記憶装置及び前記キャッシュメモリのいずれに保持されているかを判別し、前記キャッシュメモリに保持されていると判別された場合には、前記キャッシュメモリ上のデータを前記ホスト計算機に転送し、前記キャッシュメモリに保持されておらず前記記憶装置に保持されていると判別された場合には、前記記憶装置内のデータを前記ホスト計算機に転送する手段と
を備える、
ことを特徴とする計算機システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、情報処理システムなどにおけるデータベースシステムの問い合わせ方法に係り、特に、複数のトランザクション処理を高速化する方法に関する。
【０００２】
【従来の技術】
銀行の勘定系処理、航空会社における航空券予約処理など、同時に複数の処理要求を受け付ける必要のある処理では、オンライントランザクションシステムが広く使われている。
【０００３】
オンライントランザクションシステムでは、ほぼ同時に複数の要求が発生したときでも、矛盾のないデータを返却することが要求される。例えば、あるユーザ（第１のユーザ）の要求により、データベースのある部分の読み出しが行われている途中で、別のユーザ（第２のユーザ）が同じデータ部分への更新要求を行うことを考える。この場合、第１のユーザからの要求により読み出すべきデータは、第２のユーザからの要求により更新される以前のデータである。第２のユーザからの要求によるデータ更新をそのまま実行させると、第１のユーザからの要求によりデータが読み出されるよりも前にデータが書き換えられてしまう可能性がある。このため、システムは、第１のユーザの要求に応じてその要求により読み出すべきデータをロックし、他のユーザによるデータ更新を第１のユーザからの要求によるデータの読み出しが完了するまでは待たせる。
【０００４】
各ユーザからの要求により実行されるそれぞれの処理のことをトランザクションと呼ぶ。オンライントランザクションシステムは、各トランザクションが競合して矛盾したデータを読み出す、あるいは書き込むことが無いように制御する。上述した技術では、第１のユーザからの要求によるデータ読み出しが非常に時間のかかる処理である場合、例えば、読み出すべきデータ量が非常に大きい場合、第２のユーザからの要求によるデータ書き込みは、第１のユーザからの要求によるデータ読み出しが完了するまで待たされる。このため、第２のユーザからの要求は、その処理に非常に時間がかかってしまう。
【０００５】
このような問題を解決するために、一部のデータベース管理システム（以下、ＤＢＭＳと略す）では、マルチバージョニングと呼ばれる技術が用いられる。マルチバージョニングに関しては、例えばＯＲＡＣＬＥ８アーキテクチャ(翔泳社)P.206-に解説されている。この技術では、第１のユーザからの要求によるデータの読み出しが完了していなくても、第２のユーザからの要求によるデータの書き込みが許可される。第２のユーザからの要求によりデータが書き込まれた領域第１のユーザからの要求によるデータの読み出しが必要になったときは、データベースのロールバックセグメントを用いて第２のユーザからの要求によるデータの書き込みが行われる前の時点のデータが復元され、第１のユーザに渡される。このような処理により、お互いの処理が阻害されることはなくなる。
【０００６】
【発明が解決しようとする課題】
上記従来技術によれば、マルチバージョニングによって、複数のトランザクションを同時に実行できるようになる。しかし、データの復元などは、すべてＤＢＭＳによって実施されるため、ホストコンピュータの負荷が大きく、結果として各処理時間が長くなってしまう。ロールバックセグメントは、それほど大きくとることはできず、大規模な更新処理などには向かないといった問題がある。
【０００７】
本発明の目的は、同一データ領域に対して同時に複数の要求があった場合に、システムの負荷を増大させずに効率的な処理を行うことのできる方法を提供することにある。
【０００８】
【課題を解決するための手段】
本発明における計算機システムは、その好ましい態様において、トランザクション処理が実行されるホスト計算機と、このホスト計算機に接続され、トランザクション処理でアクセスされるデータベースを格納した第１の記憶装置及びホスト計算機からの要求に基づいて第１の記憶装置のアクセスを行う記憶制御装置とを備える記憶装置サブシステムとを有して構成される。
【０００９】
ホスト計算機は、データベースの更新ためにディスクサブシステムへのライト要求を発行するに際して、データベースからの未完了のリード処理が存在するか確認する。未完了の読み出し処理が存在する場合、ホスト計算機は、発行したライト要求に応じて第１の記憶装置にデータが書き込まれないようディスクサブシステムに指示し、ライト要求をディスクサブシステムに発行する。
【００１０】
ディスクサブシステムは、ライト要求に応じてデータベースに書き込むべきデータを第１の記憶装置とは異なる第２の記憶装置に格納して処理の完了をホスト計算機に報告する。
【００１１】
ホスト計算機は、未完了のリード処理及びライト処理の完了後、第１の記憶装置へのデータの書き込みが行われるように指示する。ディスクサブシステムは、この指示に応じて、第２の記憶装置に書き込まれ、第１の記憶装置に書き込まれていないデータを第２の記憶装置から第１の記憶装置に書き込む。
【００１２】
本発明の一つの態様において、第１の記憶装置と第２の記憶装置とは、期多く制御装置により同じデータが二重化して格納されるように制御されたディスク装置により構成される。ホスト計算機は、通常の状態において、データベースからのデータの読み出しは第１の記憶装置を指定して実施し、データベースへのデータの書き込みは、第２の記憶装置を指定して行う。第２の記憶装置を指定して行われたデータの書き込みの結果は、記憶制御装置により、第１の記憶装置にも反映される。
【００１３】
ホスト計算機から第１の記憶装置にデータが書き込まれないよう指示された場合、記憶制御装置は、第２の記憶装置を指定して行われたデータの書き込みを第１の記憶装置に反映させることを一時的に中断する。第１の記憶装置へのデータの書き込みが行われるよう指示された場合、記憶制御装置は、第２の記憶装置から差分のデータを第１の記憶装置に転送し、両者の内容を一致させ、第２の記憶装置に対するデータの書き込みを第１の記憶装置に反映させるよう制御する。
【００１４】
本発明の他の態様において、第２の記憶装置は、記憶制御装置が有するキャッシュメモリにより構成される。ホスト計算機から第１の記憶装置にデータが書き込まれないよう指示された場合、記憶制御装置は、第１の記憶装置を指定したデータの書き込み要求に対して、データを第２の記憶装置に書き込んだ段階で処理の完了を報告する。第１の記憶装置へのデータの書き込みが行われるよう指示された場合、記憶制御装置は、第２の記憶装置に保持され、第１の記憶装置に書き込まれていないデータを第１の記憶装置に書き込む。
【００１５】
【発明の実施の形態】
−第１の実施形態−
図１は、本発明が適用された計算機システムの一実施形態における構成例を示すブロック図である。
【００１６】
本実施形態における計算機システムは、サーバ１、複数のクライアント計算機２a、２ｂ、…２ｎ（総称してクライアント２と呼ぶ）、及びサーバ１に接続される記憶装置サブシステム３を含んで構成される。
【００１７】
サーバ１は、記憶装置サブシステム３と接続するためのＳＣＳＩインタフェース１３、クライアント２と接続するためのネットワークインタフェース１４、データベース管理システム１１、ボリュームマネージャ１２を有する。サーバ１は、いわゆるパーソナルコンピュータや、ワークステーションなどの計算機により実現され、図示しないＣＰＵやメモリ、その他の周辺装置を有する。データベース管理システム１１，及びボリュームマネージャ１２は、メモリに格納され、ＣＰＵによって実行されることでその機能が実現されるプログラムとして実装される。ボリュームマネージャ１２は、データベース管理システム１１の中に組み込まれたソフトウェアとして実現されても良い。
【００１８】
クライアント２は、それぞれ、サーバ１と接続するためのネットワークインタフェース２２ａ、２２ｂ、２２ｃ、…２２ｎ(以後、総称してネットワークインタフェース２２と呼ぶ)、データベースクライアント２１ａ、２１ｂ、…２１ｎ(以後、総称してデータベースクライアント２と呼ぶ)を有する。クライアント２は、サーバ同様パーソナルコンピュータなどの計算機により実現され、図示しないＣＰＵメモリなどを有する。データベースクライアント２は、メモリに格納され、ＣＰＵによって実行されることでその機能が実現されるプログラムとして実装される。
【００１９】
データベース管理システム１１は、記憶装置サブシステム３に格納されたデータのアクセスを実施し、データベースクライアント２１は、データベース管理システム１１に処理要求を出して必要なデータにアクセスする。
【００２０】
記憶装置サブシステム３は、ディスクユニット３１ａ，３１ｂ、ディスクコントローラ３２、サーバ１と接続するインタフェース３３を有している。一般に、データベースでは、多数のディスクにデータが格納されるが、本実施形態では、説明を簡単化するためにデータベースのデータは、ディスクユニット３１ａ、３１ｂの２つのディスクユニットに格納されているものとする。また、ディスクユニット３１ａ、３１ｂの容量は同一であるとする。
【００２１】
ディスクコントローラ３２は、プロセッサ３２１、キャッシュメモリ３２２、制御メモリ３２３を有して構成される。
【００２２】
キャッシュメモリ３２２は、ホストとなる計算機（ここではサーバ１）からのアクセス処理速度を高めるため、頻繁に読み出されるデータを格納し、あるいはホスト計算機からのライトデータを一時的に格納する。キャッシュメモリ３２２は、格納されたデータが停電などの障害時に喪失されることを防ぐため、バッテリバックアップされるか、あるいはフラッシュメモリなどの不揮発メモリにより構成されることが望ましい。
【００２３】
プロセッサ３２１は、ホスト計算機からのアクセス要求の処理と、キャッシュメモリ３２２の制御を行う。これらの制御を行うプログラムは、制御メモリ３２３に格納される。ディスクユニット３１ａ、３１ｂは、それぞれ、必ずしも１つの磁気ディスクドライブである必要はなく、ディスクアレイのような、物理的に複数のディスクドライブをまとめて１または複数のディスクドライブに見せかけた論理ディスク装置であっても良い。
【００２４】
ディスクコントローラ３２は、ディスクユニット３１ａ、３１ｂをサーバ１からそれぞれ独立した１つのディスクユニットとしてアクセスできるよう制御する。ただし、ディスクユニット３１ｂに対するサーバ１からのアクセスは、リードのみが許可される。
【００２５】
ディスクコントローラ３２は、２以上のディスクユニットの内容を同一の状態に維持するボリューム二重化機能を有する。例えば、ディスクユニット３１ａと３１ｂが二重化状態とされているときに、サーバ１からディスクユニット３１ａへのデータのライト要求があると、ディスクコントローラ３２は、ディスクユニット３１ａにデータを書き込むとともに、同じデータをディスクユニット３１ｂにも書き込む。ボリューム二重化機能の設定と解除は、サーバ１のボリュームマネージャ１２が、ＳＣＳＩインタフェース１３を介して発行するコマンドによって操作される。ディスクコントローラ３２は、ボリュームマネージャ１２により二重化機能の解除が指示されると、ディスクユニット３１ｂへのデータ反映を中止する。これにより、ディスクユニット３１ｂには、二重化機能の解除が指示された時点のデータが保持される。ディスクコントローラ３２は、二重化機能の設定が指示されると、二重化機能が解除された後にディスクユニット３１ａに書き込まれた差分のデータをディスクユニット３１ｂにコピーし、ディスクユニット３１ａとディスクユニット３２ｂの内容を同一にする。
【００２６】
図２は、データベースのリードアクセス中に、サーバがリードアクセスの対象とされているデータ部分への更新要求を受けたときに実施されるデータベース管理システム１１の処理を示すフローチャートである。
【００２７】
本実施形態において、データベース管理システム１１は、データベースクライアント２１からデータの検索などのためにリード要求を受けると、ディスクユニット３１ｂをアクセスして要求されたデータを取り出す。
【００２８】
データベースクライアント２１からデータの更新要求があった場合、データベース管理システム１１は、ディスクユニット３１ｂへの実行中のリードアクセスの有無を調べる（ステップ１１０１）。実行中のリードアクセスが存在しない場合、データベース管理システム１１は、二重化機能を利用してディスクユニット３１ａ、３２ｂの双方に更新要求で指定されたデータを書き込み、データの更新を実施する（ステップ１１０２）。
【００２９】
ステップ１１０１において、実行中のリードアクセスが存在する場合、データベース管理システム１１は、ボリュームマネージャ１２を用いて、ディスクユニット３１ａとディスクユニット３１ｂの二重化処理を中断する（ステップ１１０３）。引き続きデータベース管理システム１１は、更新要求の内容に従って、ディスクユニット３１ａのデータを更新する（ステップ１１０４）。
【００３０】
データを更新した後、データベース管理システム１１は、先に実行が開始されているリードアクセス処理が終了しているかチェックし、リードアクセス処理が終了していない場合、それが完了するまで待ちつづける（ステップ１１０５）。リードアクセスが終了している場合、データベース管理システム１１は、ボリュームマネージャ１２により、ディスクユニット３１ａとディスクユニット３１ｂの二重化処理を再開させ、ディスクユニット３１ａからディスクユニット３１ｂに差分データをコピーする（ステップ１１０６）。
【００３１】
本実施形態によれば、データベース管理システム側の負荷が大きく増えることなくデータベースに対する複数のアクセス要求を処理することが可能となる。
【００３２】
−第２の実施形態−
図３は、本発明の第２の実施形態における計算機システムの構成を示す簡略なブロック図である。本実施形態における計算機システムは、ディスクコントローラ３２′の機能が、第１の実施形態のディスクコントローラ３２とは若干異なっている点を除くと、第１の実施形態の計算機システムとほぼ同様に構成される。以下、主に、第１の実施形態と相違する点について説明する。
【００３３】
本実施形態において、ディスクコントローラ３２′は、サーバ１からの「ライト一時禁止」の要求があると、それ以後サーバ１から出されるライト要求に対して、書き込みが要求されたデータを実際にディスクユニットに書き込まず、キャッシュメモリ３２２′に一時的に格納して処理を完了させる機能を有する。
【００３４】
キャッシュメモリ３２２′に格納されたデータは、サーバ１から「ライト禁止解除」を示す要求が出されたときに、キャッシュメモリ３２２′からディスクユニット３１に書き込まれる。ディスクコントローラ３２′は、サーバ１から「ライト禁止解除」を示す要求を受けると、それ以降受け付けたライト要求に対して、ディスクユニット３１ａへのデータの書き込みを実施する。
【００３５】
図４は、制御メモリ３２３′に保持されるキャッシュメモリ管理テーブルの論理的な構成を示すテーブル構成図である。
【００３６】
キャッシュメモリ管理テーブル４００は、キャッシュメモリ３２２′に一時的に書き込まれたデータを、後でディスクユニット３１ａに書き込むために必要な情報として、シーケンス番号４０１、先頭ＬＢＡ４０２、ブロック数４０３、先頭キャッシュアドレス４０４、及び最終キャッシュアドレス４０５を保持する。
【００３７】
シーケンス番号４０１は、サーバ１からのライト要求によるデータの書き込み順を示す通番である。シーケンス番号４０１は、必ずしも連続した番号である必要はなく、ディスクコントローラ３２′がデータの書き込み順を識別できる情報であればよい。例えば、通番に代えてライト要求のあった時刻を用いることも可能である。
【００３８】
先頭ＬＢＡ４０２は、サーバ１からのライト要求によりデータの書き込みが要求されたディスクユニット３１ａの先頭ブロックのアドレス（ＬＢＡ：Logical Block Address）、ブロック数４０３は、ライト要求により書き込まれたデータの大きさ（ディスクユニット３１ａ上でのブロックの数）を示す。
【００３９】
先頭キャッシュアドレス４０４と最終キャッシュアドレス４０５は、データが一時的に保持されているキャッシュメモリ３２２′の領域の先頭のアドレスと最終のアドレスをそれぞれ示している。
【００４０】
ディスクコントローラ３２′は、「ライト禁止解除」の指示を受け取ると、キャッシュメモリ管理テーブル４００に保持されている情報に基づいて、シーケンス番号４０１の小さい順（ライト要求を受け付けた順）にデータをディスクユニット３１ａに書き出していく。このように、シーケンス番号４０１の順に従ってデータをディスクユニット３１ａに書き込んでいくことで、ライトデータの順序性を保証することができる。
【００４１】
図５は、記憶装置サブシステム３′が「ライト一時禁止」の状態にある場合に行われるライト要求の処理の流れを示すフローチャートである。
【００４２】
ディスクコントローラ３２′は、サーバ１から「ライト一時禁止」の要求を受け付けた後に、サーバ１からのライト要求を受けると、ライト要求に伴いサーバ１から受け取ったライトデータをキャッシュメモリ３２２′に格納する。この際、ディスクコントローラ３２′は、キャッシュメモリ管理テーブル４００を参照して、キャッシュメモリ３２２′内のデータが格納されていない領域のキャッシュメモリアドレスを取得する。そして、取得したキャッシュメモリアドレスで指定される領域をライトデータの格納のために割り当てる（ステップ２００１）。
【００４３】
次に、ディスクコントローラ３２′は、キャッシュメモリ管理テーブル４００に、シーケンス番号４０１、先頭ＬＢＡ４０２、ブロック数４０３、ライトデータが格納されたキャッシュメモリ上の先頭キャッシュアドレス４０４、及び最終キャッシュアドレス４０５を記録する。シーケンス番号は、キャッシュメモリ管理テーブル４００に何もエントリが存在しないときには０が割り当てられ、以後、１ずつ増加した値が割り当てられる。例えば、図４に示すように、４つのエントリが存在しているときにライト要求を受け付けると、そのライト要求には、シーケンス番号として５が割り当てられる（ステップ２００２）。
【００４４】
以上の処理の後、ディスクコントローラ３２′は、サーバ１にライト処理の完了を通知する。先に述べたように、この時点ではディスクユニット３１ａにデータは書き込まれずに処理が終了する（ステップ２００３）。
【００４５】
図６は、記憶装置サブシステム３′がサーバ１から「ライト禁止解除」の要求を受け付けたときに実施される処理の流れを示すフローチャートである。
【００４６】
ディスクコントローラ３２′は、サーバ１から「ライト禁止解除」の要求をうけると、キャッシュメモリ管理テーブル４００内でシーケンス番号４０１の最も小さいエントリを探す（ステップ２１０１）。ディスクコントローラ３２′は、続いて、ステップ２１０１で探したエントリを参照し、先頭キャッシュアドレス４０４、最終キャッシュアドレス４０５で特定されるキャッシュメモリ３２２′の領域に格納されているデータを、先頭ＬＢＡ４０２、ブロック数４０３に従ってディスクユニット３１ａに書き出す（ステップ２１０２）。
【００４７】
ステップ２１０１で探し出されたエントリは、ディスクユニット３１ａへの書き込みが完了した時点で、キャッシュメモリ管理テーブル４００から削除される（ステップ２１０３）。次に、ディスクコントローラ３２′は、キャッシュメモリ管理テーブル４００に未処理のエントリが存在するか否か調べる。キャッシュメモリ管理テーブル４００にまだエントリが残っている場合、ディスクコントローラ３２′は、ステップ２１０１以降の処理を繰り返す。一方、すべてのエントリについて処理を終え、未処理のエントリが存在しないときは、処理が終了する（ステップ２１０４）。
【００４８】
図７は、本実施形態において、データベースのリードアクセス中に、サーバがリードアクセスの対象とされているデータ部分への更新要求を受けたときに実施されるデータベース管理システム１１の処理を示すフローチャートである。図７において、図２に示した処理と同じ処理については、図２と同じ参照番号が用いられている。
【００４９】
データベース管理システム１１は、データベースクライアント２１からデータの更新要求があると、実行中のリードアクセスの有無を調べる（ステップ１１０１）。実行中のリードアクセスが存在しなければ、データベース管理システム１１は、書き込みが要求されたデータをディスクユニット３１ａに書き込むために、記憶装置サブシステム３′にライト要求を発行する（ステップ２２０１）。
【００５０】
ステップ１１０１において、実行中のリードアクセスが存在する場合、データベース管理システム１１は、記憶装置サブシステム３′に対して、「ライト一時禁止」の要求を出す（ステップ２２０２）。続いて、データベース管理システム１１は、データベースクライアント２１からの更新要求に従ったデータのライト要求を記憶装置サブシステム３′に対して発行する。ここで、ライト要求は、場合によっては複数回発行されてもよい。このとき、ディスクサブシステム３側では、図５に示したような処理が実施される。すなわち、データベース管理システム１１からのライト要求に応じて、ライトデータがキャッシュメモリ３２２′に格納された段階で処理が完了し、ディスクユニット３１ａには、書き込まれない（ステップ１１０４）。
【００５１】
記憶装置サブシステムからライト完了の通知を受けると、データベース管理システム１１は、先に実行されていたリードアクセス処理が終了しているかチェックする（ステップ１１０５）。データベース管理システム１１は、リードアクセス処理が終了してれば、記憶装置サブシステム３′に対して「ライト禁止解除」を指示し、処理を終了する(ステップ２２０３)。
【００５２】
ステップ２２０３で発行された「ライト禁止解除」の指示に応答して、記憶装置サブシステム３′は、図６に示した処理を実施し、ステップ１１０４でキャッシュメモリ３２２′に保持された書き込みデータをディスクユニット３１ａに書き込む。キャッシュメモリ３２２′からディスクユニット３１ａへのデータの書き込みが行われている最中に同じ領域にサーバ１からデータのリード要求が発生した場合、記憶装置サブシステム３′のディスクコントローラ３２′は、図８に示す処理を実施する。
【００５３】
ディスクコントローラ３２′は、サーバ１からのリード要求に応じて、制御メモリ３２３′のキャッシュメモリ管理テーブル４００を参照し、要求されたデータがキャッシュメモリ３２２′に保持されているかチェックする(ステップ２３０１)。該当するデータがキャッシュメモリ３２２′にある場合、ディスクコントローラ３２′は、そのデータをキャッシュメモリ３２２′から取り出して、サーバ１に転送する（ステップ２３０２）。ステップ２３０１において、該当するデータがキャッシュメモリ３２２′にないと判断されたとき、ディスクコントローラ３２′は、ディスクユニット３１ａから該当するデータを読み出して、サーバ１に渡す（ステップ２３０３）。
【００５４】
本実施形態によれば、第１の実施形態と異なり、データベース管理システム１１は、データベースのデータをアクセスする際には、常にディスクユニット３１ａをアクセスすればよい。また、第１の実施形態では、データの更新処理が完了した後で行われるディスクの同期化処理（ステップ１１０６）の最中は、その領域に対するデータのリード要求を受け付けることができない。これに対して、本実施形態では、図８に示す処理を実施することで、ライト禁止解除に伴う処理を実行中にもデータベースのデータを参照することが可能となる。
【００５５】
−第３の実施形態−
図９は、本発明の第３の実施形態における計算機システムの構成を示す簡略なブロック図である。本実施形態における計算機システムも、物理的には第１及び第２の実施形態と同様に構成される。本実施形態では、以下に説明するように、データベース管理システム１１′により発行されるリード、ライトなどのＩ／Ｏコマンド、ディスクコントローラ３２″の機能が第１、第２の実施形態と異なる。
【００５６】
本実施形態のデータベース管理システム１１′は、ディスクユニット３１ａにアクセスする場合、リード／ライト要求として、通常のリード／ライトコマンドを拡張したコマンドを発行する。通常のリード／ライトコマンドでは、ディスクユニット３１ａの書き込み位置をあらわすＬＢＡと書き込みブロック数が指定されるが、本実施形態のリード／ライトコマンドでは、これらの情報に加え、トランザクションＩＤの指定が含まれる。トランザクションＩＤは、データベース管理システム１１′で取り扱われる一連のトランザクションごとに割り当てられる一意な識別番号である。同一のトランザクション中で発生したリード／ライトコマンドには同じトランザクションＩＤの指定が含まれる。
【００５７】
トランザクションＩＤは、記憶装置サブシステム３″内で、各Ｉ／Ｏがどのトランザクションに関連したものかを識別するために用いられる。したがって、トランザクションＩＤは、各々のトランザクションを識別できれば内容はどのようなものであっても良い。本実施形態では、トランザクションＩＤを非負の整数とし、初期値を０、それ以降発生するトランザクションには１、２、３、・・・のように、連続する番号を割り当てていくものとする。トランザクションＩＤの値が大きいほど、そのトランザクションは時間的に後に実施されたことになる。
【００５８】
図１０は、本実施形態においてデータベース管理システムにより実施されるデータの更新処理の流れを示すフローチャートである。
【００５９】
データベース管理システム１１′は、トランザクションＩＤを含むライト要求を記憶装置サブシステムに対して発行する。ライト要求は、トランザクションの種類によっては複数発行されることもある（ステップ３００１）。ライト処理が完了すると、データベース管理システム１１′は、完了したライト処理を実行したトランザクションよりも前のトランザクションがすべて完了しているか確認する（ステップ３００２）。以前のトランザクションで未完了のものがある場合は、そのまま待機し、以前のトランザクションがすべて完了していたら記憶装置サブシステム３″に対してコミットを指示する。通常の記憶装置サブシステムでは、コミット処理を指示するコマンドはサポートされていない。このため、本実施形態では、例えば、ＳＣＳＩ（Small Computer System Interface）におけるMODE SENSEコマンドを拡張したコマンドによりコミットの指示を行う（ステップ３００３）。
【００６０】
図１１は、本実施形態におけるキャッシュメモリ管理テーブルの論理的な構成を示すテーブル構成図である。
【００６１】
本実施形態のキャッシュメモリ管理テーブル４００′は、トランザクションＩＤ４１０ごとに作成され、管理される。各トランザクションに対応したキャッシュメモリテーブル４００′のエントリには、シーケンス番号４０１′、先頭ＬＢＡ４０２、ブロック数４０３、キャッシュメモリ上の先頭キャッシュアドレス４０４、及び最終キャッシュアドレス４０５が情報として記録される。
【００６２】
本実施形態では、シーケンス番号４０１′は、トランザクションＩＤ４１０で管理されたそれぞれのキャッシュメモリ管理テーブルの中で一意な番号を持つ。
【００６３】
図１２は、サーバ１からのライト要求に応じて記憶装置サブシステム３″により実施される処理のフローチャートである。
【００６４】
図１２に示す処理は、第２の実施形態において図５により説明した処理に対応する処理である。本実施形態では、先に述べたように、トランザクションＩＤ４１０ごとにキャッシュメモリ管理テーブル４００′が作成される。このため、図５に示す処理に対して、新たに発生したトランザクションに対応する管理テーブルの割り当てを行う処理が追加されている。
【００６５】
記憶装置サブシステム３″のディスクコントローラ３２″は、サーバ１からライト要求があると、ライト要求に含まれているトランザクションＩＤを参照し、制御メモリ３２３″にそのトランザクションＩＤに対応するキャッシュメモリ管理テーブルがあるかチェックする（ステップ３１０１）。該当するキャッシュメモリ管理テーブルが存在しなければ、ディスクコントローラ３２″は、新たにキャッシュメモリ管理テーブル作成し、指定されたトランザクションＩＤのために割り当てる（ステップ３１０２）。
【００６６】
ステップ３１０１で該当するキャッシュメモリ管理テーブルが存在する場合、及び、ステップ３１０２の後、ディスクコントローラ３２″は、第２の実施形態において図５により説明した処理と同様に、ライトデータをキャッシュメモリ３２２″に書き込み（ステップ２００１）、キャッシュメモリ管理テーブルにシーケンス番号４０１′、先頭ＬＢＡ４０２、ブロック数４０３、キャッシュメモリ上の先頭キャッシュアドレス４０４、及び最終キャッシュアドレス４０５を記録し（ステップ２００２）、サーバ１にライト完了を報告する（ステップ２００３）。
【００６７】
図１３は、サーバ１からのリード要求に応じて記憶装置サブシステム３″により実施される処理のフローチャートである。
【００６８】
本実施形態では、サーバ１により発行されるリード要求にもトランザクションＩＤが含まれる。ディスクコントローラ３２″は、サーバ１からリード要求を受け取ると、キャッシュメモリ管理テーブル４００′を参照して、リード要求で指定されたトランザクションＩＤよりも古いトランザクションＩＤに関するキャッシュメモリ管理テーブルがあるかチェックする（ステップ３２０１）。該当するキャッシュメモリ管理テーブルがない場合、ディスクコントローラ３２″は、ディスクユニット３１ａから直接該当するデータを読み出してサーバ１に渡して処理を終了する（ステップ３２０７）。
【００６９】
該当するキャッシュメモリ管理テーブルがあった場合、ディスクコントローラ３２″は、見つかったキャッシュメモリ管理テーブルの中で、最も新しいトランザクションＩＤに関するキャッシュメモリ管理テーブルのエントリをサーチし（ステップ３２０２）、リード要求で読み出しが指定されたデータを含む領域のデータがキャッシュメモリ３２２″にあるかチェックする（ステップ３２０３）。
【００７０】
該当する領域のデータがキャッシュメモリ３２２″にあれば、ディスクコントローラ３２″は、キャッシュメモリ管理テーブルに保持された情報に基づいて該当するデータを取得し、そのデータをサーバ１に渡して処理を終了する（ステップ３２０６）。
【００７１】
一方、ステップ３２０３でサーチ対象としたキャッシュメモリ管理テーブルにより管理されるキャッシュメモリ３２２″内のデータに該当するデータがなかったときは、リード要求で指定されたトランザクションＩＤよりも古いトランザクションＩＤに関するすべてのキャッシュメモリ管理テーブルについてサーチを行ったか判別する（ステップ３２０４）。サーチすべきキャッシュメモリ管理テーブルがなければ、ステップ３２０７でディスクユニット３１ａから該当するデータを読み出してサーバ１に転送する。
【００７２】
サーチを行っていないキャッシュメモリ管理テーブルがあれば、次に新しいキャッシュメモリ管理テーブルをサーチの対象として、ステップ３２０３以降の処理を繰り返す（ステップ３２０５）。
【００７３】
このように、トランザクションＩＤに基づいてリードデータの格納場所を判別し、そのデータをサーバ１に転送することで、一貫性が維持されたデータをサーバ１に渡すことができる。
【００７４】
図１４は、サーバ１からコミット処理の要求が発行されたときに記憶装置サブシステム３″により実施される処理を示すフローチャートである。
【００７５】
キャッシュメモリ３２２″に書き込まれたデータは、サーバ１からコミットの指示があるとディスクユニット３１ａに書き出される。コミット指示の要求には、リード／ライト要求と同様に、トランザクションＩＤが含まれる。ディスクコントローラ３２″は、コミット処理の指示を受けると、キャッシュメモリ管理テーブル４００を検索し、指定されたトランザクションＩＤに関連するキャッシュメモリ管理テーブルを取得する（ステップ３３０１）。
【００７６】
次に、ディスクコントローラ３２″は、取得したキャッシュメモリ管理テーブルの中で、シーケンス番号４０１′の最も小さいエントリを探す（ステップ３３０２）。ディスクコントローラ３２″は、ステップ３３０２で探したエントリを参照して、先頭キャッシュアドレス４０４、最終キャッシュアドレス４０５で特定されるキャッシュメモリ３２２″の領域に保持されているデータを、先頭ＬＢＡ４０２、ブロック数４０３に従ってディスクユニット３１ａに書き出す（ステップ３３０３）。
【００７７】
ディスクユニット３１ａへの書き込みが完了した時点で、ディスクコントローラ３２″は、当該エントリをキャッシュメモリ管理テーブルから削除する（ステップ３３０４）。続いて、ディスクコントローラ３２″は、当該テーブルにまだエントリが残っているかどうかチェックし（ステップ３３０５）、エントリが残っている場合にはステップ３２０２以降の処理を繰り返し、すべてのエントリについて処理を終了した後、当該キャッシュメモリ管理テーブルを制御メモリ３２３″から削除し、処理を終了する（ステップ３３０６）。
【００７８】
先に説明した第１、及び第２の実施形態では、同時に実行されるトランザクションが増えると、対応が難しくなる。例えば、第２の実施形態において、リードＡ、ライトＡ、リードＢ、ライトＢの順でトランザクションが発生した場合、ライトＡによるライトデータは一旦キャッシュメモリ上に退避され、リードＡが完了した時点でディスクユニットに書き出される。ライトＡによるライトデータをキャッシュメモリからディスクに書き込んでいる最中にリードＢ、ライトＢのトランザクションが発行されると、ライトＢによって書き込みが指示されたデータも一緒にディスクユニットに書き込まれてしまう。このためリードＢによって読み出されたデータの一貫性が維持されなくなってしまう可能性がある。このような問題は、記憶装置サブシステムが、サーバから要求されたコマンドがどのトランザクションに対応しているかを識別することができないために発生する。本実施形態では、サーバからの要求がどのトランザクションに関連するものかを記憶装置サブシステム側で認識することができ、このような問題を回避することが可能となる。
【００７９】
【発明の効果】
本発明によれば、同時に複数のトランザクションを処理する際のホストコンピュータの負荷を低減することができる。
【図面の簡単な説明】
【図１】本発明が適用された計算機システムの一実施形態における構成例を示すブロック図である。
【図２】データベースのリードアクセス中に、サーバがリードアクセスの対象とされているデータ部分への更新要求を受けたときに実施されるデータベース管理システムの処理を示すフローチャートである。
【図３】本発明の第２の実施形態における計算機システムの構成を示す簡略なブロック図である。
【図４】キャッシュメモリ管理テーブルの論理的な構成の一例を示すテーブル構成図である。
【図５】記憶装置サブシステムが「ライト一時禁止」の状態にある場合に行われるライト要求の処理の流れを示すフローチャートである。
【図６】記憶装置サブシステムがサーバから「ライト禁止解除」の要求を受け付けたときに実施される処理の流れを示すフローチャートである。
【図７】データベースのリードアクセス中に、サーバがリードアクセスの対象とされているデータ部分への更新要求を受けたときに実施されるデータベース管理システムの処理を示すフローチャートである。
【図８】記憶装置サブシステムがキャッシュメモリからディスクユニットにデータを転送中にサーバからのリード要求を受け付けたときに実施される処理の流れを示すフローチャートである。
【図９】本発明の第３の実施形態における計算機システムの構成を示す簡略なブロック図である。
【図１０】第３の実施形態において、データベース管理システムにより実施されるデータの更新処理の流れを示すフローチャートである。
【図１１】キャッシュメモリ管理テーブルの論理的な構成の一例を示すテーブル構成図である。
【図１２】サーバからのライト要求に応じて記憶装置サブシステムにより実施される処理の流れを示すフローチャートである。
【図１３】サーバからのリード要求に応じて記憶装置サブシステムにより実施される処理の流れを示すフローチャートである。
【図１４】サーバからコミット処理の要求が発行されたときに記憶装置サブシステムにより実施される処理の流れを示すフローチャートである。
【符号の説明】
１…サーバ
２…クライアント
３…記憶装置サブシステム
１１…データベース管理システム
１２…ボリュームマネージャ
１３、３３…ＳＣＳＩインタフェース
１４、２２…ネットワークインタフェース
２１…データベースクライアント
３１…ディスクユニット
３２…ディスクコントローラ
３２１…プロセッサ
３２２…キャッシュメモリ
３２３…制御メモリ
【図１】
0004104281.tif 000002
【図２】
0004104281.tif 000003
【図３】
0004104281.tif 000004
【図４】
0004104281.tif 000005
【図５】
0004104281.tif 000006
【図６】
0004104281.tif 000007
【図７】
0004104281.tif 000008
【図８】
0004104281.tif 000009
【図９】
0004104281.tif 000010
【図１０】
0004104281.tif 000011
【図１１】
0004104281.tif 000012
【図１２】
0004104281.tif 000013
【図１３】
0004104281.tif 000014
【図１４】
0004104281.tif 000015