トップ :: G 物理学 :: G06 計算;計数




【発明の名称】 データベースアクセス方法
【発明者】 【氏名】北村 学

【氏名】荒井 弘治

【要約】 【課題】トランザクション処理システムにおいて、同時に複数のトランザクションを処理する際のホスト計算機の負荷を低減する。

【解決手段】記憶装置サブシステム3は、データが二重化して格納されるディスクユニット31a、31bを有する。サーバ1は、リードアクセス時はディスクユニット31b、ライトアクセス時はディスクユニット31aにアクセスする。ライトアクセス時に未完了のリード処理が存在するとき、サーバ1は、ディスクユニット31a、31bの二重化の中止を指示してライト要求を発行し、ライトデータをディスクユニット31aにのみ格納する。サーバ1は、リード、ライト処理がそれぞれ完了した時点で、記憶装置サブシステム3に対してディスクユニット31a、31bの二重化を再開させ、ディスクユニット31aに書き込まれたデータをディスクユニット31bに反映させる。
【特許請求の範囲】
【請求項1】トランザクション処理が実行されるホスト計算機と、前記トランザクション処理により前記ホスト計算機からアクセスされるデータベースを格納した第1の記憶装置及び前記ホスト計算機からの要求に基づいて前記第1の記憶装置のアクセスを行う記憶制御装置とを備える記憶装置サブシステムとを有する計算機システムにおけるデータベースアクセス方法において、前記トランザクション処理によりデータの更新要求が発生したときに、前記第1の記憶装置からの未完了のデータのリード処理が存在するか判別し、未完了のデータの読み出し処理が存在する場合に、前記更新要求に伴うライトデータを前記記憶装置サブシステムが有する第2の記憶装置に格納して前記更新要求に伴う前記記憶装置サブシステムへのライト処理を完了させ、前記ライト処理、及び前記未完了のリード処理が終了した後、前記第2の記憶装置に格納された前記ライトデータを前記第1の記憶装置に転送することを特徴とするデータベースアクセス方法。
【請求項2】前記第1の記憶装置と前記第2の記憶装置とは、前記第2の記憶装置に対する書き込みが前記第1の記憶装置に反映される二重化された記憶装置であって、前記完了させるステップは、前記ホスト計算機から前記記憶装置サブシステムに前記第1の記憶装置と前記第2の記憶装置との間のデータの反映の中断を指示するステップと、前記更新要求に関連するデータのライト要求を第2の記憶装置を対象として発行するステップとを含むことを特徴とする請求項1記載のデータベースアクセス方法。
【請求項3】前記転送するステップは、前記第1の記憶装置と前記第2の記憶装置との間のデータの反映を再開させるステップを含むことを特徴とする請求項2記載のデータベースアクセス方法。
【請求項4】前記第2の記憶装置は、前記記憶装置サブシステムが有するキャッシュメモリであって、前記完了させるステップは、前記ホスト計算機から前記記憶装置サブシステムに、前記第1の記憶装置へのデータの書き込みの禁止を指示するステップと、前記ホスト計算機から前記記憶装置サブシステムに前記更新要求に関連するデータのライト要求を発行するステップと、前記ライト要求に応じて前記データを前記第2の記憶装置に格納するステップとを含むことを特徴とする請求項1記載のデータベースアクセス方法。
【請求項5】前記転送するステップは、前記ホスト計算機から前記記憶装置サブシステムに前記書き込みの禁止の解除を指示するステップと、前記第2の記憶装置に格納された前記データを前記第1の記憶装置に転送するステップとを含むことを特徴とする請求項4記載のデータベースアクセス方法。
【請求項6】前記格納するステップは、前記データを格納した前記第2の記憶装置の記憶領域を特定するための情報と、前記データを書き込むべき前記第1の記憶装置の記憶領域を特定するための管理情報を記録するステップを含み、前記転送するステップは、前記管理情報を参照して行われることを特徴とする請求項5記載のデータベースアクセス方法。
【請求項7】前記管理情報は、前記ホスト計算機上で実行される前記トランザクションの単位ごとに記録され、前記転送するステップは、前記トランザクションの完了ごとに、そのトランザクション内で書き込まれたデータを対象として行われることを特徴とする請求項6記載のデータベースアクセス方法。
【請求項8】前記転送するステップは、前記記憶装置サブシステムにおいて前記ホスト計算機からのリード要求を受け付けるステップと、前記管理情報に基づいて、前記ホスト計算機に転送すべきデータが前記第1の記憶装置及び前記第2の記憶装置のいずれに保持されているかを判別するステップと、前記判別の結果に基づいて要求されたデータを前記ホスト計算機に転送するステップとを含むことを特徴とする請求項7記載のデータベースアクセス方法。
【請求項9】トランザクション処理が実行されるホスト計算機と、該ホスト計算機に接続され、トランザクション処理でアクセスされるデータベースを格納した記憶装置サブシステムとを有する計算機システムにおいて、前記記憶装置サブシステムは、前記データベースを二重化して格納する第1の記憶装置及び第2の記憶装置と、前記第1及び第2の記憶装置を制御し、前記第2の記憶装置に対するデータの書き込みを前記第1の記憶装置に反映し、前記第1の記憶装置と前記第2の記憶装置とを二重化する記憶制御装置とを備え、前記ホスト計算機は、前記データベースからのデータの読み出しを前記第1の記憶装置を指定して行い、前記データベースへのデータの書き込みを前記第2の記憶装置を指定して行う手段と、前記データベースへのデータの書き込み時に、未完了の前記データベースからの読み出し処理が存在するか判別し、未完了の読み出し処理が存在するときに前記記憶装置サブシステムへのライト要求に先立って前記第1の記憶装置へのデータの反映の中断を指示してライト要求を発行し、前記未完了の読み出し処理及び当該データの書き込み処理が終了した後に、中断したデータの反映の再開を指示する手段とを備えることを特徴とする計算機システム。
【請求項10】トランザクション処理が実行されるホスト計算機と、該ホスト計算機に接続され、トランザクション処理でアクセスされるデータベースを格納した記憶装置サブシステムとを有する計算機システムにおいて、前記記憶装置サブシステムは、前記データベースを格納した記憶装置と、前記記憶装置を制御し、キャッシュメモリを有する記憶制御装置とを備え、前記ホスト計算機は、前記データベースへのデータの書き込み時に、未完了の前記データベースからの読み出し処理が存在するか判別し、未完了の読み出し処理が存在するときに前記記憶装置サブシステムへのライト要求に先立って前記第1の記憶装置へのデータの書き込み禁止を指示してライト要求を発行し、前記未完了の読み出し処理及び当該データの書き込み処理が終了した後に、前記第1の記憶装置への書き込みの再開を指示する手段とを備え、前記記憶制御装置は、前記禁止の指示に応答して、前記禁止の指示を受け付けた以降に受け付けたライト要求に伴うデータを前記キャッシュメモリに書き込んで前記ホスト計算機に処理の完了を報告し、前記再開の指示に応答して、前記キャッシュメモリに書き込んだデータを前記記憶装置に転送することを特徴とする計算機システム。
【請求項11】トランザクション処理が実行されるホスト計算機と、該ホスト計算機に接続され、トランザクション処理でアクセスされるデータベースを格納した記憶装置サブシステムとを有する計算機システムにおいて、前記記憶装置サブシステムは、前記データベースを格納した記憶装置と、前記記憶装置を制御し、キャッシュメモリを有する記憶制御装置とを備え、前記ホスト計算機は、前記データベースのアクセスに際して、アクセスが発生したトランザクションを識別する識別子を含むリード/ライト要求を発行する手段と、トランザクションの完了時に前記記憶装置サブシステムにコミットを指示する手段とを備え、前記記憶制御装置は、前記ホスト計算機が発行したライト要求に応答して、該ライト要求に伴うデータを前記キャッシュメモリに書き込んで前記ホスト計算機に処理の完了を報告する手段と、前記コミットの指示に応答して、完了したトランザクションにより発生したライト要求により前記キャッシュに書き込んだデータを前記記憶装置に転送する手段と、前記ホスト計算機が発行したリード要求に応答して、当該リード要求に含まれる前記識別子に基づき転送すべきデータが前記記憶装置及び前記キャッシュメモリのいずれに保持されているかを判別し、該判別の結果に従ってデータを前記ホスト計算機に転送する手段とを備えることを特徴とする計算機システム。
【発明の詳細な説明】【0001】
【発明の属する技術分野】本発明は、情報処理システムなどにおけるデータベースシステムの問い合わせ方法に係り、特に、複数のトランザクション処理を高速化する方法に関する。
【0002】
【従来の技術】銀行の勘定系処理、航空会社における航空券予約処理など、同時に複数の処理要求を受け付ける必要のある処理では、オンライントランザクションシステムが広く使われている。
【0003】オンライントランザクションシステムでは、ほぼ同時に複数の要求が発生したときでも、矛盾のないデータを返却することが要求される。例えば、あるユーザ(第1のユーザ)の要求により、データベースのある部分の読み出しが行われている途中で、別のユーザ(第2のユーザ)が同じデータ部分への更新要求を行うことを考える。この場合、第1のユーザからの要求により読み出すべきデータは、第2のユーザからの要求により更新される以前のデータである。第2のユーザからの要求によるデータ更新をそのまま実行させると、第1のユーザからの要求によりデータが読み出されるよりも前にデータが書き換えられてしまう可能性がある。このため、システムは、第1のユーザの要求に応じてその要求により読み出すべきデータをロックし、他のユーザによるデータ更新を第1のユーザからの要求によるデータの読み出しが完了するまでは待たせる。
【0004】各ユーザからの要求により実行されるそれぞれの処理のことをトランザクションと呼ぶ。オンライントランザクションシステムは、各トランザクションが競合して矛盾したデータを読み出す、あるいは書き込むことが無いように制御する。上述した技術では、第1のユーザからの要求によるデータ読み出しが非常に時間のかかる処理である場合、例えば、読み出すべきデータ量が非常に大きい場合、第2のユーザからの要求によるデータ書き込みは、第1のユーザからの要求によるデータ読み出しが完了するまで待たされる。このため、第2のユーザからの要求は、その処理に非常に時間がかかってしまう。
【0005】このような問題を解決するために、一部のデータベース管理システム(以下、DBMSと略す)では、マルチバージョニングと呼ばれる技術が用いられる。マルチバージョニングに関しては、例えばORACLE8アーキテクチャ(翔泳社)P.206-に解説されている。この技術では、第1のユーザからの要求によるデータの読み出しが完了していなくても、第2のユーザからの要求によるデータの書き込みが許可される。第2のユーザからの要求によりデータが書き込まれた領域第1のユーザからの要求によるデータの読み出しが必要になったときは、データベースのロールバックセグメントを用いて第2のユーザからの要求によるデータの書き込みが行われる前の時点のデータが復元され、第1のユーザに渡される。このような処理により、お互いの処理が阻害されることはなくなる。
【0006】
【発明が解決しようとする課題】上記従来技術によれば、マルチバージョニングによって、複数のトランザクションを同時に実行できるようになる。しかし、データの復元などは、すべてDBMSによって実施されるため、ホストコンピュータの負荷が大きく、結果として各処理時間が長くなってしまう。ロールバックセグメントは、それほど大きくとることはできず、大規模な更新処理などには向かないといった問題がある。
【0007】本発明の目的は、同一データ領域に対して同時に複数の要求があった場合に、システムの負荷を増大させずに効率的な処理を行うことのできる方法を提供することにある。
【0008】
【課題を解決するための手段】本発明における計算機システムは、その好ましい態様において、トランザクション処理が実行されるホスト計算機と、このホスト計算機に接続され、トランザクション処理でアクセスされるデータベースを格納した第1の記憶装置及びホスト計算機からの要求に基づいて第1の記憶装置のアクセスを行う記憶制御装置とを備える記憶装置サブシステムとを有して構成される。
【0009】ホスト計算機は、データベースの更新ためにディスクサブシステムへのライト要求を発行するに際して、データベースからの未完了のリード処理が存在するか確認する。未完了の読み出し処理が存在する場合、ホスト計算機は、発行したライト要求に応じて第1の記憶装置にデータが書き込まれないようディスクサブシステムに指示し、ライト要求をディスクサブシステムに発行する。
【0010】ディスクサブシステムは、ライト要求に応じてデータベースに書き込むべきデータを第1の記憶装置とは異なる第2の記憶装置に格納して処理の完了をホスト計算機に報告する。
【0011】ホスト計算機は、未完了のリード処理及びライト処理の完了後、第1の記憶装置へのデータの書き込みが行われるように指示する。ディスクサブシステムは、この指示に応じて、第2の記憶装置に書き込まれ、第1の記憶装置に書き込まれていないデータを第2の記憶装置から第1の記憶装置に書き込む。
【0012】本発明の一つの態様において、第1の記憶装置と第2の記憶装置とは、期多く制御装置により同じデータが二重化して格納されるように制御されたディスク装置により構成される。ホスト計算機は、通常の状態において、データベースからのデータの読み出しは第1の記憶装置を指定して実施し、データベースへのデータの書き込みは、第2の記憶装置を指定して行う。第2の記憶装置を指定して行われたデータの書き込みの結果は、記憶制御装置により、第1の記憶装置にも反映される。
【0013】ホスト計算機から第1の記憶装置にデータが書き込まれないよう指示された場合、記憶制御装置は、第2の記憶装置を指定して行われたデータの書き込みを第1の記憶装置に反映させることを一時的に中断する。第1の記憶装置へのデータの書き込みが行われるよう指示された場合、記憶制御装置は、第2の記憶装置から差分のデータを第1の記憶装置に転送し、両者の内容を一致させ、第2の記憶装置に対するデータの書き込みを第1の記憶装置に反映させるよう制御する。
【0014】本発明の他の態様において、第2の記憶装置は、記憶制御装置が有するキャッシュメモリにより構成される。ホスト計算機から第1の記憶装置にデータが書き込まれないよう指示された場合、記憶制御装置は、第1の記憶装置を指定したデータの書き込み要求に対して、データを第2の記憶装置に書き込んだ段階で処理の完了を報告する。第1の記憶装置へのデータの書き込みが行われるよう指示された場合、記憶制御装置は、第2の記憶装置に保持され、第1の記憶装置に書き込まれていないデータを第1の記憶装置に書き込む。
【0015】
【発明の実施の形態】−第1の実施形態−図1は、本発明が適用された計算機システムの一実施形態における構成例を示すブロック図である。
【0016】本実施形態における計算機システムは、サーバ1、複数のクライアント計算機2a、2b、…2n(総称してクライアント2と呼ぶ)、及びサーバ1に接続される記憶装置サブシステム3を含んで構成される。
【0017】サーバ1は、記憶装置サブシステム3と接続するためのSCSIインタフェース13、クライアント2と接続するためのネットワークインタフェース14、データベース管理システム11、ボリュームマネージャ12を有する。サーバ1は、いわゆるパーソナルコンピュータや、ワークステーションなどの計算機により実現され、図示しないCPUやメモリ、その他の周辺装置を有する。データベース管理システム11,及びボリュームマネージャ12は、メモリに格納され、CPUによって実行されることでその機能が実現されるプログラムとして実装される。ボリュームマネージャ12は、データベース管理システム11の中に組み込まれたソフトウェアとして実現されても良い。
【0018】クライアント2は、それぞれ、サーバ1と接続するためのネットワークインタフェース22a、22b、22c、…22n(以後、総称してネットワークインタフェース22と呼ぶ)、データベースクライアント21a、21b、…21n(以後、総称してデータベースクライアント2と呼ぶ)を有する。クライアント2は、サーバ同様パーソナルコンピュータなどの計算機により実現され、図示しないCPUメモリなどを有する。データベースクライアント2は、メモリに格納され、CPUによって実行されることでその機能が実現されるプログラムとして実装される。
【0019】データベース管理システム11は、記憶装置サブシステム3に格納されたデータのアクセスを実施し、データベースクライアント21は、データベース管理システム11に処理要求を出して必要なデータにアクセスする。
【0020】記憶装置サブシステム3は、ディスクユニット31a,31b、ディスクコントローラ32、サーバ1と接続するインタフェース33を有している。一般に、データベースでは、多数のディスクにデータが格納されるが、本実施形態では、説明を簡単化するためにデータベースのデータは、ディスクユニット31a、31bの2つのディスクユニットに格納されているものとする。また、ディスクユニット31a、31bの容量は同一であるとする。
【0021】ディスクコントローラ32は、プロセッサ321、キャッシュメモリ322、制御メモリ323を有して構成される。
【0022】キャッシュメモリ322は、ホストとなる計算機(ここではサーバ1)からのアクセス処理速度を高めるため、頻繁に読み出されるデータを格納し、あるいはホスト計算機からのライトデータを一時的に格納する。キャッシュメモリ322は、格納されたデータが停電などの障害時に喪失されることを防ぐため、バッテリバックアップされるか、あるいはフラッシュメモリなどの不揮発メモリにより構成されることが望ましい。
【0023】プロセッサ321は、ホスト計算機からのアクセス要求の処理と、キャッシュメモリ322の制御を行う。これらの制御を行うプログラムは、制御メモリ323に格納される。ディスクユニット31a、31bは、それぞれ、必ずしも1つの磁気ディスクドライブである必要はなく、ディスクアレイのような、物理的に複数のディスクドライブをまとめて1または複数のディスクドライブに見せかけた論理ディスク装置であっても良い。
【0024】ディスクコントローラ32は、ディスクユニット31a、31bをサーバ1からそれぞれ独立した1つのディスクユニットとしてアクセスできるよう制御する。ただし、ディスクユニット31bに対するサーバ1からのアクセスは、リードのみが許可される。
【0025】ディスクコントローラ32は、2以上のディスクユニットの内容を同一の状態に維持するボリューム二重化機能を有する。例えば、ディスクユニット31aと31bが二重化状態とされているときに、サーバ1からディスクユニット31aへのデータのライト要求があると、ディスクコントローラ32は、ディスクユニット31aにデータを書き込むとともに、同じデータをディスクユニット31bにも書き込む。ボリューム二重化機能の設定と解除は、サーバ1のボリュームマネージャ12が、SCSIインタフェース13を介して発行するコマンドによって操作される。ディスクコントローラ32は、ボリュームマネージャ12により二重化機能の解除が指示されると、ディスクユニット31bへのデータ反映を中止する。これにより、ディスクユニット31bには、二重化機能の解除が指示された時点のデータが保持される。ディスクコントローラ32は、二重化機能の設定が指示されると、二重化機能が解除された後にディスクユニット31aに書き込まれた差分のデータをディスクユニット31bにコピーし、ディスクユニット31aとディスクユニット32bの内容を同一にする。
【0026】図2は、データベースのリードアクセス中に、サーバがリードアクセスの対象とされているデータ部分への更新要求を受けたときに実施されるデータベース管理システム11の処理を示すフローチャートである。
【0027】本実施形態において、データベース管理システム11は、データベースクライアント21からデータの検索などのためにリード要求を受けると、ディスクユニット31bをアクセスして要求されたデータを取り出す。
【0028】データベースクライアント21からデータの更新要求があった場合、データベース管理システム11は、ディスクユニット31bへの実行中のリードアクセスの有無を調べる(ステップ1101)。実行中のリードアクセスが存在しない場合、データベース管理システム11は、二重化機能を利用してディスクユニット31a、32bの双方に更新要求で指定されたデータを書き込み、データの更新を実施する(ステップ1102)。
【0029】ステップ1101において、実行中のリードアクセスが存在する場合、データベース管理システム11は、ボリュームマネージャ12を用いて、ディスクユニット31aとディスクユニット31bの二重化処理を中断する(ステップ1103)。引き続きデータベース管理システム11は、更新要求の内容に従って、ディスクユニット31aのデータを更新する(ステップ1104)。
【0030】データを更新した後、データベース管理システム11は、先に実行が開始されているリードアクセス処理が終了しているかチェックし、リードアクセス処理が終了していない場合、それが完了するまで待ちつづける(ステップ1105)。リードアクセスが終了している場合、データベース管理システム11は、ボリュームマネージャ12により、ディスクユニット31aとディスクユニット31bの二重化処理を再開させ、ディスクユニット31aからディスクユニット31bに差分データをコピーする(ステップ1106)。
【0031】本実施形態によれば、データベース管理システム側の負荷が大きく増えることなくデータベースに対する複数のアクセス要求を処理することが可能となる。
【0032】−第2の実施形態−図3は、本発明の第2の実施形態における計算機システムの構成を示す簡略なブロック図である。本実施形態における計算機システムは、ディスクコントローラ32′の機能が、第1の実施形態のディスクコントローラ32とは若干異なっている点を除くと、第1の実施形態の計算機システムとほぼ同様に構成される。以下、主に、第1の実施形態と相違する点について説明する。
【0033】本実施形態において、ディスクコントローラ32′は、サーバ1からの「ライト一時禁止」の要求があると、それ以後サーバ1から出されるライト要求に対して、書き込みが要求されたデータを実際にディスクユニットに書き込まず、キャッシュメモリ322′に一時的に格納して処理を完了させる機能を有する。
【0034】キャッシュメモリ322′に格納されたデータは、サーバ1から「ライト禁止解除」を示す要求が出されたときに、キャッシュメモリ322′からディスクユニット31に書き込まれる。ディスクコントローラ32′は、サーバ1から「ライト禁止解除」を示す要求を受けると、それ以降受け付けたライト要求に対して、ディスクユニット31aへのデータの書き込みを実施する。
【0035】図4は、制御メモリ323′に保持されるキャッシュメモリ管理テーブルの論理的な構成を示すテーブル構成図である。
【0036】キャッシュメモリ管理テーブル400は、キャッシュメモリ322′に一時的に書き込まれたデータを、後でディスクユニット31aに書き込むために必要な情報として、シーケンス番号401、先頭LBA402、ブロック数403、先頭キャッシュアドレス404、及び最終キャッシュアドレス405を保持する。
【0037】シーケンス番号401は、サーバ1からのライト要求によるデータの書き込み順を示す通番である。シーケンス番号401は、必ずしも連続した番号である必要はなく、ディスクコントローラ32′がデータの書き込み順を識別できる情報であればよい。例えば、通番に代えてライト要求のあった時刻を用いることも可能である。
【0038】先頭LBA402は、サーバ1からのライト要求によりデータの書き込みが要求されたディスクユニット31aの先頭ブロックのアドレス(LBA:LogicalBlock Address)、ブロック数403は、ライト要求により書き込まれたデータの大きさ(ディスクユニット31a上でのブロックの数)を示す。
【0039】先頭キャッシュアドレス404と最終キャッシュアドレス405は、データが一時的に保持されているキャッシュメモリ322′の領域の先頭のアドレスと最終のアドレスをそれぞれ示している。
【0040】ディスクコントローラ32′は、「ライト禁止解除」の指示を受け取ると、キャッシュメモリ管理テーブル400に保持されている情報に基づいて、シーケンス番号401の小さい順(ライト要求を受け付けた順)にデータをディスクユニット31aに書き出していく。このように、シーケンス番号401の順に従ってデータをディスクユニット31aに書き込んでいくことで、ライトデータの順序性を保証することができる。
【0041】図5は、記憶装置サブシステム3′が「ライト一時禁止」の状態にある場合に行われるライト要求の処理の流れを示すフローチャートである。
【0042】ディスクコントローラ32′は、サーバ1から「ライト一時禁止」の要求を受け付けた後に、サーバ1からのライト要求を受けると、ライト要求に伴いサーバ1から受け取ったライトデータをキャッシュメモリ322′に格納する。この際、ディスクコントローラ32′は、キャッシュメモリ管理テーブル400を参照して、キャッシュメモリ322′内のデータが格納されていない領域のキャッシュメモリアドレスを取得する。そして、取得したキャッシュメモリアドレスで指定される領域をライトデータの格納のために割り当てる(ステップ2001)。
【0043】次に、ディスクコントローラ32′は、キャッシュメモリ管理テーブル400に、シーケンス番号401、先頭LBA402、ブロック数403、ライトデータが格納されたキャッシュメモリ上の先頭キャッシュアドレス404、及び最終キャッシュアドレス405を記録する。シーケンス番号は、キャッシュメモリ管理テーブル400に何もエントリが存在しないときには0が割り当てられ、以後、1ずつ増加した値が割り当てられる。例えば、図4に示すように、4つのエントリが存在しているときにライト要求を受け付けると、そのライト要求には、シーケンス番号として5が割り当てられる(ステップ2002)。
【0044】以上の処理の後、ディスクコントローラ32′は、サーバ1にライト処理の完了を通知する。先に述べたように、この時点ではディスクユニット31aにデータは書き込まれずに処理が終了する(ステップ2003)。
【0045】図6は、記憶装置サブシステム3′がサーバ1から「ライト禁止解除」の要求を受け付けたときに実施される処理の流れを示すフローチャートである。
【0046】ディスクコントローラ32′は、サーバ1から「ライト禁止解除」の要求をうけると、キャッシュメモリ管理テーブル400内でシーケンス番号401の最も小さいエントリを探す(ステップ2101)。ディスクコントローラ32′は、続いて、ステップ2101で探したエントリを参照し、先頭キャッシュアドレス404、最終キャッシュアドレス405で特定されるキャッシュメモリ322′の領域に格納されているデータを、先頭LBA402、ブロック数403に従ってディスクユニット31aに書き出す(ステップ2102)。
【0047】ステップ2101で探し出されたエントリは、ディスクユニット31aへの書き込みが完了した時点で、キャッシュメモリ管理テーブル400から削除される(ステップ2103)。次に、ディスクコントローラ32′は、キャッシュメモリ管理テーブル400に未処理のエントリが存在するか否か調べる。キャッシュメモリ管理テーブル400にまだエントリが残っている場合、ディスクコントローラ32′は、ステップ2101以降の処理を繰り返す。一方、すべてのエントリについて処理を終え、未処理のエントリが存在しないときは、処理が終了する(ステップ2104)。
【0048】図7は、本実施形態において、データベースのリードアクセス中に、サーバがリードアクセスの対象とされているデータ部分への更新要求を受けたときに実施されるデータベース管理システム11の処理を示すフローチャートである。図7において、図2に示した処理と同じ処理については、図2と同じ参照番号が用いられている。
【0049】データベース管理システム11は、データベースクライアント21からデータの更新要求があると、実行中のリードアクセスの有無を調べる(ステップ1101)。実行中のリードアクセスが存在しなければ、データベース管理システム11は、書き込みが要求されたデータをディスクユニット31aに書き込むために、記憶装置サブシステム3′にライト要求を発行する(ステップ2201)。
【0050】ステップ1101において、実行中のリードアクセスが存在する場合、データベース管理システム11は、記憶装置サブシステム3′に対して、「ライト一時禁止」の要求を出す(ステップ2202)。続いて、データベース管理システム11は、データベースクライアント21からの更新要求に従ったデータのライト要求を記憶装置サブシステム3′に対して発行する。ここで、ライト要求は、場合によっては複数回発行されてもよい。このとき、ディスクサブシステム3側では、図5に示したような処理が実施される。すなわち、データベース管理システム11からのライト要求に応じて、ライトデータがキャッシュメモリ322′に格納された段階で処理が完了し、ディスクユニット31aには、書き込まれない(ステップ1104)。
【0051】記憶装置サブシステムからライト完了の通知を受けると、データベース管理システム11は、先に実行されていたリードアクセス処理が終了しているかチェックする(ステップ1105)。データベース管理システム11は、リードアクセス処理が終了してれば、記憶装置サブシステム3′に対して「ライト禁止解除」を指示し、処理を終了する(ステップ2203)。
【0052】ステップ2203で発行された「ライト禁止解除」の指示に応答して、記憶装置サブシステム3′は、図6に示した処理を実施し、ステップ1104でキャッシュメモリ322′に保持された書き込みデータをディスクユニット31aに書き込む。キャッシュメモリ322′からディスクユニット31aへのデータの書き込みが行われている最中に同じ領域にサーバ1からデータのリード要求が発生した場合、記憶装置サブシステム3′のディスクコントローラ32′は、図8に示す処理を実施する。
【0053】ディスクコントローラ32′は、サーバ1からのリード要求に応じて、制御メモリ323′のキャッシュメモリ管理テーブル400を参照し、要求されたデータがキャッシュメモリ322′に保持されているかチェックする(ステップ2301)。該当するデータがキャッシュメモリ322′にある場合、ディスクコントローラ32′は、そのデータをキャッシュメモリ322′から取り出して、サーバ1に転送する(ステップ2302)。ステップ2301において、該当するデータがキャッシュメモリ322′にないと判断されたとき、ディスクコントローラ32′は、ディスクユニット31aから該当するデータを読み出して、サーバ1に渡す(ステップ2303)。
【0054】本実施形態によれば、第1の実施形態と異なり、データベース管理システム11は、データベースのデータをアクセスする際には、常にディスクユニット31aをアクセスすればよい。また、第1の実施形態では、データの更新処理が完了した後で行われるディスクの同期化処理(ステップ1106)の最中は、その領域に対するデータのリード要求を受け付けることができない。これに対して、本実施形態では、図8に示す処理を実施することで、ライト禁止解除に伴う処理を実行中にもデータベースのデータを参照することが可能となる。
【0055】−第3の実施形態−図9は、本発明の第3の実施形態における計算機システムの構成を示す簡略なブロック図である。本実施形態における計算機システムも、物理的には第1及び第2の実施形態と同様に構成される。本実施形態では、以下に説明するように、データベース管理システム11′により発行されるリード、ライトなどのI/Oコマンド、ディスクコントローラ32″の機能が第1、第2の実施形態と異なる。
【0056】本実施形態のデータベース管理システム11′は、ディスクユニット31aにアクセスする場合、リード/ライト要求として、通常のリード/ライトコマンドを拡張したコマンドを発行する。通常のリード/ライトコマンドでは、ディスクユニット31aの書き込み位置をあらわすLBAと書き込みブロック数が指定されるが、本実施形態のリード/ライトコマンドでは、これらの情報に加え、トランザクションIDの指定が含まれる。トランザクションIDは、データベース管理システム11′で取り扱われる一連のトランザクションごとに割り当てられる一意な識別番号である。同一のトランザクション中で発生したリード/ライトコマンドには同じトランザクションIDの指定が含まれる。
【0057】トランザクションIDは、記憶装置サブシステム3″内で、各I/Oがどのトランザクションに関連したものかを識別するために用いられる。したがって、トランザクションIDは、各々のトランザクションを識別できれば内容はどのようなものであっても良い。本実施形態では、トランザクションIDを非負の整数とし、初期値を0、それ以降発生するトランザクションには1、2、3、・・・のように、連続する番号を割り当てていくものとする。トランザクションIDの値が大きいほど、そのトランザクションは時間的に後に実施されたことになる。
【0058】図10は、本実施形態においてデータベース管理システムにより実施されるデータの更新処理の流れを示すフローチャートである。
【0059】データベース管理システム11′は、トランザクションIDを含むライト要求を記憶装置サブシステムに対して発行する。ライト要求は、トランザクションの種類によっては複数発行されることもある(ステップ3001)。ライト処理が完了すると、データベース管理システム11′は、完了したライト処理を実行したトランザクションよりも前のトランザクションがすべて完了しているか確認する(ステップ3002)。以前のトランザクションで未完了のものがある場合は、そのまま待機し、以前のトランザクションがすべて完了していたら記憶装置サブシステム3″に対してコミットを指示する。通常の記憶装置サブシステムでは、コミット処理を指示するコマンドはサポートされていない。このため、本実施形態では、例えば、SCSI(Small Computer System Interface)におけるMODE SENSEコマンドを拡張したコマンドによりコミットの指示を行う(ステップ3003)。
【0060】図11は、本実施形態におけるキャッシュメモリ管理テーブルの論理的な構成を示すテーブル構成図である。
【0061】本実施形態のキャッシュメモリ管理テーブル400′は、トランザクションID410ごとに作成され、管理される。各トランザクションに対応したキャッシュメモリテーブル400′のエントリには、シーケンス番号401′、先頭LBA402、ブロック数403、キャッシュメモリ上の先頭キャッシュアドレス404、及び最終キャッシュアドレス405が情報として記録される。
【0062】本実施形態では、シーケンス番号401′は、トランザクションID410で管理されたそれぞれのキャッシュメモリ管理テーブルの中で一意な番号を持つ。
【0063】図12は、サーバ1からのライト要求に応じて記憶装置サブシステム3″により実施される処理のフローチャートである。
【0064】図12に示す処理は、第2の実施形態において図5により説明した処理に対応する処理である。本実施形態では、先に述べたように、トランザクションID410ごとにキャッシュメモリ管理テーブル400′が作成される。このため、図5に示す処理に対して、新たに発生したトランザクションに対応する管理テーブルの割り当てを行う処理が追加されている。
【0065】記憶装置サブシステム3″のディスクコントローラ32″は、サーバ1からライト要求があると、ライト要求に含まれているトランザクションIDを参照し、制御メモリ323″にそのトランザクションIDに対応するキャッシュメモリ管理テーブルがあるかチェックする(ステップ3101)。該当するキャッシュメモリ管理テーブルが存在しなければ、ディスクコントローラ32″は、新たにキャッシュメモリ管理テーブル作成し、指定されたトランザクションIDのために割り当てる(ステップ3102)。
【0066】ステップ3101で該当するキャッシュメモリ管理テーブルが存在する場合、及び、ステップ3102の後、ディスクコントローラ32″は、第2の実施形態において図5により説明した処理と同様に、ライトデータをキャッシュメモリ322″に書き込み(ステップ2001)、キャッシュメモリ管理テーブルにシーケンス番号401′、先頭LBA402、ブロック数403、キャッシュメモリ上の先頭キャッシュアドレス404、及び最終キャッシュアドレス405を記録し(ステップ2002)、サーバ1にライト完了を報告する(ステップ2003)。
【0067】図13は、サーバ1からのリード要求に応じて記憶装置サブシステム3″により実施される処理のフローチャートである。
【0068】本実施形態では、サーバ1により発行されるリード要求にもトランザクションIDが含まれる。ディスクコントローラ32″は、サーバ1からリード要求を受け取ると、キャッシュメモリ管理テーブル400′を参照して、リード要求で指定されたトランザクションIDよりも古いトランザクションIDに関するキャッシュメモリ管理テーブルがあるかチェックする(ステップ3201)。該当するキャッシュメモリ管理テーブルがない場合、ディスクコントローラ32″は、ディスクユニット31aから直接該当するデータを読み出してサーバ1に渡して処理を終了する(ステップ3207)。
【0069】該当するキャッシュメモリ管理テーブルがあった場合、ディスクコントローラ32″は、見つかったキャッシュメモリ管理テーブルの中で、最も新しいトランザクションIDに関するキャッシュメモリ管理テーブルのエントリをサーチし(ステップ3202)、リード要求で読み出しが指定されたデータを含む領域のデータがキャッシュメモリ322″にあるかチェックする(ステップ3203)。
【0070】該当する領域のデータがキャッシュメモリ322″にあれば、ディスクコントローラ32″は、キャッシュメモリ管理テーブルに保持された情報に基づいて該当するデータを取得し、そのデータをサーバ1に渡して処理を終了する(ステップ3206)。
【0071】一方、ステップ3203でサーチ対象としたキャッシュメモリ管理テーブルにより管理されるキャッシュメモリ322″内のデータに該当するデータがなかったときは、リード要求で指定されたトランザクションIDよりも古いトランザクションIDに関するすべてのキャッシュメモリ管理テーブルについてサーチを行ったか判別する(ステップ3204)。サーチすべきキャッシュメモリ管理テーブルがなければ、ステップ3207でディスクユニット31aから該当するデータを読み出してサーバ1に転送する。
【0072】サーチを行っていないキャッシュメモリ管理テーブルがあれば、次に新しいキャッシュメモリ管理テーブルをサーチの対象として、ステップ3203以降の処理を繰り返す(ステップ3205)。
【0073】このように、トランザクションIDに基づいてリードデータの格納場所を判別し、そのデータをサーバ1に転送することで、一貫性が維持されたデータをサーバ1に渡すことができる。
【0074】図14は、サーバ1からコミット処理の要求が発行されたときに記憶装置サブシステム3″により実施される処理を示すフローチャートである。
【0075】キャッシュメモリ322″に書き込まれたデータは、サーバ1からコミットの指示があるとディスクユニット31aに書き出される。コミット指示の要求には、リード/ライト要求と同様に、トランザクションIDが含まれる。ディスクコントローラ32″は、コミット処理の指示を受けると、キャッシュメモリ管理テーブル400を検索し、指定されたトランザクションIDに関連するキャッシュメモリ管理テーブルを取得する(ステップ3301)。
【0076】次に、ディスクコントローラ32″は、取得したキャッシュメモリ管理テーブルの中で、シーケンス番号401′の最も小さいエントリを探す(ステップ3302)。ディスクコントローラ32″は、ステップ3302で探したエントリを参照して、先頭キャッシュアドレス404、最終キャッシュアドレス405で特定されるキャッシュメモリ322″の領域に保持されているデータを、先頭LBA402、ブロック数403に従ってディスクユニット31aに書き出す(ステップ3303)。
【0077】ディスクユニット31aへの書き込みが完了した時点で、ディスクコントローラ32″は、当該エントリをキャッシュメモリ管理テーブルから削除する(ステップ3304)。続いて、ディスクコントローラ32″は、当該テーブルにまだエントリが残っているかどうかチェックし(ステップ3305)、エントリが残っている場合にはステップ3202以降の処理を繰り返し、すべてのエントリについて処理を終了した後、当該キャッシュメモリ管理テーブルを制御メモリ323″から削除し、処理を終了する(ステップ3306)。
【0078】先に説明した第1、及び第2の実施形態では、同時に実行されるトランザクションが増えると、対応が難しくなる。例えば、第2の実施形態において、リードA、ライトA、リードB、ライトBの順でトランザクションが発生した場合、ライトAによるライトデータは一旦キャッシュメモリ上に退避され、リードAが完了した時点でディスクユニットに書き出される。ライトAによるライトデータをキャッシュメモリからディスクに書き込んでいる最中にリードB、ライトBのトランザクションが発行されると、ライトBによって書き込みが指示されたデータも一緒にディスクユニットに書き込まれてしまう。このためリードBによって読み出されたデータの一貫性が維持されなくなってしまう可能性がある。このような問題は、記憶装置サブシステムが、サーバから要求されたコマンドがどのトランザクションに対応しているかを識別することができないために発生する。本実施形態では、サーバからの要求がどのトランザクションに関連するものかを記憶装置サブシステム側で認識することができ、このような問題を回避することが可能となる。
【0079】
【発明の効果】本発明によれば、同時に複数のトランザクションを処理する際のホストコンピュータの負荷を低減することができる。
【出願人】 【識別番号】000005108
【氏名又は名称】株式会社日立製作所
【出願日】 平成12年10月25日(2000.10.25)
【代理人】 【識別番号】100075096
【弁理士】
【氏名又は名称】作田 康夫
【公開番号】 特開2002−132554(P2002−132554A)
【公開日】 平成14年5月10日(2002.5.10)
【出願番号】 特願2000−332107(P2000−332107)