JP4242155B2 - 永続的記憶装置へのダーティデータ項目の書込を調整するための方法、当該方法をコンピュータに行なわせるためのプログラムを格納したコンピュータ読出可能な媒体、および、永続的記憶装置へのダーティデータ項目の書込を調整するための装置 - Google Patents

永続的記憶装置へのダーティデータ項目の書込を調整するための方法、当該方法をコンピュータに行なわせるためのプログラムを格納したコンピュータ読出可能な媒体、および、永続的記憶装置へのダーティデータ項目の書込を調整するための装置 Download PDF

Info

Publication number
JP4242155B2
JP4242155B2 JP2002572008A JP2002572008A JP4242155B2 JP 4242155 B2 JP4242155 B2 JP 4242155B2 JP 2002572008 A JP2002572008 A JP 2002572008A JP 2002572008 A JP2002572008 A JP 2002572008A JP 4242155 B2 JP4242155 B2 JP 4242155B2
Authority
JP
Japan
Prior art keywords
node
data item
persistent storage
dirty data
queue
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2002572008A
Other languages
English (en)
Other versions
JP2005506598A5 (ja
JP2005506598A (ja
Inventor
チャンドラセカラン,サシカンス
バンフォード,ロジャー
ブリッジ,ウィリアム
ブローワー,デイビッド
マクノートン,ニール
チャン,ウィルソン
スリハリ,ビナイ
Original Assignee
オラクル・インターナショナル・コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US10/092,047 external-priority patent/US7065540B2/en
Application filed by オラクル・インターナショナル・コーポレイション filed Critical オラクル・インターナショナル・コーポレイション
Priority claimed from PCT/US2002/006981 external-priority patent/WO2002073416A2/en
Publication of JP2005506598A publication Critical patent/JP2005506598A/ja
Publication of JP2005506598A5 publication Critical patent/JP2005506598A5/ja
Application granted granted Critical
Publication of JP4242155B2 publication Critical patent/JP4242155B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating

Description

関連出願および優先権主張
この特許出願は、2001年3月7日に提出された米国仮特許出願第60/274,270号「故障間での一貫性を必要とする分散共有ディスクシステムにおいてディスク書込を行なう方法(“Methods to perform disk writes in a distributed shared disk system needing consistency across failures”)」に関し、当該仮特許出願から優先権を主張しており、その内容はすべてここに引用により援用される。
発明の分野
この発明は、ディスク書込を行なうことに関し、より具体的には、データ項目のダーティバージョンが多数のノードのキャッシュ内に存在することを可能にするシステム内におけるダーティデータ項目の書込調整に関する。
発明の背景
データベースシステム内のスケーラビリティを向上させる1つの手法は、多数のノードが共有記憶装置内のデータを並行して読出し、修正することを可能にすることである。各ノードは、揮発性メインメモリ内のデータを保持するキャッシュを有し、不揮発性共有ディスク記憶装置によってバックアップされる。グローバルロックマネージャ(GLM)または分散ロックマネージャ(DLM)を用いて、ノード間のキャッシュコヒーレンシを維持する。メインメモリの内容を消去するノードの故障からの回復を提供するために、一般的なライトアヘッドロギング(WAL)プロトコルが用いられる。性能上の理由から、各ノードは、変更が記録される専用のリドゥログを有する。ノード故障後に走査される必要のあるリドゥログ内の変更の量を減じるために、チェックポイント前のデータ項目内のすべての変更が不揮発性記憶装置内のデータ項目に再適用されなくてもよいことを保証するインクリメンタルまたは定期的なチェックポイントが通例とられる。
並行処理
同じノード上または異なるノード上のいずれかで実行しているトランザクション間の並行処理は、グローバルトランザクションページレベルロックまたは行レベルロックによって実現される。トランザクションシステムは、トランザクションによって修正された(ページ/ブロック等の)データ項目が、トランザクションコミット中に安定した記憶装置に書込まれる強制方式、または、リドゥログ内のトランザクションの変更のみがトランザクションコミットにおいて強制される非強制方式のいずれかを用い得る。ページレベルロックを用いる強制方式を用いることは、ブロックが、1つのノードによってのみ(実際には、1つのトランザクションによってのみ)修正され、いずれかのポイントで1つのシステムのキャッシュのみの中でダーティ化され得ることを意味する。すべての他の組合せ(つまり、強制方式での行レベルロック、非強制方式でのページレベルロック、および非強制方式での行レベルロック)では、データ項目は多数のシステム内で修正され得、キャッシュコヒーレンシメカニズムが必要とされる。
最も一般的な事例は、非強制データ項目管理方式での行レベルロックである。説明のために、以下に提供される例は、非強制データ項目管理方式での行レベルロックを用いるシステムの状況において提供される。しかし、ここで説明される技術は、この状況に限定されているわけではない。
チェックポイント待ち行列
トランザクションがコミットすると、トランザクションによって作られた変更を反映するデータは、永続的記憶装置に記憶されなければならない。いくつかのシステムでは、トランザクションによって作られた変更を表わすリドゥレコードは、コミット時に永続的に記憶されなければならないが、修正されるデータ項目自体の実際の書込は、遅延され得る。(1)変更を含み、および(2)永続的に記憶されていないデータ項目が、「ダーティデータ項目」と呼ばれる。一般に、あるノード内に存在するデータ項目がダーティであればあるほど、そのノードが故障した場合、回復時間はより長くなる。したがって、回復時間が許容できないほど長くならないことを確実にするために、ノードは、チェックポイント待ち行列を維持し得る。
チェックポイント待ち行列は、ダーティデータ項目を識別するエントリを含む。待ち行列内のエントリは、永続的に記憶されるリドゥログ内の対応のリドゥレコードの順番に基づいて順序づけられる。故障の際には、リドゥログは、チェックポイント待ち行列のヘッドにあったエントリに対応するリドゥレコードから処理されなければならない。
ダーティデータ項目が永続的記憶装置に書込まれると、そのデータ項目のためのエントリは、チェックポイント待ち行列から除去される。チェックポイント待ち行列のヘッドにあるエントリがチェックポイント待ち行列から除去されると、回復処理が開始されなければならないリドゥログ内のポイントが変わり、結果として、チェックポイントの「前進」が得られる。故障時に、チェックポイントがリドゥログ内で進んでいればいるほど、故障からの回復のために行なわなければならない作業は、より少なくなる。したがって、ノードは、通例、それらのチェックポイント待ち行列のヘッドにおけるエントリによって識別されるダーティデータ項目を永続的記憶装置に書込むことを試みる。しかし、以下でより詳細に説明されるように、ダーティデータ項目の書込を調整することは、同じデータ項目のダーティバージョンが多数のノードのキャッシュ内に存在することが可能である場合に、特に重要である。
共有永続的記憶装置を通してのデータ項目の転送
データ項目が並行して多数のシステムによって修正され得る場合、安定した共有永続的記憶装置に対する、修正されたデータ項目の書込みを調整するメカニズムが必要とされる。いくつかのシステムでは、この問題は、修正されたデータ項目を1つのノードから別のノードへと転送するための媒体として安定した共有永続的記憶装置を用いることによって、簡素化される。あるノード内でダーティであるデータ項目が、異なるノード内での修正のために必要とされる場合、データ項目は、ダーティ化されたデータ項目を修正することを望むノードにページロックを与える前に、共有永続的記憶装置にまず書込まれる。異なるノードが、修正されたデータ項目の現在のバージョンを読出す必要がある場合、同じ、永続的記憶装置への書込および永続的記憶装置からの読出シーケンスが用いられる。
相互接続を通したデータ項目の転送
システムがノード間でデータ項目を転送する媒体として不揮発性記憶装置を用いるシステムでは、異なるノード間でダーティデータ項目の書込を調整する必要はない。各ノードは、ダーティデータ項目を書き出し、さらにはチェックポイントを行なうための従来のメカニズムを用い得る。
いくつかのシステムでは、要求を行なうノードが、修正されたデータ項目の一貫したスナップショットバージョンのみを必要とする場合、データ項目を永続的記憶装置に書込むことなく、修正されたデータ項目は、要求を行なうノードに送信される。したがって、これらのコヒーレンシ制御メカニズムを用いると、異なるノード内の多数のトランザクションは、トランザクションコミット前に行レベルロックを用いて同じデータ項目を修正することができるが、いずれかのデータベースデータ項目が、1つのノードのキャッシュ内に
おいてのみダーティである。したがって、あるノードが故障した場合は、データベースを回復させるために、そのノードのリドゥログのみが、そのノード内のチェックポイントレコードからそのリドゥログの終わりまで走査されればよい。さらに、多数のノードが故障した場合は、各ノードのリドゥログが、走査され、データベースを回復するように順次適用され得る。つまり、多数のリドゥログからの変更を併合する必要はない。
しかし、排他ロックを有し、さらにはデータ項目を修正した可能性をもつノードから、排他的用途または読出の現在のバージョンのために同じデータ項目を要求するノードまでのデータ項目転送の待ち時間を改善するために、データ項目を永続的記憶装置に最初に書込まずに、1つのノードのメインメモリから別のノードのメインメモリへとデータ項目を直接転送することが望ましい。ダーティデータ項目が1つのノードから別のノードへと転送されるとき、過去イメージ(PI)として公知のデータ項目のコピーは、送信を行なうノード内に保持されてもよく、または保持されなくてもよい。
ノードがダーティデータ項目を、永続的記憶装置にそれらを記憶することなく転送できる場合、ダーティデータ項目の書込は、種々のノード間で調整されなければならない。調整が起こらない場合には、ダーティデータ項目を転送したノードは、ダーティデータ項目を永続的記憶装置に書込むことによって、そのチェックポイントを前進させることを望むであろう。しかし、ある他のノードが既により新しいバージョンのデータ項目を永続的記憶装置に書込んでいた場合には、ダーティデータ項目を永続的記憶装置に書込むことによって、データの完全性が壊されるおそれがある。
加えて、ダーティデータ項目がディスクに書込まれない限り、チェックポイントは、前進させられ得ない。あるノードが他のノードに送信するデータ項目のダーティバージョンをそのノードが保持しない場合、ノードは、他のノードとともにディスクへの書込動作を何らかの形で調整しなければならない。
さらに、システムがスケーラブルであるためには、システムによって行なわれるディスクへの書込動作の回数は、システム内のノード数の関数であるべきでない。むしろ、ディスクへの書込動作の数は、システム内のデータ項目に対して実際に行なわれた変更の数を単純に反映するべきである。
以上のことから、システム内のダーティデータ項目の書込を調整するための技術であって、同じデータ項目のダーティバージョンが1つよりも多くの揮発性メモリ内に存在することのできる技術を提供することが疑いもなく望まれる。
発明の概要
同じデータ項目の異なるコピーを含み得る多数のキャッシュを備えたシステム内でキャッシュを管理するための技術が提供される。具体的には、このようなデータ項目上で行なわれるディスクへの書込動作を調整して、より古いバージョンのデータ項目がより新しいバージョン上に書込まれないことを確実にし、さらには、故障後の回復に必要とされる処理量を減じるための技術が提供される。多数のキャッシュと協調してデータ項目を永続的記憶装置に書込ませるためにマスタが用いられる、さまざまな方式が提供される。このような方式は、直接書込方式、間接書込方式、オーナーベース方式、および役割ベース方式を含むが、これらに限定されているわけではない。キャッシュに関連したチェックポイントを管理するための技術も提供されており、ここでは、チェックポイントを用いて、故障時に回復ログの処理を開始すべき位置が決定される。
この発明は、同じ参照番号が同様の要素を指す添付の図において、限定としてではなく、例として示される。
発明の詳細な説明
ダーティデータ項目の書込を調整するための方法および装置を記載する。以下の記載においては、説明のため、この発明の完全な理解をもたらすための数々の特定の詳細を記載する。しかしながら、この発明はこれら特定の詳細なしに実施可能であることが明らかであろう。他の場合には、この発明を不必要に不明瞭にすることを避けるために、周知の構造および装置をブロック図の形で示す。
転送用の媒体として永続的記憶装置を使用する最適化システム
ノード間でデータ項目を転送するための媒体として永続的記憶装置を用いるシステムでは、1つのノードから別のノードへデータ項目を転送する待ち時間は、データベースキャッシュ書込サブシステムを修正して、他のノードが読出または書込しようと待っているデータ項目の書込に対してより高い優先度を与えることで減少され得る。これは、他のノードがダーティデータ項目を読出または修正しようと待っているので、書込まれる必要があるダーティデータ項目のために別個の待ち行列(「ping待ち行列」)を設けることで達成できる。ロックマネージャ(分散ロックマネージャDLMまたはグローバルロックマネージャGLMのいずれかであり得る)が保持ノードにメッセージを送り、保持ノードに対し、データ項目に対するロックをリリースするように頼むと、ダーティデータ項目はオンデマンドでping待ち行列に動かされ得る。
別の方式に従うと、1つのノードから別のノードへのデータ項目を転送する待ち時間は、各々のデータ項目ヘッダまたはデータ項目制御ブロック内で「強制書込」カウントを維持することで減少され得る。データ項目を別のノードに転送するために書込が実行されるたびごとに、強制書込カウントが増分される。永続的記憶装置書込サブシステムは、或るしきい値よりも高い強制書込カウントを有するダーティデータ項目の最優先待ち行列を維持する。このような待ち行列を用いて、これらのデータ項目を、ノード間で頻繁に共有されない他のダーティデータ項目よりも頻繁に書込むことを可能にする。加えて、ノード間のロック転送の待ち時間が改良されるが、それはデータベースキャッシュ書込サブシステムがダーティデータ項目を、これらデータ項目のロックがリリースされる必要があると予測して、熱心に書出していたことによる。
しかしながら、この態様で最適化されたとしても、ノード間でデータ項目を転送するための媒体として共有の永続的記憶装置を用いるシステムは、永続的記憶装置にデータ項目を書込むことに関連したオーバーヘッドを抱える。以下に記載の技術は、ダーティデータ項目を含むデータ項目が永続的記憶装置にまず書込まれずにノード間で転送され得る、システムに関する。
正当性およびスケーラビリティ
永続的記憶装置にまず記憶されずにキャッシュ間でダーティデータ項目を転送できるシステムでは、正当性およびスケーラビリティのために、異なるノードごとのキャッシュ内のダーティデータ項目の書込を調整する必要がある。正当性は、ノードがチェックポイントを完了(すなわち、故障後にリドゥログから変更が適用される必要があり得る出発点を記録)すると、チェックポイントに先立ちコミットされた変更が入っているあらゆるデータ項目のバージョンが不揮発性永続的記憶装置に書込まれていることを要件とする。さらに2つのノードが同時に永続的記憶装置にデータ項目を書込むことを許されてはならず(なぜならこれらが互いの変更を壊すおそれがあるからである)、ノードはより新しいバー
ジョンの上に、より古いバージョンのデータ項目を書込むことを許されてはならない。
スケーラビリティは、異なるノードによって変更がなされた場合でも、永続的記憶装置のデータ項目書込が可能な限り多くの変更をカバーすることを要件とする。スケーラビリティの理由からデータベースシステムは、走査される、およびおそらくはノード故障後に再適用される必要があるリドゥログの量を制限したいと望むであろう。したがってデータベース書込の数は、データ項目に対してなされる変更の数と比例し得るが、これらの変更を行なうノードの数と比例すべきではない。
機能の概観
同じデータ項目のダーティバージョンが多数のキャッシュに常駐できるシステム内で、永続的記憶装置へのダーティデータ項目の書込を調整するためのさまざまな技術を提供する。一技術に従うと、調整はデータ項目に割当てられたマスタを使用して実行される。一実施例に従うと、データ項目のダーティバージョンの書込を調整するのに用いられるマスタは、データ項目へのアクセスを支配するロックを管理するように割当てられるのと同じエンティティである。このような実施例では、マスタはロック管理システム、たとえば、分散またはグローバルロック管理システムのいずれかに属するロックマネージャなどの構成要素であるのが典型的であろう。
一実施例では、永続的記憶装置にダーティデータ項目を書込みたいと望むノードは、データ項目に割当てられたマスタに永続的記憶装置書込要求を送る。マスタは(1)要求しているノードに、書込を実行する許可を与えるか、または(2)要求しているノードに記憶されたダーティバージョンと少なくとも同じだけ新しいバージョンを、別のノードが既に永続的記憶装置に書込んだことを、要求しているノードに知らせ得る。
別の実施例では、マスタは応答として「書込実行」メッセージを送り、要求しているノードに記憶されたダーティバージョンと少なくとも同じだけ新しいデータ項目のバージョンを、要求しているノードとは別のノードに対し、永続的記憶装置に書込むように頼むこともある。この別のノードがマスタに、書込が実行されたという「書込確認」メッセージを送った後、マスタは「書込通知」メッセージを送り、要求しているノードに記憶されたダーティバージョンと少なくとも同じだけ新しいデータ項目のバージョンを別のノードが既に永続的記憶装置に書込んだことを、要求しているノードに知らせる。
データ項目の特定のバージョンが一旦永続的記憶装置に書込まれると、この特定のバージョンと同じまたはこれよりも古いデータ項目のダーティバージョンは、この特定のバージョンの書込によって「カバー」される。データ項目のカバーされたバージョンはもはや永続的記憶装置に書込まれる必要はない(かつそうされるべきではない)。カバーされたバージョンが入っているノードをここで「該当の」ノードと呼ぶ。
要求しているノードに、データ項目が永続的記憶装置に書込まれたことを知らせるのに加え、マスタは書込通知メッセージを送って、データ項目が永続的記憶装置に書込まれたことを該当のノードすべてに知らせることができる。他の該当のノードへの書込通知メッセージは、データ項目が永続的記憶装置に書込まれた確認を受取った後すぐに送られても、または或る他のイベントまで遅延されてもよい。
別の実施例では、ダーティデータ項目が永続的記憶装置に書込まれることをノードが欲するたびに、あらゆるノードがマスタに問う必要を避けるために、マスタはこのデータ項目についての「所有権許可」をノードに付与することができる。ノードがデータ項目の所有権許可を保持している間は、ノードはデータ項目のマスタに書込要求メッセージを送ることなしに、データ項目を永続的記憶装置に自由に書込むことができる。所有権許可は、
排他ロックの所有権とともに暗黙に付与されても、または排他ロックの付与とは別に、かつこれとは独立に付与されてもよい。
一実施例に従うと、データ項目について「グローバルダーティ」フラグが維持される。ノードがデータ項目のダーティバージョンを別のノードに転送すると、グローバルダーティフラグは真にセットされる。オーナが永続的記憶装置にデータ項目を書込む際にグローバルダーティフラグが真にセットされていれば、オーナはマスタに書込確認メッセージを送る。次にマスタは書込通知メッセージを該当のノードに送ることができる。逆に、グローバルダーティフラグが偽にセットされていれば、オーナはデータ項目を書込む際にマスタに書込確認メッセージを送る必要はない。
直接書込方式
直接書込方式に従うと、ダーティデータ項目の永続的記憶装置への書込は、データ項目に割当てられたマスタを用いて調整される。具体的に、ダーティデータ項目を永続的記憶装置に書込みたいと望むノードは、データ項目に割当てられたマスタに書込要求メッセージを送る。マスタは(1)要求しているノードに、書込を実行する許可を与えるか、または(2)要求しているノードに記憶されたダーティバージョンと少なくとも同じだけ新しいバージョンを、別のノードが既に永続的記憶装置に書込んだことを、要求しているノードに知らせ得る。
より具体的には、ダーティデータ項目がノードのキャッシュから「ping outされる」、すなわち別のノードが読出(Sロック)または書込(Xロック)のために同じデータ項目の現在のバージョンを必要とすると、送る側のノードのキャッシュにあるデータ項目の状態はPIに変えられる。データ項目はなおもダーティまたはチェックポイント待ち行列に留まる。クリーンなデータ項目がpingoutされると、データ項目はフリーとして印付けら
れるか、またはキャッシュ内に留まって一貫したスナップショット読出を満足することができる。
データ項目のマスタは、データ項目がping outされたときのデータ項目のバージョン数を記録する。典型的にこのバージョン数はログシーケンス数(LSN)、システムコミット数(SCN)または、リドゥログ内の変更にデータ項目のバージョンを相関付けるのに用いられ得るグローバルに一意のタイムスタンプである。チェックポイントまたはキャッシュ書込サブシステムは最終的にPI(またはその或る後継)を書出す必要があるが、それはデータ項目がなおダーティまたはチェックポイント待ち行列にあるからである。
直接書込方式に従うと、メッセージがマスタに送られ、これは、データ項目のより新しいバージョンが書込まれた状態でもって返答するか、または要求しているノードに書込許可を与えることになる。さらに、他のノードからの同じデータ項目についての書込要求は、書込ノードが書込完了状態でもってロックマネージャに応答するまで待ち行列にいる。PIが永続的記憶装置に書込まれた後、データ項目のマスタはPIのバージョン数を、永続的記憶装置に現在あるバージョンとして記録する。
図1を参照して、直接書込方式を採用したシステムを例示するブロック図が示される。ノード1,2,3は、特定のデータ項目のバージョンV1、V2およびV3をそれぞれキャッシュに記憶している。V3>V2>V1であると想定し、ここでA>Bとは、AがBよりも新しいバージョンのデータ項目であることを意味する。
マスタ100はデータ項目に割当てられたマスタである。図1に例示するシナリオでは、ノード1およびノード3が書込要求をマスタ100に送る。多数のノードが同じデータ項目を同時に書込むことを防ぐために、マスタ100にはたとえば、各データ項目につい
て書込要求待ち行列が入っていることがあり得る。データ項目について受取った書込要求は、書込要求待ち行列に記憶されてマスタにより順次処理される。ここに示す例では、マスタ100はノード3からの書込要求を最初に処理し、一方でノード1からの書込要求は書込要求待ち行列に留まる。マスタ100は、ノード3の書込要求への応答として、V3を永続的記憶装置に書込む許可をノード3に与える書込実行メッセージをノード3に送る。
書込要求がノード3に付与された一方、マスタ100は、永続的記憶装置への書込許可を他のいかなるノードにも付与しない。したがってノード1からの書込要求は書込要求待ち行列内で保留のままである。
ノード3がV3を永続的記憶装置に書込んだ後、ノード3はマスタ100に書込確認メッセージを送り、永続的記憶装置への書込動作が完了し、かつ永続的記憶装置への書込許可がノード3によりリリースされていることを示す。V3はV1およびV2よりも新しいので、V1およびV2はV3の書込によりカバーされている。
次にマスタ100は待ち行列内の次の書込要求の処理に進む。この例では、マスタ100はノード1からの書込要求を処理する。ノード1の書込要求はV1を書込む要求である。V1は既にV3の書込によりカバーされたので、マスタ100はノード1に書込通知メッセージを送り、V1が既にカバーされていることを示す。書込通知メッセージに応答して、ノード1は、V1を永続的記憶装置に書込まずに、そのチェックポイント待ち行列からV1についてのエントリをなくす。今やノード1はV1がカバーされていることを知っているので、ノード1はメモリにV1のコピーを維持する必要はない。
一実施例に従うと、V3の書込によりカバーされたV2が入っているノード2に対しては、ノード2がV2についての書込要求をマスタ100に送るまで書込通知メッセージは送られない。
間接書込方式
直接書込方式を用いると、各ノードはノードのチェックポイント待ち行列内の各エントリについて書込要求メッセージを送る。或る場合には、ノードは書込要求への応答として書込実行メッセージを受取ることになる。書込実行メッセージが受取られると、要求しているノードは書込動作を実行しなければならない。他の場合には、要求しているノードは書込要求への応答として書込通知を受取ることになる。書込通知メッセージが受取られる場合には、要求しているノードは書込動作を実行する必要はない。
間接書込方式では、書込通知メッセージで返答される書込要求の割合を増加させることが試みられる。これを達成するため、マスタ100は書込動作を実行するように頼まれるノードに関して選択的である。具体的にマスタ100は、或るノードからの書込要求メッセージへの応答として、書込実行メッセージを別のノードに送ることができる。書込実行メッセージが送られるノードは、キャッシュ内に記憶されるデータ項目のバージョンの新しさを含むさまざまな要因に基づいて選択され得る。一実施例に従うと、マスタ100は、書込要求メッセージを送ったノードに拘わらず、データ項目の現在のバージョンが入っているノードに書込実行メッセージを送る。
より特定的に、一実施例に従うとマスタは、過去イメージの中で最も高いバージョンを有するノードか、または好ましくは排他ロック(X)のホルダ(データ項目の現在のバージョンを有しているであろう)のいずれかに書込要求を送る。排他ロックホルダでなく最も高いPIに書込要求を送ると、現在のデータ項目は連続的に修正に応じることができる。
データ項目は、永続的記憶装置に書込まれている間修正してはならない。したがって、さらに修正され得る現在のデータ項目を書込むためには、これをロックして修正を防ぐか、またはこれを「複製(clone)」して、変更を異なるコピーに対して行なわせる必要が
ある。ロックは望ましくない。複製が可能であれば、現在のデータ項目(すなわちXロックまたはSロック)を有するノードに書込要求を向けることが好ましい。
データの現在のバージョンを永続的記憶装置に書込ませることで、永続的記憶装置の書込は可能な限り多くの変更をカバーできる。永続的記憶装置への書込が完了すると、書込完了状態と、書込まれたデータ項目のバージョン数とを伴うメッセージがマスタに送られる。マスタは永続的記憶装置にあるバージョン数を記録し、永続的記憶装置の書込により今やカバーされているデータ項目のPIバージョンを有するノードすべてに書込通知メッセージを送る。ノードが書込通知を受取ると、ノードはそのチェックポイントレコードを正しく進めてPIデータ項目をリリースできるが、これは、チェックポイントレコードに先立つダーティまたはチェックポイント待ち行列にあるすべてのデータ項目が永続的記憶装置に書込まれたか、または、他のノードにある同じデータ項目の書込に由来するマスタからの書込通知を受取ったか、のいずれかの場合に行なわれる。データ項目が書込まれるとき、マスタは書込要求の待ち行列を論理的に維持するが、受取った最も高い書込要求のバージョン数を記録するだけでよい。
たとえば、図2に示すシナリオでは、ノード3はV3についての書込要求メッセージをマスタ100に送ってはいない。しかし、データ項目のバージョンV1を書込むためのノード1からの書込要求メッセージへの応答として、マスタ100は、データ項目を書込むノードとしてノード3を選択する。ノード3は応答としてデータ項目のV3を書込み、書込確認メッセージをマスタ100に送る。次にマスタ100は書込通知メッセージをノード1に送る。
V3を永続的記憶装置に書込むためにノード3が選択されたので、V1およびV2はいずれもカバーされる。対照的に、マスタ100が(直接書込方式に従い)V1を書込む許可をノード1に与えた場合、V2およびV3はカバーされないであろう。V2およびV3を永続的記憶装置に書込む時間が来ると、別個の書込動作を行なわなければならないであろう。
間接書込方式ではさらに、マスタ100に送られなければならない書込要求メッセージの数を減少させることが試みられるが、これは、書込要求メッセージを送った該当のノードだけでなく、これを送らなかったノードにも先制的に書込通知メッセージを送ることで行なわれる。たとえば図2に示すシナリオでは、間接書込方式を用いて、ノード2がV2についての書込要求を送っていないにもかかわらず、マスタ100は書込通知をノード2にも送ることになる。一実施例に従うと、マスタ100は書込通知メッセージを該当のノードすべてに送る。
該当のノードは、書込通知を受取ると、データ項目の対応するバージョンについてのエントリをそのチェックポイント待ち行列からなくす。間接書込方式を用いると、チェックポイント待ち行列内のエントリの多くはこの態様でなくされてから、書込要求がこれらエントリについて送られることになるであろう。したがって、ノードによって送られる書込要求メッセージの数は、そのチェックポイント待ち行列に置かれたエントリの数よりも大幅に小さくなるであろう。
オーナベースの書込
間接書込方式および直説書込方式のいずれにおいても、データ項目が1つのノードのキ
ャッシュでダーティ化されたにすぎない場合でも、書込要求メッセージがデータ項目のマスタに送られる。多くのデータベースシステムでは、データベースワーキングセットのかなりの部分がノード間で区分化され得るが、これはノード間での内部永続的記憶装置構造の区分化(たとえば各ノードについての別個のデータ項目フリーリスト)、またはノードへのトランザクションのアプリケーションレベルの経路付けのいずれかによって行なわれる。このようなシステムでは、データ項目はただ1つのノードのキャッシュでのみダーティ化されていることが頻繁にある。オーナベースの書込方式では、これらの状況下で書込要求を送る必要性が回避される。
オーナベースの書込方式は、データ項目のすべての書込が、データ項目の「オーナ」として現在指定されているノードによって行なわれることを引起す。直接および間接書込方式とは対照的に、データ項目のオーナがデータ項目の或るバージョンを書込みたいと望むと、オーナはデータ項目のマスタに書込要求メッセージを送ることなく、永続的記憶装置へのデータ項目の書込を許される。
データ項目のオーナとして動作するノードを選択するにはさまざまな要因が用いられ得る。一実施例に従うと、データ項目のオーナは以下の規則に従って選択される。
(1) 或るノードがデータ項目について排他ロックを付与されていれば、このノードがデータ項目のオーナと見なされる。
(2) 排他ロックホルダがない、すなわち多数の共有ロック(S)ホルダがある場合、データ項目に対する排他ロックを一番最近に有していたノードがデータ項目のオーナとして選択される。
(3) データ項目がいかなるノードによってもダーティ化されたことがなければ、このデータ項目にはオーナはない。
データ項目のオーナであるノードでは、データ項目は、このノード内でダーティ化されていないかもしれないとしても、ノードのダーティまたはチェックポイント待ち行列とリンクされる。
データ項目のオーナがデータ項目を永続的記憶装置に書込んだ後、オーナはデータ項目が「グローバルにダーティ」であったかどうかを判断する。オーナ以外のいかなるノードによってなされたいかなる修正も、このノードによって永続的記憶装置に保存されていなければ、データ項目はグローバルにダーティである。データ項目がグローバルにダーティであった場合、オーナは書込確認メッセージをマスタに送る。次にマスタは書込通知を該当のノードに送る。データ項目がグローバルにダーティでなかった場合、オーナは書込確認メッセージをマスタに送る必要はない。
データ項目がグローバルにダーティであったかどうかの判断をデータ項目のオーナに対して可能にするにはさまざまな技術が用いられ得る。一実施例に従うと、グローバルダーティフラグがデータ項目と関連付けられる。ノードが永続的記憶装置にデータ項目を書込まずにデータ項目のダーティバージョンを別のノードに送ると、送る側のノードはデータ項目のグローバルダーティフラグを真にセットする。データ項目がグローバルにダーティであるかどうかを判断するには、オーナはデータ項目と関連付けられたグローバルダーティフラグを調べるだけでよい。永続的記憶装置に書込まれるデータ項目のバージョンが(1)データ項目の現在のバージョンまたは(2)最新のPIバージョンのいずれかである場合、オーナはデータ項目を永続的記憶装置に書込んだ後にグローバルダーティフラグを偽にセットする。
データ項目のグローバルダーティフラグはさまざまなやり方で記憶され得る。たとえばデータ項目がデータベースシステム内のデータ項目であれば、グローバルダーティフラグは、(1)データ項目を記憶するブロックのブロックヘッダ、(2)データ項目のデータ項目制御ブロック、(3)ロックがデータ項目の新たなオーナに付与される際におけるローカルロックマネージャ内のロック構造など、に記憶され得る。
図3aを参照して、データ項目のオーナ(ノード3)が永続的記憶装置にデータ項目を書込みたいと望むシナリオが示され、ここでグローバルダーティフラグは偽にセットされる。図3aに示すように、これらの状況下では、ノード3はマスタ100から許可を求める必要はない。加えてノード3は、永続的記憶装置への書込動作が実行されたことをマスタ100に通知する必要もない。
図3bを参照して、データ項目のオーナ(ノード3)が永続的記憶装置にデータ項目を書込みたいと望むシナリオが示されるが、ここではグローバルダーティフラグは真にセットされる。ここに示すシナリオでは、ノード1およびノード2は、ノード3に記憶されたバージョンV3よりも古いデータ項目のダーティバージョンV1およびV2を有する。図3aに示すシナリオと同様、このシナリオでもノード3はV3を永続的記憶装置に書込む許可を要求する必要はない。しかしながら、グローバルダーティフラグは真であったので、ノード3はV3を永続的記憶装置に書込んだ後、マスタ100に書込確認メッセージを送る。次にマスタ100は書込通知メッセージをノード1およびノード2に送る。V3を永続的記憶装置に書込んだ後、ノード3はグローバルダーティフラグを偽にセットする。
図3cを参照して、データ項目の永続的記憶装置への書込をデータ項目の非オーナ(ノード1)が望むシナリオが示される。このシナリオでは、ノード1が書込要求メッセージをマスタ100に送る。次にマスタ100は、データ項目のオーナ(ノード3)に書込実行メッセージを送る。ノード3は、V3を永続的記憶装置に書込み、グローバルダーティフラグを偽にセットし、書込確認メッセージをマスタ100に送る。次にマスタ100は、書込通知メッセージを該当のノード(ノード1およびノード2)に送る。
役割ベースの方式
オーナベースの書込方式では、データ項目のオーナが、永続的記憶装置へのデータ項目の書込前にデータ項目のマスタから許可を得る必要性が回避される。しかしながら、2つのノードが同時に永続的記憶装置へのデータ項目の書込を試みる可能性を回避するために、データ項目の現在のオーナがデータ項目を永続的記憶装置に書込んでいる間、データ項目の所有権は変更を許されない。したがって、排他ロックのホルダがオーナと見なされるシステムでは、データ項目の現在のオーナがデータ項目を永続的記憶装置に書込む間、排他ロックは別のノードに転送され得ない。結果として、データ項目を修正したいと望む後続のノードへの修正許可の転送は、データ項目が永続的記憶装置に書込まれるまで遅延される。このような遅延はシステムの全体的な性能を低下させる。加えて、オーナがデータ項目をダーティ化していないかもしれないときでも、データ項目のオーナがそのダーティ待ち行列内にデータ項目をリンクしなければならないことは望ましくない。
役割ベースの方式では、(1)データ項目内の排他ロックの所有権と、(2)書込要求を送らずに永続的記憶装置にデータ項目を書込む許可とを別にする。データ項目内の排他ロックの所有権と、書込要求を送らずに永続的記憶装置にデータ項目を書込む許可とが別にされているため、永続的記憶装置への書込動作が進行中でも、ノード間でデータ項目の排他ロック所有権を転送できる。
役割ベースの方式に従うと、ロックの役割が各ロックに割当てられる。データ項目が1
つのノードのキャッシュ内でのみ潜在的にダーティであり得る場合、ロック役割は「ローカル」である。したがって、データ項目に対するロックがシステム全体で初めてノードに付与される場合、ロックにはローカルの役割が付与される。役割がローカルであるロックの下でのデータ項目は、マスタの介入なしにロックを保持するノードによって永続的記憶装置から読出され、かつ永続的記憶装置に書込まれ得る。
或るノードのキャッシュから、異なるノードからのロック要求のためデータ項目がping
outされると、データ項目が保持ノードのキャッシュにおいてダーティであれば、ロックについての役割は「グローバル」に変換される。そうでなければ、データ項目とともに転送されるロックはローカルの役割に留まる。したがって、データ項目がグローバルの役割にある必要があるのは、マルチノードシステム内のデータ項目について少なくとも1つのPIがある場合のみである。
グローバルの役割における現在のデータ項目またはPIデータ項目が永続的記憶装置に書込まれる必要があると、その保持ノードは、書込まれる必要があるデータ項目のバージョン数とともに書込要求メッセージをマスタに送る。マスタは、現在のデータ項目を有するノード(Xロックホルダ)か、または、書込まれる必要があるPIのバージョン数以上のバージョン数を有するあらゆるPIのいずれかに、書込要求を送ることができる。書込が完了すると、マスタは、永続的記憶装置に書込まれるデータ項目のバージョンによりカバーされるPIを有するすべてのノードに書込通知を送る。
排他ロックがグローバルの役割にあるノードは、その永続的記憶装置への書込動作をマスタと協調する必要もあるので、排他ロックの下にあるデータ項目が書込中であっても、排他ロックは別のノードに転送され得る。同じ理由から、ノードはこのノード内でダーティ化されていない限り、そのチェックポイントまたはダーティ待ち行列内にデータ項目をリンクしない。ダーティデータ項目がローカルの役割の下で書込まれている間にping outされると、ロック役割はグローバルに切換えられ、進行中の書込はマスタに通信される。
図4aを参照して、ローカルモードのロックのホルダがデータ項目のバージョンを永続的記憶装置に書込みたいと望むシナリオが示される。ノード3が保持するロックはローカルモードにあるため、ノード3はマスタ100からの許可を求めずに永続的記憶装置にデータ項目を書込む。ノード3はまた、データ項目が永続的記憶装置に書込まれたことをマスタ100に知らせる必要もない。
図4bを参照して、グローバルモードのロックのホルダ(ノード3)が永続的記憶装置にデータ項目のバージョンV3を書込みたいと望むシナリオが示される。ロックモードはグローバルであるため、別のノードがデータ項目を書込んでいる可能性がある。したがってノード3は書込要求メッセージをマスタ100に送る。書込要求メッセージに応答してマスタ10は、データ項目を書出すノードを選択する。マスタ100は、V3と少なくとも同じだけ新しいデータ項目のバージョンを有するノードを選択することが好ましい。この例では、V3がデータ項目の現在のバージョンである。したがってマスタ100はノード3に書込実行メッセージを送り返す。
書込実行メッセージに応答してノード3はV3を永続的記憶装置に書込み、書込確認メッセージをマスタ100に送り返す。次にマスタ100は書込通知メッセージを該当のノード(ノード1およびノード2)に送る。
永続的記憶装置に書込まれるデータ項目のバージョンが現在のバージョンであれば、データ項目を永続的記憶装置に書込むノードはさらに、ロックをグローバルモードからローカルモードに変換する。現在のバージョンが永続的記憶装置に書込まれる際に変換が実行
され得る。現在のバージョンを永続的記憶装置に書込むノードは、ノードがデータ項目に対する排他ロックを保持するという事実に基づき、ノードが現在のバージョンを書込んでいることを判断できる。この例ではV3が現在のバージョンであるため、V3を永続的記憶装置に書込んだ後、ノード3はモードをグローバルからローカルに変換する。
図4cを参照して、データ項目の現在のバージョンを保持していないノード(ノード1)が永続的記憶装置にデータ項目を書込むように要求するシナリオが示される。図4cに示すイベントの順番は、書込要求メッセージがノード3ではなくノード1から来る点を除き、図4bと同じである。
図4bに示すように、オーナベースの方式とは対照的に、役割ベースの方式ではデータ項目に対する排他ロックのオーナはやはり、ロックがグローバルモードにあるときにはマスタ100からデータ項目を書込む許可を求めなければならない。しかしながら、オーナベースの方式とは異なり、データ項目(およびこれに対する排他ロック)は、永続的記憶装置への書込動作が完了するのを待つことなく、1つのノードから別のノードへ転送され得る。
たとえば図4dは、ノード(ノード4)がデータ項目の排他的所有権を要求した点を除き図4cと同じシナリオを示している。ノード3が書込実行メッセージに応答して永続的記憶装置にV3を書込むプロセスにあっても、ノード3はデータ項目をノード4に転送できる。排他書込ロックによって、ノード4はデータ項目の修正に進んでバージョンV4を作成し得る。しかしモードはグローバルであるため、ノード4はV4を永続的記憶装置に書込むことはできない。
図4cでは、ノード3から書込確認メッセージを受取ると、マスタ100はローカルへの変換メッセージをノード4に送る。ローカルへの変換メッセージを受取るのに応答して、ノード4はモードをグローバルからローカルに変換する。モードがローカルに戻るように変えられた後、ノード4はマスタ100からの許可なしにデータ項目を永続的記憶装置に書込み、かつ永続的記憶装置からデータ項目を読出す。
代替的な実施例では、マスタ100は書込確認メッセージに応答してローカルへの変換メッセージを送らない。ローカルへの変換メッセージなしに、排他ロックのモードはノード4でグローバルに留まる。モードがグローバルであるため、ノード4がV4を永続的記憶装置に書込むことを望めば、ノード4は書込要求をマスタ100に送ることになる。書込要求メッセージに応答してマスタ100は、ローカルへの変換メッセージをノード4に送り得る。ノードがローカルに変換された後、ノード4はさらなる許可なしにV4を書込み得る。
書込通知の遅延
上述のシナリオでは、書込通知メッセージの送信は直ちに該当のノードすべてに対して行われ得る、または送信は該当のノードのうちいくつかまたはすべてに対して遅延され得ることに言及した。一実施例に従うと、永続的記憶装置への書込動作が実行されると、書込通知メッセージは直ちに、実行された書込でカバーされるPIについての書込を要求したノードに対してのみ送られる。たとえば図1でマスタ100はノード1に書込通知メッセージを直ちに送るが、ノード2には送らない。
永続的記憶装置にあるデータ項目のバージョン数はこの後、マスタから他の該当のノードへ、さまざまな技術のうちいずれか1つを用いて通信され得る。たとえば永続的記憶装置にあるデータ項目のバージョン数は、(1)新たなロック要求のためのロック付与メッセージか、または(2)データ項目の現在のバージョンが別のノードに送られる必要があ
る際におけるpingメッセージか、の一部として通信され得る。したがって他の該当のノードは、そのPIを書込または交換する必要がある場合、ローカルロックマネージャとのみ通信することでそのPIを破棄できる。
メッセージのバッチ処理
マスタと該当のノードとの間で通信されるメッセージの数を減らす別の技術は、マスタからおよびここへの書込要求メッセージおよび書込通知メッセージをバッチ処理して、より少ない、より大きなメッセージにすることでメッセージの数を減らすことを含む。たとえばノード1が3つのエントリでそのチェックポイント待ち行列を進めようと望む場合、ノード1は、永続的記憶装置に書込まれなければならないすべての3つのデータ項目(およびこれらのそれぞれのバージョン)を識別する単一の書込要求メッセージをマスタ100に送り得る。同様に、完了している永続的記憶装置への書込動作3つに対してノード1が関心を有する場合、マスタ100は、永続的記憶装置に書込まれた3つのデータ項目(およびこれらのそれぞれのバージョン)を識別する単一の書込確認メッセージをノード1に送り得る。
チェックポイント待ち行列−同じデータ項目の多数の過去イメージの管理
上述のシナリオでは、各ノードのキャッシュは各データ項目について多くとも1つのPIを有すると仮定された。現実には、データ項目についてのいくつかのバージョンが永続的記憶装置に書込まれる前に、データ項目は多数のノードを通じて何回か循環し得る。ダーティデータ項目が別のノードにping outされるたびごとにPIを作成すること、および、ノードのキャッシュ内のダーティまたはチェックポイント待ち行列において異なる位置でいくつかのPIについてエントリがあることは適切であろう。
たとえば図5は、ノードのチェックポイント待ち行列500が特定のデータ項目(データ項目5)について3つのエントリを有するシナリオを示す。具体的に、チェックポイント待ち行列は、ヘッド502および末尾504、ならびに3つのエントリ506,508,510を有し、これらはデータ項目5のバージョンV1、V6およびV8に対応する。同様に図6は、別のノードのチェックポイント待ち行列600がデータ項目5について2つのエントリを有するシナリオを示す。具体的に、エントリ606およびエントリ608は、データ項目5のバージョンV3およびV7に対応する。
説明のため、チェックポイント待ち行列500がノードA(図示せず)についてのチェックポイント待ち行列であり、チェックポイント待ち行列600がノードB(図示せず)についてのチェックポイント待ち行列であると仮定する。
データ項目のマスタは、ダーティデータ項目が別のノードに転送された後に作成される最も新しいPIのバージョン数で更新される。したがって、ノードAがデータ項目5のV1を作成し、データ項目5を別のノードに転送すると、データ項目5のマスタは更新されて、ノードAがV1を有することを示す。この後、ノードAがデータ項目5のV6を作成し、データ項目5を別のノードに転送すると、データ項目5のマスタは更新されて、ノードAがV6を有することを示す。同様に、後でノードAがデータ項目5のV8を作成し、データ項目5を別のノードに転送すると、データ項目5のマスタは更新されて、ノードAがV8を有することを示す。
しかしながら、PIはキャッシュ内のメモリを占め、これまたはより新しいバージョンが永続的記憶装置に書込まれるまで交換され得ない。したがってダーティデータ項目がキャッシュから転送されると、新たに作成されたPIは、もし存在すれば以前のPIと併合(交換)され得る。しかしながら、併合されたPIと関連付けられたチェックポイントエントリは、併合に関与した最も早いバージョンのエントリとしてダーティまたはチェック
ポイント待ち行列内の同じ位置に留まらなければならないが、それは、最初のPIが作成された際にデータ項目に対してなされた変更がデータ項目の永続的記憶装置バージョン上に反映されるまで、チェックポイントは完了したと見なされ得ないからである。さらに、ディスクへの書込動作によって併合の最後のバージョンがカバーされるまで、併合したエントリはチェックポイント待ち行列からなくされ得ない。
たとえば図7は、チェックポイント待ち行列500を示すが、ここでデータ項目5のバージョンV1、V6およびV8についてのエントリ506,508,510は併合されて単一のエントリ702となっている。単一のエントリ702はエントリ506で占められていた位置にあるが、それはエントリ506が併合に関与した最も早いエントリであったからである。
併合エントリの部分的カバー
データ項目のPIが併合される場合、データ項目の或るバージョンが異なるノードで永続的記憶装置に書込まれる際、バージョンは、併合したPIに反映される変更のうちいくつかをカバーするが、すべてをカバーしないことがあり得る。たとえばノードBがデータ項目5のV7を永続的記憶装置に書込む場合、併合したエントリ702のV1およびV6と関連付けられた変更のみがカバーされる。V8と関連付けられた変更はカバーされない。
永続的記憶装置バージョンが、併合したPIに入っている変更を完全にカバーする場合、PIについてのエントリは破棄可能であり、チェックポイントはPIにおいてなされた最も早い変更を過ぎて進められ得る。たとえばデータ項目5のV9が永続的記憶装置に書込まれた場合、併合したエントリ702は破棄可能であろう。
一方、永続的記憶装置の書込が併合PIの変更のうちいくつかをカバーするのみである場合、併合PIについてのエントリは破棄できない。たとえばV7の永続的記憶装置への書込は、併合されていないエントリ506および508をチェックポイント待ち行列500からなくすことを許しても、併合したエントリ702をチェックポイント待ち行列500からなくすことは許さない。
部分的にカバーされた併合PIについてのエントリが破棄され得ないとしても、エントリはダーティまたはチェックポイント待ち行列内で、永続的記憶装置に書込まれたバージョンの直後のバージョンについてのエントリの位置に動かされ得る。たとえばデータ項目5のV7が永続的記憶装置に書込まれた後、エントリ702は、データ項目5のV8についてのエントリ(すなわちエントリ510)があったチェックポイント待ち行列500内の位置へ移され得る。これにより、併合PIについてのエントリによってブロックされることなく、ディスクへの書込バージョンによってカバーされない最初のエントリまでチェックポイントが進行できる。
部分的にカバーされた併合エントリの作成の回避
或るシステムでは、ダーティまたはチェックポイント待ち行列はリンクされたリストとして実現される。リンクされたリストを走査し、待ち行列内の正しい位置に併合エントリを挿入することは、CPU使用に関して不経済となるおそれがある。これを容易するためにメモリ内インデックスが実現可能であるが、これによってデータ項目をチェックポイント待ち行列にリンクする際に余分なオーバーヘッドが生じてしまうであろう。
一実施例に従うと、部分的にカバーされた併合エントリを動かすことに関わるオーバーヘッドは、部分的にカバーされた、動かされたエントリの作成を回避することで回避される。具体的に、併合動作によって、部分的にカバーされることになる併合エントリが作成
されそうな場合には、併合動作は実行されない。
一実施例に従うと、(1)データ項目のバージョンが永続的記憶装置に書込まれており、かつ(2)データ項目がノード間で転送されるときに、マスタは、永続的記憶装置に現在書込まれているデータ項目のバージョン数(「書込中」バージョン)を、データ項目が転送されているノード(「受取る側の」ノード)に通信する。こうして受取る側のノードは、書込中バージョンと同じ、またはこれよりも早いデータ項目のいかなるバージョンも、書込中バージョンより後のデータ項目のいかなるバージョンとも併合すべきでないことを知る。
再び図5および図6を参照して、ノードAがデータ項目5のV6を書込むプロセスにあると仮定する。書込動作が完了する前に、ノードAはデータ項目5をノードBに送り、ノードBはデータ項目5についての受取ったバージョンを修正し、データ項目5のV7を作成する。マスタは、マスタがpingをノードBに送る際にデータ項目5のV6が永続的記憶装置に書込まれたことをノードBに知らせる。したがってノードBはデータ項目5のV7をデータ項目5のV3と併合しないが、それは、結果としての併合データ項目がV6の書込によって部分的にしかカバーされないであろうからである。V6の書込はV3を完全にカバーするので、V6の書込が完了した後、ノードBはV3を破棄し、エントリ606を待ち行列600からなくすことができる。
したがって、永続的記憶装置への書込動作が進行中である間、書込中バージョンと少なくとも同じだけ古いバージョンと関連付けられたエントリおよびPIが互いに併合され、書込中バージョンよりも新しいバージョンと関連付けられたエントリおよびPIが互いに併合され得る。しかしながら、書込中バージョンと少なくとも同じだけ古いバージョンと関連付けられたPIは、書込中バージョンよりも新しいバージョンと関連付けられたPIと併合されるべきではない。
最も新しいバージョンのホルダが永続的記憶装置への書込動作を常に実行するシステムでこの技術を用いれば、永続的記憶装置への書込動作によって併合PIが部分的にカバーされるということが確実になくなる。具体的に、永続的記憶装置への書込動作を受けているデータ項目を送るためにノードがpingされると、これはデータ項目の新しいバージョンをより古いバージョンと併合しないであろう。データ項目が永続的記憶装置への書込動作を受けていなければ、受取ったデータ項目は最も早いバージョンであり、この後他のノードのいずれも、このデータ項目のより早いバージョンを永続的記憶装置に書込むように頼まれることはないであろう。
部分的な変更をカバーする書込を回避する代替的な手法は、既存のチェックポイント待ち行列エントリと併合するのではなく、新たなチェックポイント待ち行列エントリをいつ作成すべきかを発見的に(heuristically)判定することである。たとえば、データ項目
3のバージョンV7についてチェックポイント待ち行列エントリが存在すると仮定する。データ項目3の新たなバージョンについて新たなエントリを作成すべきか、または既存のエントリと新たなバージョンを併合すべきかを判断することが必要であり得る。併合すべきかどうかの決定はたとえば、(1)リドゥログにある最も新しい変更と、(2)ダーティまたはチェックポイント待ち行列のヘッドでのデータ項目になされた最も早い変更とに関して、既存のエントリになされた最初の変更がどれだけ古いかに基づき、発見的に決定され得る。この発見的手法では、既存のエントリと関連付けられたPIがかなりすぐに書込まれる(または書込によってカバーされる)であろう可能性が推定され、ノードはPI内の最初の変更を過ぎてチェックポイントを拡張できる。
たとえば、リドゥログ内の最も新しい変更がV7よりもずっと遅い時間に対応し、かつ
チェックポイント待ち行列のヘッドにあるデータ項目がV7に近い時間と関連付けられていれば、既存のエントリと関連付けられたPIがもうすぐ書込まれる(または書込によりカバーされる)であろう可能性は高く、したがって新たなバージョンについて別個のエントリを設けるべきである。逆に、リドゥログにおける最も新しい変更がV7に近い時間に対応し、かつチェックポイント待ち行列のヘッドでのデータ項目がV7よりもずっと早い時間に対応するのであれば、既存のエントリと関連付けられたPIがもうすぐ書込まれる(または書込でカバーされる)可能性は低い。したがって新たなバージョンを既存のエントリに併合すべきである。
単一ノード故障チェックポイント待ち行列
上述のように、チェックポイント待ち行列のヘッドにあるエントリは、故障後に回復処理が始まらなければならないリドゥログ内の位置を判断する。正確な回復のためには、クラスタ内のノードがいくつ故障に関与していたかに拘わらず、チェックポイント待ち行列のヘッドでのエントリに対応する場所からリドゥログの処理を始めることが安全である。
一実施例に従うと、各ノードについての2つのチェックポイント、すなわち多故障チェックポイントおよび単一故障チェックポイントを追跡し続けるためのチェックポイント機構が設けられる。多故障チェックポイントは、ノードが関与した多ノード故障の後でノードのリドゥの処理を始める位置を示す。単一故障チェックポイントは、ノードの単一ノード故障の後でノードのリドゥログの処理を始める位置を示す。
以下に記載するように、多故障チェックポイント待ち行列からエントリをなくすことを許さない状況下で、単一故障チェックポイント待ち行列からエントリをなくすことができる。したがって典型的に、単一故障チェックポイントは多故障チェックポイントよりもさらに進められるであろう。単一故障チェックポイントはさらに進められるため、単一故障チェックポイントを維持すれば、その結果として、単一ノード故障から回復するために実行されなければならない作業が少なくなる。
チェックポイントを進めることに関して、ノードがダーティデータ項目を別のノードに転送する際にノードの多ノード故障チェックポイントは変更しない。データ項目はダーティであったので、多故障チェックポイント待ち行列にはデータ項目についてのエントリがある。このエントリは、ダーティデータ項目が転送された後も多故障チェックポイント待ち行列に留まる。
対照的に、ダーティデータ項目と関連付けられたエントリは、ダーティデータ項目が別のノードに転送される際に単一故障チェックポイント待ち行列からなくされる。転送されたダーティ項目についてのエントリを単一故障チェックポイント待ち行列からなくすことが安全であるが、それは、転送する側のノードのみが故障した場合、ダーティデータ項目になされた変更が失われないであろうからである。転送ノードのみの故障への応答として、転送ノードによってなされた変更は、受信ノードに送られたデータ項目のバージョンに反映される。これらの状況下で、変更を永続的記憶装置に確実に保存する責任がデータ項目とともに転送される。こうして、受信ノードがデータ項目に対していかなるさらなる修正も実行しない場合でも、受信ノードは(1)転送ノードによりなされた変更(または変更についてのリドゥ)を確実に永続的記憶装置に書込むこと、または(2)ダーティデータ項目(および責任)をさらに別のノードに転送することのうちいずれかを行なわなければならない。
ダーティデータ項目の別のノードへの転送により、転送する側のノードは、転送したデータ項目についてのエントリを、その単一ノード故障チェックポイント待ち行列からなくすことが可能となる。したがって、単一ノード故障チェックポイント待ち行列を進めたい
と望むノードは、単一ノード故障チェックポイント待ち行列のヘッドにあるエントリに対応するダーティデータ項目を、単に別のノードに転送できる。ダーティデータ項目を受取るノードがデータ項目を要求したことがなかったとしても、ダーティデータ項目の転送はこの目的のために実行され得る。
これら2つのチェックポイントはさまざまなやり方で実現可能であり、この発明はいかなる特定の実現例にも限定されない。たとえば、単一故障チェックポイント待ち行列および多故障チェックポイント待ち行列は、2つの全く別個の待ち行列として維持され得る。これに代えて、単一故障チェックポイント待ち行列および多故障チェックポイント待ち行列の両方として用いられる、エントリの「組合わされた」単一の待ち行列を維持してもよい。組合わされた待ち行列を用いる場合、組合わされた待ち行列内で、単一故障チェックポイント待ち行列のヘッドにあるのはどのエントリかを識別するためにポインタを用いることがある。エントリは、多故障チェックポイント待ち行列からなくされる場合、組合わされた待ち行列からなくされる。単一故障チェックポイント待ち行列からなくされる場合、エントリはこれに従って印付けられるが、組合わされた待ち行列からなくされない。
ビンベースのバッチ処理
ビンベースのバッチ方式に従うと、2つの別個のチェックポイント待ち行列、すなわちグローバルにダーティなチェックポイント待ち行列と、ローカルにダーティなチェックポイント待ち行列とがノード内に維持される。ノードのローカルにダーティなチェックポイント待ち行列は、このノードにおいてのみダーティであるデータ項目についてのエントリを含む。ノードのグローバルにダーティなチェックポイント待ち行列は、他のノードでもダーティ化されたデータ項目についてのエントリを含む。
一実施例に従うと、グローバルにダーティなチェックポイント待ち行列にあるエントリはグループ化されて「ビン(bin)」となる。各々のビンは或る時間範囲と関連付けられ
、この時間範囲内で最初にダーティ化されたデータ項目のバージョンについてのエントリが入っている。したがって、データ項目が時間T7,T9,T12でダーティ化された際に作成されたデータ項目のバージョンに、併合エントリが対応する場合、この併合エントリは、T7を含む時間範囲に対応するビンに属することになるが、それはT7が、このエントリでカバーされる「最初にダーティ化された時間」だからである。
たとえば図8は、分割されてビン812,814,816となったノードXのグローバルにダーティなチェックポイント待ち行列800を示す。ビン812は時間範囲T15〜T25と関連付けられ、最初にダーティ化された時間がT15とT25との間であるグローバルにダーティなデータ項目についてのエントリが入っている。ビン814は時間範囲T16〜T35と関連付けられ、最初にダーティ化された時間がT16とT35との間であるグローバルにダーティなデータ項目についてのエントリが入っている。ビン816はT36〜T45の時間範囲と関連付けられ、最初にダーティ化された時間がT36とT45との間であるグローバルにダーティなデータ項目についてのエントリが入っている。
一実施例に従うと、各ビンには或るバージョン数が割当てられる。ビンのバージョン数はたとえば、このビンにある任意のエントリについての最初にダーティ化された時間値であり得る。たとえばビン812は3つのエントリ805,806,807を含み、これらはそれぞれデータ項目1のV1、データ項目5のV1、およびデータ項目8のV3と関連付けられる。データ項目1のV1、データ項目5のV1、およびデータ項目8のV3は最初にそれぞれ時間T17、T19およびT23でダーティ化されたと仮定する。このシナリオでは、ビン812内の任意のPIの最も高い最初にダーティ化された時間はT23である。したがってビン812にはバージョン数T23が割当てられることになる。
一実施例に従うと、書込要求メッセージの数は、永続的記憶装置書込サブシステムが書込要求をマスタに対して、エントリごとでなくビンごとに発行することで減少させられる。たとえばチェックポイント待ち行列800を進めるために、ノードXは、ビン812内のすべてのエントリに対応するデータ項目の書込のために単一の書込要求メッセージをマスタに送る。書込要求メッセージは、(ビン内の特定のエントリでなく)単にバージョン数T23によってビン812を識別できる。書込要求に応答してマスタは、最初にダーティ化された時間が書込要求の特定するバージョン数以下であるPIを有するデータ項目すべての現在のロックホルダに対し、書込実行メッセージを送る。この例でマスタは、最初にダーティ化された時間がT23以下であるPIを有するデータ項目すべての現在のロックホルダに対し、書込実行メッセージを送る。
最も早い変更がT23にある、またはこれよりも前であるダーティデータ項目すべてを、各ノードがディスクに書込むことを終了すると、ノードは書込確認メッセージをマスタに送る。書込実行メッセージが送られたノードすべてからマスタが書込確認メッセージを受取ると、マスタは書込通知メッセージをすべてのノードに送り、要求された書込が完了したことを知らせる。これに応答して、あらゆるノードは対応するビンを空にできる。たとえば、最初にダーティ化された時間がT23にある、またはこれよりも前であるすべてのデータ項目がディスクに書込まれたことをノードXが知らされると、ノードXはビン812を空にし得る。ビン812を空にするには、(1)T23の後になされた変更をカバーしないエントリすべてを破棄し、(2)T23の後になされた変更をカバーするビン812内のエントリを他のビンに移すことがあり得る。たとえばエントリ806が、T19およびT40でなされた変更をカバーした併合エントリであった場合、ビン812が空にされる際にエントリ806はビン814に動かされる。
一実施例に従うと、マスタは(1)PIの最初にダーティ化された時間と、(2)PIに対する最後の変更と関連付けられたバージョン数(「最後にダーティ化された時間」)との両方を追跡する。たとえば併合エントリ702について、マスタは併合エントリがバージョンV8(併合エントリでの最新のバージョン)およびバージョンV1(併合エントリでの最も早いバージョン)についてであることを知ることになる。このような実施例では、ノードはマスタからビンのバージョン数とともに書込通知を受取ると、最後にダーティ化された時間がビンバージョン数以下であるビンにあるすべてのエントリを破棄し、(2)最後にダーティ化された時間がビンバージョン数よりも大きいビンにあるすべてのエントリを、待ち行列内の次のビンへと動かすことによって、ビンを空にする。この手法では、ダーティデータ項目が別のノードに転送されたため新たなPIが作成されると、この新たなPIについてのエントリは常に、もしあれば、より古いPIのビン内のより古いPIについてのエントリと交替できるが、それは、PI内に入っている変更を部分的にカバーする書込がある際に、結果の併合PIについてのエントリがその適当なビンへと動かされ得るからである。
ビンベースのバッチ処理は一般に、分散ロックマネージャよりも、グローバルマスタを用いるマルチノードシステムに対してより好適である。現在のロックホルダへのメッセージは容易にバッチ処理可能であるが、なぜならこれらは同時に生成されるからである。本質的に、永続的記憶装置にあるデータ項目のバージョン数と、書込まれているプロセスにあるデータ項目のバージョン数とを追跡する代わりに、マスタはグローバルにダーティなデータ項目すべてについての永続的記憶装置バージョン数を追跡するが、これはチェックポイントレコードがノード内のダーティデータ項目すべてについての変更を追跡するのとよく似ている。
回復
マルチノードシステム内で実行されるディスクへの書込動作を追跡し続けることは重要
である。このような情報はたとえば、チェックポイント待ち行列からなくされ得るのはどのエントリかを判断、およびデータ項目の過去イメージがディスクに書込可能および/またはキャッシュから割当解除(「フラッシュ(flush)」)可能であるかどうかを判断す
るのに極めて重要である。具体的には、データ項目のより後のバージョンがディスクに既に書込まれていれば、データ項目のバージョンはディスクに書込まれてはならない。さらに、データ項目の最も新しいバージョンがディスクに書込まれた場合、データ項目のPIバージョンはキャッシュからフラッシュされ得る。
或る状況下では、ディスクへの書込動作の実行が成功したかどうかは明らかではないこともある。たとえば、データ項目をディスクに書込むノードが書込動作中に故障した場合、故障が起こったのは書込動作が無事に完了する前か、またはその後かは明らかでないことがある。同様に、特定のデータ項目のマスタが常駐するノードが故障した場合、この故障の結果としてデータ項目についての情報が失われているおそれがある。このような情報には、ディスクに書込まれるべきデータ項目の最後のバージョンを示す情報が含まれ得る。
ディスクへの書込動作の実行が成功しているかどうかが明らかでない状況が生じても、この問題は、ディスクにあるデータ項目を走査してそのバージョンを判定することで解決され得る。しかしながら、回復動作の一部としてのディスク走査はかなりの量の時間およびリソースを消費し、データが利用可能となるのを過度に遅延させるおそれがある。
この発明の一局面に従うと、ディスク上のデータ項目を走査する必要性は、(1)データ項目の特定のバージョンがディスクに書込まれたかどうかが明らかでなく、かつ、特定のバージョンがディスクに書込まれたことを回復情報(たとえばリドゥログ)が示していれば、特定のデータ項目のディスクへの書込が成功したと回復プロセスに仮定させ、(2)このデータ項目についての以前にキャッシュされたバージョンすべてを「疑わしい(suspect)」として印付けることによって回避される。回復動作後、システムは逆の仮定の
下で進行し得る。具体的に、データ項目の特定のバージョンがディスクに書込まれなかったという仮定の下でシステムが進行する。しかしながら、データ項目の疑わしいバージョンをディスクに書込むのに先立ち、システムはディスクに常駐するデータ項目のバージョンを読出す。データ項目のディスク上のバージョンがより新しければ、ディスクへの書込動作は実行されず、マスタには、どのバージョンがディスクにあるかが知らされる。任意に、マスタは次に書込通知メッセージを、ディスクにあるバージョンでカバーされるバージョンを保持するノードすべてに送る。一方、データ項目は回復される。
同様に、ノードがデータ項目の現在のバージョンを要求すると、要求しているノードにはデータ項目の疑わしいバージョンを供給することはできないが、それはデータ項目のより新しいバージョンがディスクに入っている可能性があるからである。その代わりに、データ項目のディスク上のバージョンをディスクから読出す。ディスクから読出されるデータ項目のバージョンが最も新しいバージョンであれば、このバージョンが要求しているノードに与えられる。データ項目のディスク上のバージョンが最も新しいバージョンでなければ、故障したノードのリドゥログに維持された回復情報に基づいて、最も新しいバージョンが作成される。
過去イメージを維持しないチェックポイント管理
上述のシナリオの多くで、各ノードはPIがディスクへの書込動作でカバーされるまでPIを維持するように構成されると仮定した。しかしながら、この発明の一実施例に従うと、このようなPIは維持されない。
具体的に各ノードは、グローバルにダーティなチェックポイント待ち行列およびローカ
ルにダーティなチェックポイント待ち行列を維持する。ローカルにダーティなチェックポイント待ち行列内のエントリと関連付けられたダーティデータ項目は、ディスクへの書込動作でカバーされるまで保持される。しかしながら、グローバルにダーティなチェックポイント待ち行列内のエントリと関連付けられたPIはこの態様で維持される必要はない。
この実施例では、ディスクへの書込動作を実行する権利は、上述のようにデータ項目に対して保持されるロックのモードと結び付けられる。具体的に或るノードは、(1)このノードがデータ項目についての排他ロックを保持する場合、または(2)データ項目についての排他ロックを保持するノードがなく、このノードが排他ロックを保持する一番最近のノードであった場合、データ項目についてのディスクへの書込動作を実行する権利を有する。
ノードはローカルにダーティなデータ項目すべてについて排他ロックを有するので、ノードは、マスタの介入なしに、ローカルにダーティな待ち行列と関連付けられたデータ項目をディスクに書込むことができるであろう。ノードはさらに、グローバルにダーティな待ち行列におけるエントリと関連付けられたデータ項目について排他ロックを有する、または一番最近の排他ロックを保持したこともあり得るため、マスタの介入なしにこのデータ項目をディスクに書込むことができることがある。
ダーティデータ項目がキャッシュからping outされる際にノードはPIを維持しないため、特別の回復処理が必要となる。具体的には、データ項目転送中に、またはノード故障のためにデータ項目の現在のバージョンが失われると、システムは、すべてのノードの併合リドゥログからの変更を、永続的記憶装置にあるデータ項目に適用することによって、データ項目の現在のバージョンを再構成する。回復処理が始まらなければならない各リドゥログ内の場所は、ノードと関連付けられたチェックポイントによって判定される。ノード内のチェックポイントは、チェックポイントに先立ちノードでなされた変更が入っているデータ項目のバージョンが永続的記憶装置にない限り、完了したと見なされ得ない。したがってダーティデータ項目が別のノードからpingoutされると、任意のチェックポイン
ト待ち行列内にデータ項目の過去イメージを維持する代わりに、データ項目自体を破棄でき、データ項目ヘッダまたは制御ブロックはグローバルにダーティな待ち行列内にリンクされる。
グローバルにダーティな待ち行列は、エントリと関連付けられた最初にダーティ化された時間によって順序付けられ、ローカルにダーティな待ち行列と類似するが、ただし、エントリの各々について維持され関連付けられた実データ項目はない(すなわちデータ項目の内容はノードのキャッシュに存在しない)。ノード内のチェックポイントは、ローカルにダーティな待ち行列のヘッドにおけるエントリの最初にダーティ化された時間と、グローバルにダーティな待ち行列のヘッドにおけるエントリの最初にダーティ化された時間とのうち低い方となる。
ノードは、そのチェックポイントを進めたいと欲すると、マスタの介入なしにローカルにダーティな待ち行列内のデータ項目を書込む(なぜなら2つのノードが同時に同じデータ項目を書込む可能性はないからである)、または書込要求をマスタに送り、グローバルにダーティな待ち行列内のデータ項目ヘッダのより現在のバージョンに対応するオーナノードにあるデータ項目を書出すことができる。
これに代わる実施例に従うと、2つのチェックポイントレコードが各ノード(各待ち行列に1つずつ)で記憶される。1番目のチェックポイントレコードは時間TXを示すが、ここでTXに先立ちノードのキャッシュ内で現在ダーティであるデータ項目になされた変更すべては、永続的記憶装置にあるデータ項目のバージョンに記録されている。2番目の
チェックポイントレコードは、このノードでなされた最初の変更のバージョン数と、このノードにおいて1回ダーティ化されたが、その後でping outされて、永続的記憶装置に書込まれていないデータ項目のリストとからなる。一旦pingされるとキャッシュはダーティデータ項目を追跡できなくなるが、一方でマスタにおいてロックをなおオープンのままにしておく(すなわちロックは書込通知があるまでクローズにされない)。
ノードで故障が起こると、故障したノードでのリドゥログを走査するための開始位置は、(1)1番目のチェックポイントレコード(またはローカルチェックポイントレコード)により判定されるログ内の位置と、(2)2番目のチェックポイントレコードでのデータ項目のリストに対してなされた最も早い変更によって判定されるログ内の位置(これはグローバルチェックポイントレコードの、この特定のノードの部分として見なされ得る)とのうち、より少ない方を判定することで計算される。
回復中、ノードのグローバルチェックポイントレコードとノードのローカルチェックポイントレコードとの間(グローバルチェックポイントレコードがローカルチェックポイントレコードより後であると仮定して)のログ部分についての潜在的なリドゥのために考慮される必要があるのは、グローバルチェックポイントレコードにあるデータ項目に対応するログレコードのみである。一旦ローカルチェックポイントレコードに達すると、ログの終端に達するまで、すべてのログレコードが潜在的なリドゥのために考慮される必要がある。
この手法は、2番目のチェックポイントレコードにおけるデータ項目のリストを、(システム全体におけるダーティデータ項目すべてではなく)このノードで以前にダーティ化されたデータ項目のみに制限する点で、先行技術の方式よりも優れている。第2に、各ノードのグローバルチェックポイントレコードは他のノードとは独立に書込可能である(すなわちグローバルマスタまたはGLMチェックポイントを調整する必要がない)。最後に、回復中に走査される必要がある各ノードのリドゥログの部分は常により短いが、それはあらゆるノードについてのリドゥログが、システム全体で以前に書込まれていない変更から走査される必要がないからである。
さらに、グローバルキャッシュが存在する先行技術の永続的記憶装置書込プロトコルは、クロックからの値がログシーケンス数(LSN)として用いられる同期グローバルクロックへのアクセスを仮定している。ここに記載の技術では、同期グローバルクロックへのアクセスは必要でない。さらに先行技術では、クラスタ内のダーティデータ項目の回復シーケンス数およびロック首尾一貫性を維持するグローバルマスタ(GLM)が必要である。加えて先行技術は、マスタがいくつかのノードにわたって分散されるシステム(DLM)に容易に拡張できない。
ハードウェア概要
図9は、この発明の実施例が実現され得るコンピュータシステム900を例示したデータ項目の図である。コンピュータシステム900は、情報の通信を行なうためのバス902または他の通信メカニズム、および、情報を処理するための、バス902に結合されるプロセッサ904を含む。コンピュータシステム900はまた、プロセッサ904によって実行されるべき情報および命令の記憶のための、バス902に結合されるランダムアクセスメモリ(RAM)または他の動的記憶装置等のメインメモリ906を含む。メインメモリ906はまた、プロセッサ904によって実行されるべき命令の実行中に一時的数値変数または他の中間情報を記憶するために用いられ得る。コンピュータシステム900はさらに、プロセッサ904のための命令および静的情報を記憶するための、バス902に結合される読出専用メモリ(ROM)908または他の静的記憶装置を含む。磁気永続的記憶装置または光学永続的記憶装置等の記憶装置910が、設けられ、情報および命令を
記憶するためにバス902に結合される。
コンピュータシステム900は、コンピュータユーザに情報を表示するための、陰極線管(CRT)等のディスプレイ912にバス902を介して結合され得る。英数字および他のキーを含む入力装置914がバス902に結合されて、情報およびコマンド選択をプロセッサ904に伝達する。別の種類のユーザ入力装置は、方向情報およびコマンド選択をプロセッサ904に伝達し、さらにはディスプレイ912上でのカーソルの動きを制御するための、マウス、トラックボール、またはカーソル方向キー等のカーソル制御916である。この入力装置は、典型的には、2つの軸、第1の軸(たとえば、x)と第2の軸(たとえば、y)とにおいて2自由度を有し、これによって、装置が平面で位置を特定することが可能となる。
この発明は、ここで説明される技術を実現するためのコンピュータシステム900の用途に関連する。この発明の1つの実施例に従うと、これらの技術は、メインメモリ906内に含まれる1つ以上の命令の1つ以上のシーケンスをプロセッサ904が実行することに応答して、コンピュータシステム900によって行なわれる。このような命令は、記憶装置910等の別のコンピュータ読出可能な媒体からメインメモリ906へと読出され得る。メインメモリ906内に含まれる命令シーケンスの実行によって、プロセッサ904がここで説明されるプロセスステップを実行させられる。代替的な実施例では、ソフトウェア命令の代わりに、またはソフトウェア命令と組合せてハードワイヤード回路を用いてこの発明を実現することもできる。したがって、この発明の実施例は、ハードウェア回路とソフトウェアとの特定のいずれかの組合せに限定されない。
ここで用いられるような用語「コンピュータ読出可能な媒体」は、実行のために命令をプロセッサ904に提供するいずれかの媒体を指す。このような媒体は、不揮発性媒体、揮発性媒体、および送信媒体を含むがそれらに限定されない多くの形をとり得る。不揮発性媒体は、たとえば、記憶装置910等の光学永続的記憶装置または磁気永続的記憶装置を含む。揮発性媒体は、メインメモリ906等のダイナミックメモリを含む。送信媒体は、バス902を含むワイヤを含んだ、同軸ケーブル、銅ワイヤ、および光ファイバを含む。送信媒体はまた、電波および赤外線データ通信中に生成されるような音波または光波の形をとり得る。
コンピュータ読出可能な媒体の一般的な形は、たとえば、フロッピー(R)ディスク、フレキシブルディスク、ハードディスク、磁気テープ、または他のいずれかの磁気媒体、CD−ROM、他のいずれかの光学媒体、パンチカード、ペーパーテープ、ホールパターンを備えた他のいずれかの物理的な媒体、RAM、PROM、EPROM、フラッシュEPROM、他のいずれかのメモリチップまたはカートリッジ、以下で説明されるような搬送波、またはコンピュータがそこから読出可能な他のいずれかの媒体を含む。
種々の形のコンピュータ読出可能な媒体は、実行のために1つ以上の命令の1つ以上のシーケンスをプロセッサ904に搬送することに関与し得る。たとえば、命令は、最初にリモートコンピュータの磁気ディスク上で搬送され得る。リモートコンピュータは、命令をそのダイナミックメモリにロードし、モデムを用いて電話線上で命令を送信し得る。コンピュータシステム900にとってローカルなモデムは、電話線上のデータを受信し、赤外線トランスミッタを用いてデータを赤外線信号に変換し得る。赤外検出器が、赤外線信号で搬送されたデータを受信し得、適切な回路がデータをバス902上に置き得る。バス902は、データをメインメモリ906へと搬送し、ここから、プロセッサ904は命令を取出し、実行する。メインメモリ906が受取る命令は、任意で、プロセッサ904による実行の前に、またはその後に、記憶装置910上に記憶され得る。
コンピュータシステム900はまた、バス902に結合される通信インターフェイス918を含む。通信インターフェイス918は、ローカルネットワーク922に接続されるネットワークリンク920に対する双方向データ通信結合を提供する。たとえば、通信インターフェイス918は、統合サービスデジタル通信網(ISDN)カードまたはモデムであってデータ通信接続を対応する種類の電話線に提供し得る。別の例として、通信インターフェイス918は、ローカルエリアネットワーク(LAN)カードであってデータ通信接続を適合したLANに提供し得る。ワイヤレスリンクも実現され得る。このようないずれの実現例でも、通信インターフェイス918は、種々の種類の情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号、または光信号を送受信する。
ネットワークリンク920は、典型的には、1つ以上のネットワークを通して他のデータ装置にデータ通信を提供する。たとえば、ネットワークリンク920は、ローカルネットワーク922を通してホストコンピュータ924へと、またはインターネットサービスプロバイダ(ISP)926によって動作されるデータ装置へと、接続を提供し得る。ISP926は、次に、現在「インターネット」928と通例呼ばれるワールドワイドパケットデータ通信ネットワークを通してデータ通信サービスを提供する。ローカルネットワーク922およびインターネット928の両方は、デジタルデータストリームを搬送する電気信号、電磁信号、または光信号を用いる。コンピュータシステム900へと、およびコンピュータシステム900からデジタルデータを搬送する、ネットワークリンク920上にあり通信インターフェイス918を通る信号および種々のネットワークを通る信号は、情報を運ぶ搬送波の例示的な形である。
コンピュータシステム900は、ネットワーク、ネットワークリンク920、および通信インターフェイス918を通して、プログラムコードを含むメッセージを送信し、プログラムコードを含むデータを受信し得る。インターネットの例では、サーバ930は、インターネット928、ISP926、ローカルネットワーク922、および通信インターフェイス918を通して、アプリケーションプログラムのための要求されたコードを送り得る。
受信されたコードは、それが受信される時にプロセッサ904によって実行され得、および/または、後の実行のために記憶装置910に、または他の不揮発性記憶装置に記憶され得る。この様態で、コンピュータシステム900は、搬送波の形のアプリケーションコードを得ることができる。上の明細書では、この発明は、その具体的な実施例を参照しながら説明された。しかし、この発明のより広い思想および範囲から逸脱することなく、この発明に対して種々の変形および変更が可能であることは明らかであろう。したがって、明細書および図面は、限定的な意味ではなく例示的な意味で理解されるべきである。
この発明の実施例に従った直接書込方式においてどのようにディスクへの書込動作が調整されるのかを例示するブロック図である。 この発明の実施例に従った間接書込方式においてどのようにディスクへの書込動作が調整されるのかを例示するブロック図である。 グローバルダーティフラグが偽である場合にオーナーベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。 グローバルダーティフラグが真である場合にオーナーベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。 書込要求がオーナーからではない場合にオーナーベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。 モードがローカルである場合に役割ベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。 モードがグローバルである場合に役割ベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。 要求が排他ロックホルダからでない場合に役割ベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。 転送が書込動作中に行なわれる場合に役割ベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。 チェックポイント待ち行列を例示するブロック図である。 チェックポイント待ち行列を例示するブロック図である。 併合されたエントリを備えるチェックポイント待ち行列を例示するブロック図である。 エントリがバッチされてビンになる、チェックポイント待ち行列を例示するブロック図である。 この発明の実施例が実現され得るコンピュータシステムを例示するブロック図である。

Claims (9)

  1. 永続的記憶装置へのダーティデータ項目の書込を前記永続的記憶装置に接続されたプロセッサによって調整するための方法であって
    第1のノードのキャッシュに存在するダーティデータ項目に対応するエントリであって待ち行列に入れられたエントリに対応するダーティデータ項目を前記第1のノードから他のノードに転送することを前記他のノードが要求した時に応じて、前記待ち行列に入れられたエントリを第1の待ち行列から第2の待ち行列へ動かすステップを含み前記第1の待ち行列と前記第2の待ち行列とは、前記第1のノード内で保持されており、
    どのダーティデータ項目を永続的記憶装置へ書込むかを選択するステップとを含み前記選択するステップは、さらに、前記第2の待ち行列におけるエントリに対応するダーティデータ項目に優先度を与えるステップを含む、方法。
  2. エントリを動かすステップは、前記第1のノードによって受けられたメッセージに応答してエントリを前記第1の待ち行列から前記第2の待ち行列へ動かすステップを含み、前記メッセージは、別のノードが前記エントリに対応する前記ダーティデータ項目を要求したことを示す、請求項1に記載の方法。
  3. 永続的記憶装置へのダーティデータ項目の書込を前記永続的記憶装置に接続されたプロセッサによって調整するための方法であって、
    前記ダーティデータ項目の各々について強制書込カウントをロードするステップと、
    ダーティデータ項目が1つのノードによって、ダーティデータ項目を別のノードへ転送するために永続的記憶装置に書込まれるたびに、ダーティデータ項目の強制書込カウントを増分するステップと、
    ダーティデータ項目に関連する書込カウントに基づいて、どのダーティデータ項目を永続的記憶装置に書込むかを選択するステップとを含む、方法。
  4. 或るしきい値を上回る強制書込カウントを有するダーティデータ項目を特定の待ち行列に記憶させるステップと、
    永続的記憶装置に書込むダーティデータ項目を選択する場合に、前記特定の待ち行列に記憶されたダーティデータ項目に優先度を与えるステップとをさらに含む、請求項3に記載の方法。
  5. 求項1からのいずれかに記載の方法をコンピュータに行なわせるためのプログラム格納した、コンピュータ読出可能な媒体。
  6. 永続的記憶装置へのダーティデータ項目の書込を調整するための装置であって、
    第1のノードのキャッシュに存在するダーティデータ項目に対応するエントリであって待ち行列に入れられたエントリに対応するダーティデータ項目を前記第1のノードから他のノードに転送することを前記他のノードが要求した時に応じて、前記待ち行列に入れられたエントリを第1の待ち行列から第2の待ち行列へ動かす手段を含み、前記第1の待ち行列と前記第2の待ち行列とは、前記第1のノード内で保持されており、
    どのダーティデータ項目を永続的記憶装置へ書込むかを選択する選択手段とを含み、前記選択手段は、前記第2の待ち行列におけるエントリに対応するデータ項目に優先度を与える手段を含む、装置。
  7. 前記移動手段は、前記第1のノードによって受けられたメッセージに応答してエントリを前記第1の待ち行列から前記第2の待ち行列へ動かし、前記メッセージは、別のノードが前記エントリに対応するデータ項目を要求したことを示す、請求項6に記載の装置。
  8. 永続的記憶装置へのダーティデータ項目の書込を調整するための装置であって、
    前記ダーティデータ項目の各々について強制書込カウントを維持する手段と、
    ダーティデータ項目が1つのノードによって、ダーティデータ項目を別のノードへ転送するために永続的記憶装置に書込まれるたびに、ダーティデータ項目の強制書込カウントを増分する手段と、
    ダーティデータ項目に関連する書込カウントに基づいて、どのダーティデータ項目を永続的記憶装置に書込むかを選択する手段とを含む、装置。
  9. 或るしきい値を上回る強制書込カウントを有するダーティデータ項目を特定の待ち行列に格納する手段と、
    永続的記憶装置に書込むダーティデータ項目を選択する場合に、前記特定の待ち行列に格納されたダーティデータ項目に優先度を与える手段とをさらに含む、請求項8に記載の装置。
JP2002572008A 2001-03-07 2002-03-07 永続的記憶装置へのダーティデータ項目の書込を調整するための方法、当該方法をコンピュータに行なわせるためのプログラムを格納したコンピュータ読出可能な媒体、および、永続的記憶装置へのダーティデータ項目の書込を調整するための装置 Expired - Lifetime JP4242155B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US27427001P 2001-03-07 2001-03-07
US10/092,047 US7065540B2 (en) 1998-11-24 2002-03-04 Managing checkpoint queues in a multiple node system
PCT/US2002/006981 WO2002073416A2 (en) 2001-03-07 2002-03-07 Managing checkpoint queues in a multiple node system

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2008213995A Division JP4486689B2 (ja) 2001-03-07 2008-08-22 故障後、どこで回復するかについての情報を管理する方法、故障後、回復するための方法、および、多数のキャッシュを含むシステムにおける故障の後、データ項目の現在のバージョンを回復させるための方法

Publications (3)

Publication Number Publication Date
JP2005506598A JP2005506598A (ja) 2005-03-03
JP2005506598A5 JP2005506598A5 (ja) 2005-08-04
JP4242155B2 true JP4242155B2 (ja) 2009-03-18

Family

ID=40564944

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2002572008A Expired - Lifetime JP4242155B2 (ja) 2001-03-07 2002-03-07 永続的記憶装置へのダーティデータ項目の書込を調整するための方法、当該方法をコンピュータに行なわせるためのプログラムを格納したコンピュータ読出可能な媒体、および、永続的記憶装置へのダーティデータ項目の書込を調整するための装置
JP2008213995A Expired - Lifetime JP4486689B2 (ja) 2001-03-07 2008-08-22 故障後、どこで回復するかについての情報を管理する方法、故障後、回復するための方法、および、多数のキャッシュを含むシステムにおける故障の後、データ項目の現在のバージョンを回復させるための方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2008213995A Expired - Lifetime JP4486689B2 (ja) 2001-03-07 2008-08-22 故障後、どこで回復するかについての情報を管理する方法、故障後、回復するための方法、および、多数のキャッシュを含むシステムにおける故障の後、データ項目の現在のバージョンを回復させるための方法

Country Status (1)

Country Link
JP (2) JP4242155B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6199808B2 (ja) * 2014-06-06 2017-09-20 株式会社東芝 データベース装置およびデータアクセス方法
US10058661B2 (en) 2014-12-04 2018-08-28 Norton (Waterford) Limited Inhalation monitoring system and method
JP7106953B2 (ja) * 2018-04-10 2022-07-27 富士通株式会社 サーバ切り替えプログラム、サーバ切り替え方法、及びサーバ切り替えシステム
CN110727652B (zh) * 2018-07-17 2023-06-30 阿里巴巴集团控股有限公司 一种云存储处理系统及其实现数据处理的方法
CN113239059A (zh) * 2021-05-28 2021-08-10 北京达佳互联信息技术有限公司 一种分布式锁的切换方法、装置、服务器和存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07168730A (ja) * 1993-12-15 1995-07-04 Toshiba Corp チェックポイント採取方式
JPH096546A (ja) * 1995-06-19 1997-01-10 Toshiba Corp ディスク制御システム
JP3154942B2 (ja) * 1995-09-11 2001-04-09 株式会社東芝 分散チェックポイント生成方法および同方法が適用される計算機システム
JP3258228B2 (ja) * 1996-03-15 2002-02-18 株式会社東芝 チェックポイント生成方法
JP3120033B2 (ja) * 1996-03-19 2000-12-25 株式会社東芝 分散メモリ型マルチプロセッサシステム及び故障回復方法
JPH09330237A (ja) * 1996-06-07 1997-12-22 Toshiba Corp プロセス切り替え装置およびプロセス切り替え方法
JP3725318B2 (ja) * 1997-01-24 2005-12-07 株式会社東芝 プロセス状態の管理方法およびプロセス管理装置、並びにこれを行うプログラムを記録した記録媒体

Also Published As

Publication number Publication date
JP2009009599A (ja) 2009-01-15
JP4486689B2 (ja) 2010-06-23
JP2005506598A (ja) 2005-03-03

Similar Documents

Publication Publication Date Title
JP4293790B2 (ja) 分散共有ディスクシステムにおけるディスク書込
US7065540B2 (en) Managing checkpoint queues in a multiple node system
US7930278B2 (en) Methods to perform disk writes in a distributed shared disk system needing consistency across failures
AU2002335503A1 (en) Disk writes in a distributed shared disk system
US7266669B2 (en) File system with file management function and file management method
EP1055173B1 (en) Method and apparatus for transferring data from the cache of one node to the cache of another node
US20040039962A1 (en) Method and apparatus for making available data that was locked by a dead transaction before rolling back the entire dead transaction
CA2440277C (en) Managing checkpoint queues in a multiple node system
AU2002248570A1 (en) Managing checkpoint queues in a multiple node system
JP4486689B2 (ja) 故障後、どこで回復するかについての情報を管理する方法、故障後、回復するための方法、および、多数のキャッシュを含むシステムにおける故障の後、データ項目の現在のバージョンを回復させるための方法
EP1366420B1 (en) Disk writes in a distributed shared disk system
EP1176509B1 (en) Managing recovery of data after failure of one or more caches
AU2003213536B2 (en) Method and apparatus for transferring data from the cache of one node to the cache of another node
EP1408408B1 (en) Managing a resource used by a plurality of nodes

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050203

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080226

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20080523

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20080530

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20080625

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20080702

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20080725

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20080801

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080822

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20081209

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20081224

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120109

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4242155

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130109

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130109

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term