(57)【要約】同じデータ項目の異なるコピーを含み得る多数のキャッシュを備えたシステム内でキャッシュを管理するための技術が提供される。具体的には、このようなデータ項目上で行なわれるディスクへの書込動作を調整して、より古いバージョンのデータ項目がより新しいバージョン上に書込まれないことを確実にし、さらには、故障後の回復に必要とされる処理量を減じるための技術が提供される。多数のキャッシュと協調してデータ項目を永続的記憶装置に書込ませるためにマスタが用いられる、さまざまな方式が提供される。キャッシュに関連したチェックポイントを管理するための技術も提供されており、ここでは、チェックポイントを用いて、故障時に回復ログの処理を開始すべき位置が決定される。
2005506598.tif 000002
【特許請求の範囲】
【請求項１】
永続的記憶装置へのデータ項目の書込を調整するための方法であって、
第１のノード内に、永続的記憶装置へ書込まれる必要があるダーティデータ項目についての第１の待ち行列を維持するステップと、
第１のノード内に、永続的記憶装置へ書込まれる必要があるダーティデータ項目についての第２の待ち行列を維持するステップと、
エントリに対応するダーティデータ項目が前記第１のノード以外のノードへ転送される必要がある場合に、エントリを前記第１の待ち行列から前記第２の待ち行列へ動かすステップと、
どのデータ項目を永続的記憶装置へ書込むかを選択する場合に、前記第２の待ち行列におけるエントリに対応するデータ項目に優先度を与えるステップとを含む、方法。
【請求項２】
エントリを動かすステップは、前記第１のノードによって受けられたメッセージに応答してエントリを前記第１の待ち行列から前記第２の待ち行列へ動かすステップを含み、前記メッセージは、別のノードが前記エントリに対応するデータ項目を要求したことを示す、請求項１に記載の方法。
【請求項３】
永続的記憶装置へのデータ項目の書込を調整するための方法であって、
前記データ項目の各々について強制書込カウントを維持するステップと、
データ項目が１つのノードによって、データ項目を別のノードへ転送するために永続的記憶装置に書込まれるたびに、データ項目の強制書込カウントを増分するステップと、
データ項目に関連する書込カウントに基づいて、どのダーティデータ項目を永続的記憶装置に書込むかを選択するステップとを含む、方法。
【請求項４】
或るしきい値を上回る強制書込カウントを有するダーティデータ項目を特定の待ち行列に記憶させるステップと、
永続的記憶装置に書込むダーティデータ項目を選択する場合に、前記特定の待ち行列に記憶されたデータ項目に優先度を与えるステップとをさらに含む、請求項３に記載の方法。
【請求項５】
故障後、どこで回復を開始するかについての情報を管理する方法であって、
多ノードシステムの特定のノードにおいて、
前記ノードの故障の後、回復ログ内のどこで回復を開始するかを示す単一故障待ち行列と、
前記ノードおよび前記多ノードシステムの他の１つ以上のノードの故障の後、前記回復ログ内のどこで回復を開始するかを示す多故障待ち行列との双方を維持するステップと、
永続的記憶装置へ書込中のダーティデータ項目に応答して、前記単一故障待ち行列および前記多故障待ち行列の双方から前記データ項目についてのエントリを除去するステップと、
まず永続的記憶装置に書込まれることなく前記多ノードシステムの別のノードへ送信中のダーティデータ項目に応答して、前記多故障待ち行列から前記データ項目についてのエントリを除去することなく、前記単一故障待ち行列から前記データ項目についてのエントリを除去するステップとを含む、方法。
【請求項６】
ダーティデータ項目を別のノードへ送信して、ダーティデータ項目を要求する他のノードなしで前記単一故障待ち行列からのエントリの除去を可能にするステップをさらに含む、請求項５に記載の方法。
【請求項７】
単一ノード故障の後、単一故障待ち行列に関連する前記回復ログにおいてある位置から開始する前記回復ログを適用するステップと、
多ノード故障の後、多故障待ち行列に関連する前記回復ログにおいてある位置から開始する前記回復ログを適用するステップとをさらに含む、請求項５に記載の方法。
【請求項８】
前記単一故障待ち行列および前記多故障待ち行列は、単一の組合された待ち行列によって実現され、
前記多故障待ち行列から前記データ項目についてのエントリを除去することなく、前記単一故障待ち行列から前記データ項目についてのエントリを除去するステップは、前記組合された待ち行列から前記データ項目についてのエントリを除去することなく、前記組合された待ち行列における前記データ項目についてのエントリに印付けることを含む、請求項５に記載の方法。
【請求項９】
前記単一故障待ち行列および前記多故障待ち行列は２つの別個の待ち行列として実現される、請求項５に記載の方法。
【請求項１０】
故障後、回復するための方法であって、
故障が１つのノードのみに関与するかどうかを判断するステップと、
故障が前記１つのノードのみに関与する場合には、回復ログにおける第１のポイントから開始する前記ノードの回復ログを適用することにより、回復を実行するステップと、
故障が前記１つのノードに加え１つ以上のノードに関与する場合には、回復ログにおける第２のポイントから開始する前記ノードの前記回復ログを適用することにより、回復を実行するステップとを含み、
前記第１のポイントは前記第２のポイントとは異なる、方法。
【請求項１１】
第１のポイントは、少なくとも部分的に、前記ノードによってダーティ化されたどのデータ項目が他のノードのキャッシュ内に存在するかによって決定され、
第２のポイントは、少なくとも部分的に、前記ノードによってダーティ化されたどのデータ項目が持続的に記憶されてきたかによって決定される、請求項１０に記載の方法。
【請求項１２】
故障後、回復するための方法であって
データ項目の特定のバージョンがディスクに書込まれたかどうかが不明瞭な場合には、
前記データ項目を回復させようとせずに、前記特定のバージョンがディスクに書込まれた場合にカバーされるであろう前記データ項目のダーティ化されたキャッシュされたバージョンに印付けるステップと、
前記ダーティ化されたキャッシュされたバージョンのうちの１つをディスクへ書込むように要求がなされた場合に、前記データ項目のどのバージョンが既にディスク上にあるかを判断するステップと、
前記データ項目の前記特定のバージョンが既にディスク上にある場合には、前記ダーティ化されたキャッシュされたバージョンのうちの前記１つをディスクへ書込まないステップとを行なうステップを含む、方法。
【請求項１３】
前記データ項目の前記特定のバージョンがディスク上にまだない場合には、前記データ項目を回復させるステップをさらに含む、請求項１２に記載の方法。
【請求項１４】
前記データ項目の前記特定のバージョンが既にディスク上にある場合には、データ項目の前記ダーティ化されたキャッシュされたバージョンを含むノードに、前記ダーティ化されたキャッシュされたバージョンがディスクへの書込動作によりカバーされていることを伝えるステップをさらに含む、請求項１２に記載の方法。
【請求項１５】
多数のキャッシュを含むシステムにおける故障の後、データ項目の現在のバージョンを回復させるための方法であって、
前記多数のキャッシュの第１のノードにおけるデータ項目を修正して、修正されたデータ項目を作成するステップと、
前記第１のノードからの修正されたデータ項目を永続的記憶装置に永続的に記憶させることなく、修正されたデータ項目を前記第１のノードから前記多数のキャッシュの第２のノードへ送信するステップと、
前記修正されたデータ項目が前記第１のノードから前記第２のノードへ送信された後、かつ前記第１のノードにおける前記データ項目がディスクへの書込動作によりカバーされる前に、前記第１のノードにおける前記データ項目を破棄するステップと、
前記故障の後、前記多数のキャッシュのすべてに関連する併合されたリドゥログに基づいて、永続的記憶装置上のデータ項目に変更を加えることによって、前記データ項目の現在のバージョンを再構築するステップとを含む、方法。
【請求項１６】
前記多数のキャッシュの各々について、グローバルにダーティなチェックポイント待ち行列、およびローカルにダーティなチェックポイント待ち行列を維持するステップをさらに含み、
グローバルにダーティなチェックポイント待ち行列におけるエントリに関連するグローバルにダーティなデータ項目は、ディスクへの書込動作によりカバーされるまで保持されず、前記方法はさらに、
各キャッシュについて、ローカルにダーティなチェックポイント待ち行列のヘッドにおけるエントリの最初にダーティ化された時間と、グローバルにダーティなチェックポイント待ち行列のヘッドにおけるエントリの最初にダーティ化された時間との低い方に基づいて、チェックポイントを決定するステップと、
前記故障の後、前記キャッシュについて決定されたチェックポイントに基づいて、各キャッシュに関連するリドゥログをどこで処理し始めるかを決定するステップとを含む、請求項１５に記載の方法。
【請求項１７】
前記多数のキャッシュの各々について、グローバルにダーティなチェックポイント待ち行列、およびローカルにダーティなチェックポイント待ち行列を維持するステップをさらに含み、
グローバルにダーティなチェックポイント待ち行列におけるエントリに関連するグローバルにダーティなデータ項目は、ディスクへの書込動作によりカバーされるまで保持されず、前記方法はさらに、
各キャッシュについて、第１の時間を示すローカルにダーティなチェックポイント待ち行列についての１番目のチェックポイントレコードを維持するステップを含み、ここで、第１の時間に先立ってキャッシュ内で現在ダーティであるデータ項目になされたすべての変更は、永続的記憶装置上のデータ項目のバージョン上に記録されており、前記方法はさらに、
各キャッシュについて、グローバルにダーティなチェックポイント待ち行列についての２番目のチェックポイントレコードを維持するステップを含み、第２のチェックポイントレコードは、キャッシュ内で一旦ダーティ化されたもののその後転送されて永続的記憶装置に書込まれていないデータ項目のリストを含み、前記方法はさらに、
前記故障の後、前記キャッシュについての１番目のチェックポイントレコードおよび前記２番目のチェックポイントレコードに基づいて、各キャッシュに関連するリドゥログをどこで処理し始めるかを決定するステップを含む、請求項１５に記載の方法。
【請求項１８】
リドゥログを処理するステップは、
リドゥログを走査するための開始位置を、１番目のチェックポイントレコードにより決定されるようなリドゥログにおける位置と、２番目のチェックポイントレコードにおけるデータ項目のリストになされた最も初期の変更により決定されるようなログにおける位置との小さい方に基づいて決定するステップと、
回復中、グローバルチェックポイントレコードにより示される位置とローカルチェックポイントレコードにより示される位置との間のリドゥログの部分について、グローバルチェックポイントレコードにおいて識別されたデータ項目に対応するログレコードのみを潜在的なリドゥ用に考慮するステップとを含む、請求項１７に記載の方法。
【請求項１９】
永続的記憶装置へのデータ項目の書込を調整するための命令を保持するコンピュータ読出し可能な媒体であって、前記命令は、
第１のノード内に、永続的記憶装置へ書込まれる必要があるダーティデータ項目についての第１の待ち行列を維持するステップと、
第１のノード内に、永続的記憶装置へ書込まれる必要があるダーティデータ項目についての第２の待ち行列を維持するステップと、
エントリに対応するダーティデータ項目が前記第１のノード以外のノードへ転送される必要がある場合に、エントリを前記第１の待ち行列から前記第２の待ち行列へ動かすステップと、
どのデータ項目を永続的記憶装置へ書込むかを選択する場合に、前記第２の待ち行列におけるエントリに対応するデータ項目に優先度を与えるステップとを行なうための命令を含む、コンピュータ読出し可能な媒体。
【請求項２０】
エントリを動かすステップは、前記第１のノードによって受けられたメッセージに応答してエントリを前記第１の待ち行列から前記第２の待ち行列へ動かすステップを含み、前記メッセージは、別のノードが前記エントリに対応するデータ項目を要求したことを示す、請求項１９に記載のコンピュータ読出し可能な媒体。
【請求項２１】
永続的記憶装置へのデータ項目の書込を調整するための命令を保持するコンピュータ読出し可能な媒体であって、前記命令は、
前記データ項目の各々について強制書込カウントを維持するステップと、
データ項目が１つのノードによって、データ項目を別のノードへ転送するために永続的記憶装置に書込まれるたびに、データ項目の強制書込カウントをインクリメントするステップと、
データ項目に関連する書込カウントに基づいて、どのダーティデータ項目を永続的記憶装置に書込むかを選択するステップとを行なうための命令を含む、コンピュータ読出し可能な媒体。
【請求項２２】
或るしきい値を上回る強制書込カウントを有するダーティデータ項目を特定の待ち行列に記憶させるステップと、
永続的記憶装置に書込むダーティデータ項目を選択する場合に、前記特定の待ち行列に記憶されたデータ項目に優先度を与えるステップとを行なうための命令をさらに含む、請求項２１に記載のコンピュータ読出し可能な媒体。
【請求項２３】
故障後、どこで回復を開始するかについての情報を管理するための命令を保持するコンピュータ読出し可能な媒体であって、前記命令は、
多ノードシステムの特定のノードにおいて、
前記ノードの故障の後、回復ログ内のどこで回復を開始するかを示す単一故障待ち行列と、
前記ノードおよび前記多ノードシステムの他の１つ以上のノードの故障の後、前記回復ログ内のどこで回復を開始するかを示す多故障待ち行列との双方を維持するステップと、
永続的記憶装置へ書込中のダーティデータ項目に応答して、前記単一故障待ち行列および前記多故障待ち行列の双方から前記データ項目についてのエントリを除去するステップと、
まず永続的記憶装置に書込まれることなく前記多ノードシステムの別のノードへ送信中のダーティデータ項目に応答して、前記多故障待ち行列から前記データ項目についてのエントリを除去することなく、前記単一故障待ち行列から前記データ項目についてのエントリを除去するステップとを行なうための命令を含む、コンピュータ読出し可能な媒体。
【請求項２４】
ダーティデータ項目を別のノードへ送信して、ダーティデータ項目を要求する他のノードなしで前記単一故障待ち行列からのエントリの除去を可能にするステップを行なうための命令をさらに含む、請求項２３に記載のコンピュータ読出し可能な媒体。
【請求項２５】
単一ノード故障の後、単一故障待ち行列に関連する前記回復ログにおいてある位置から開始する前記回復ログを適用するステップと、
多ノード故障の後、多故障待ち行列に関連する前記回復ログにおいてある位置から開始する前記回復ログを適用するステップとを行なうための命令をさらに含む、請求項２３に記載のコンピュータ読出し可能な媒体。
【請求項２６】
前記単一故障待ち行列および前記多故障待ち行列は、単一の組合された待ち行列によって実現され、
前記多故障待ち行列から前記データ項目についてのエントリを除去することなく、前記単一故障待ち行列から前記データ項目についてのエントリを除去するステップは、前記組合された待ち行列から前記データ項目についてのエントリを除去することなく、前記組合された待ち行列における前記データ項目についてのエントリに印付けることを含む、請求項２３に記載のコンピュータ読出し可能な媒体。
【請求項２７】
前記単一故障待ち行列および前記多故障待ち行列は２つの別個の待ち行列として実現される、請求項２３に記載のコンピュータ読出し可能な媒体。
【請求項２８】
故障後、回復するための命令を保持するコンピュータ読出し可能な媒体であって、前記命令は、
故障が１つのノードのみに関与するかどうかを判断するステップと、
故障が前記１つのノードのみに関与する場合には、回復ログにおける第１のポイントから開始する前記ノードの回復ログを適用することにより、回復を実行するステップと、
故障が前記１つのノードに加え１つ以上のノードに関与する場合には、回復ログにおける第２のポイントから開始する前記ノードの前記回復ログを適用することにより、回復を実行するステップとを行なう命令を含み、
前記第１のポイントは前記第２のポイントとは異なる、コンピュータ読出し可能な媒体。
【請求項２９】
第１のポイントは、少なくとも部分的に、前記ノードによってダーティ化されたどのデータ項目が他のノードのキャッシュ内に存在するかによって決定され、
第２のポイントは、少なくとも部分的に、前記ノードによってダーティ化されたどのデータ項目が持続的に記憶されてきたかによって決定される、請求項２８に記載のコンピュータ読出し可能な媒体。
【請求項３０】
故障後、回復するための命令を保持するコンピュータ読出し可能な媒体であって、前記命令は、
データ項目の特定のバージョンがディスクに書込まれたかどうかが不明瞭な場合には、
前記データ項目を回復させようとせずに、前記特定のバージョンがディスクに書込まれた場合にカバーされるであろう前記データ項目のダーティ化されたキャッシュされたバージョンに印付けるステップと、
前記ダーティ化されたキャッシュされたバージョンのうちの１つをディスクへ書込むように要求がなされた場合に、前記データ項目のどのバージョンが既にディスク上にあるかを判断するステップと、
前記データ項目の前記特定のバージョンが既にディスク上にある場合には、前記ダーティ化されたキャッシュされたバージョンのうちの前記１つをディスクへ書込まないステップとを行なうための命令を含む、コンピュータ読出し可能な媒体。
【請求項３１】
前記データ項目の前記特定のバージョンがディスク上にまだない場合には、前記データ項目を回復させるステップを行なうための命令をさらに含む、請求項３０に記載のコンピュータ読出し可能な媒体。
【請求項３２】
前記データ項目の前記特定のバージョンが既にディスク上にある場合には、データ項目の前記ダーティ化されたキャッシュされたバージョンを含むノードに、前記ダーティ化されたキャッシュされたバージョンがディスクへの書込動作によりカバーされていることを伝えるステップを行なうための命令をさらに含む、請求項３０に記載のコンピュータ読出し可能な媒体。
【請求項３３】
多数のキャッシュを含むシステムにおける故障の後、データ項目の現在のバージョンを回復させるための命令を保持するコンピュータ読出し可能な媒体であって、前記命令は、
前記多数のキャッシュの第１のノードにおけるデータ項目を修正して、修正されたデータ項目を作成するステップと、
前記第１のノードからの修正されたデータ項目を永続的記憶装置に永続的に記憶させることなく、修正されたデータ項目を前記第１のノードから前記多数のキャッシュの第２のノードへ送信するステップと、
前記修正されたデータ項目が前記第１のノードから前記第２のノードへ送信された後、かつ前記第１のノードにおける前記データ項目がディスクへの書込動作によりカバーされる前に、前記第１のノードにおける前記データ項目を破棄するステップと、
前記故障の後、前記多数のキャッシュのすべてに関連する併合されたリドゥログに基づいて、永続的記憶装置上のデータ項目に変更を加えることによって、前記データ項目の現在のバージョンを再構築するステップとを行なうための命令を含む、コンピュータ読出し可能な媒体。
【請求項３４】
前記多数のキャッシュの各々について、グローバルにダーティなチェックポイント待ち行列、およびローカルにダーティなチェックポイント待ち行列を維持するステップを行なうための命令をさらに含み、
グローバルにダーティなチェックポイント待ち行列におけるエントリに関連するグローバルにダーティなデータ項目は、ディスクへの書込動作によりカバーされるまで保持されず、前記コンピュータ読出し可能な媒体はさらに、
各キャッシュについて、ローカルにダーティなチェックポイント待ち行列のヘッドにおけるエントリの最初にダーティ化された時間と、グローバルにダーティなチェックポイント待ち行列のヘッドにおけるエントリの最初にダーティ化された時間との低い方に基づいて、チェックポイントを決定するステップと、
前記故障の後、前記キャッシュについて決定されたチェックポイントに基づいて、各キャッシュに関連するリドゥログをどこで処理し始めるかを決定するステップとを行なうための命令を含む、請求項３３に記載のコンピュータ読出し可能な媒体。
【請求項３５】
前記多数のキャッシュの各々について、グローバルにダーティなチェックポイント待ち行列、およびローカルにダーティなチェックポイント待ち行列を維持するステップを行なうための命令をさらに含み、
グローバルにダーティなチェックポイント待ち行列におけるエントリに関連するグローバルにダーティなデータ項目は、ディスクへの書込動作によりカバーされるまで保持されず、前記コンピュータ読出し可能な媒体はさらに、
各キャッシュについて、第１の時間を示すローカルにダーティなチェックポイント待ち行列についての１番目のチェックポイントレコードを維持するステップを行なうための命令を含み、ここで、第１の時間に先立ってキャッシュ内で現在ダーティであるデータ項目になされたすべての変更は、永続的記憶装置上のデータ項目のバージョン上に記録されており、前記コンピュータ読出し可能な媒体はさらに、
各キャッシュについて、グローバルにダーティなチェックポイント待ち行列についての２番目のチェックポイントレコードを維持するステップを行なうための命令を含み、第２のチェックポイントレコードは、キャッシュ内で一旦ダーティ化されたもののその後転送されて永続的記憶装置に書込まれていないデータ項目のリストを含み、前記コンピュータ読出し可能な媒体はさらに、
前記故障の後、前記キャッシュについての１番目のチェックポイントレコードおよび前記２番目のチェックポイントレコードに基づいて、各キャッシュに関連するリドゥログをどこで処理し始めるかを決定するステップを行なうための命令を含む、請求項３３に記載のコンピュータ読出し可能な媒体。
【請求項３６】
リドゥログを処理するステップは、
リドゥログを走査するための開始位置を、１番目のチェックポイントレコードにより決定されるようなリドゥログにおける位置と、２番目のチェックポイントレコードにおけるデータ項目のリストになされた最も初期の変更により決定されるようなログにおける位置との小さい方に基づいて決定するステップと、
回復中、グローバルチェックポイントレコードにより示される位置とローカルチェックポイントレコードにより示される位置との間のリドゥログの部分について、グローバルチェックポイントレコードにおいて識別されたデータ項目に対応するログレコードのみを潜在的なリドゥ用に考慮するステップとを含む、請求項３５に記載のコンピュータ読出し可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願および優先権主張
この特許出願は、２００１年３月７日に提出された米国仮特許出願第６０／２７４，２７０号「故障間での一貫性を必要とする分散共有ディスクシステムにおいてディスク書込を行なう方法（“Methods to perform disk writes in a distributed shared disk system needing consistency across failures”）」に関し、当該仮特許出願から優先権を主張しており、その内容はすべてここに引用により援用される。
【０００２】
発明の分野
この発明は、ディスク書込を行なうことに関し、より具体的には、データ項目のダーティバージョンが多数のノードのキャッシュ内に存在することを可能にするシステム内におけるダーティデータ項目の書込調整に関する。
【背景技術】
【０００３】
発明の背景
データベースシステム内のスケーラビリティを向上させる１つの手法は、多数のノードが共有記憶装置内のデータを並行して読出し、修正することを可能にすることである。各ノードは、揮発性メインメモリ内のデータを保持するキャッシュを有し、不揮発性共有ディスク記憶装置によってバックアップされる。グローバルロックマネージャ（ＧＬＭ）または分散ロックマネージャ（ＤＬＭ）を用いて、ノード間のキャッシュコヒーレンシを維持する。メインメモリの内容を消去するノードの故障からの回復を提供するために、一般的なライトアヘッドロギング（ＷＡＬ）プロトコルが用いられる。性能上の理由から、各ノードは、変更が記録される専用のリドゥログを有する。ノード故障後に走査される必要のあるリドゥログ内の変更の量を減じるために、チェックポイント前のデータ項目内のすべての変更が不揮発性記憶装置内のデータ項目に再適用されなくてもよいことを保証するインクリメンタルまたは定期的なチェックポイントが通例とられる。
【０００４】
並行処理
同じノード上または異なるノード上のいずれかで実行しているトランザクション間の並行処理は、グローバルトランザクションページレベルロックまたは行レベルロックによって実現される。トランザクションシステムは、トランザクションによって修正された（ページ／ブロック等の）データ項目が、トランザクションコミット中に安定した記憶装置に書込まれる強制方式、または、リドゥログ内のトランザクションの変更のみがトランザクションコミットにおいて強制される非強制方式のいずれかを用い得る。ページレベルロックを用いる強制方式を用いることは、ブロックが、１つのノードによってのみ（実際には、１つのトランザクションによってのみ）修正され、いずれかのポイントで１つのシステムのキャッシュのみの中でダーティ化され得ることを意味する。すべての他の組合せ（つまり、強制方式での行レベルロック、非強制方式でのページレベルロック、および非強制方式での行レベルロック）では、データ項目は多数のシステム内で修正され得、キャッシュコヒーレンシメカニズムが必要とされる。
【０００５】
最も一般的な事例は、非強制データ項目管理方式での行レベルロックである。説明のために、以下に提供される例は、非強制データ項目管理方式での行レベルロックを用いるシステムの状況において提供される。しかし、ここで説明される技術は、この状況に限定されているわけではない。
【０００６】
チェックポイント待ち行列
トランザクションがコミットすると、トランザクションによって作られた変更を反映するデータは、永続的記憶装置に記憶されなければならない。いくつかのシステムでは、トランザクションによって作られた変更を表わすリドゥレコードは、コミット時に永続的に記憶されなければならないが、修正されるデータ項目自体の実際の書込は、遅延され得る。（１）変更を含み、および（２）永続的に記憶されていないデータ項目が、「ダーティデータ項目」と呼ばれる。一般に、あるノード内に存在するデータ項目がダーティであればあるほど、そのノードが故障した場合、回復時間はより長くなる。したがって、回復時間が許容できないほど長くならないことを確実にするために、ノードは、チェックポイント待ち行列を維持し得る。
【０００７】
チェックポイント待ち行列は、ダーティデータ項目を識別するエントリを含む。待ち行列内のエントリは、永続的に記憶されるリドゥログ内の対応のリドゥレコードの順番に基づいて順序づけられる。故障の際には、リドゥログは、チェックポイント待ち行列のヘッドにあったエントリに対応するリドゥレコードから処理されなければならない。
【０００８】
ダーティデータ項目が永続的記憶装置に書込まれると、そのデータ項目のためのエントリは、チェックポイント待ち行列から除去される。チェックポイント待ち行列のヘッドにあるエントリがチェックポイント待ち行列から除去されると、回復処理が開始されなければならないリドゥログ内のポイントが変わり、結果として、チェックポイントの「前進」が得られる。故障時に、チェックポイントがリドゥログ内で進んでいればいるほど、故障からの回復のために行なわなければならない作業は、より少なくなる。したがって、ノードは、通例、それらのチェックポイント待ち行列のヘッドにおけるエントリによって識別されるダーティデータ項目を永続的記憶装置に書込むことを試みる。しかし、以下でより詳細に説明されるように、ダーティデータ項目の書込を調整することは、同じデータ項目のダーティバージョンが多数のノードのキャッシュ内に存在することが可能である場合に、特に重要である。
【０００９】
共有永続的記憶装置を通してのデータ項目の転送
データ項目が並行して多数のシステムによって修正され得る場合、安定した共有永続的記憶装置に対する、修正されたデータ項目の書込みを調整するメカニズムが必要とされる。いくつかのシステムでは、この問題は、修正されたデータ項目を１つのノードから別のノードへと転送するための媒体として安定した共有永続的記憶装置を用いることによって、簡素化される。あるノード内でダーティであるデータ項目が、異なるノード内での修正のために必要とされる場合、データ項目は、ダーティ化されたデータ項目を修正することを望むノードにページロックを与える前に、共有永続的記憶装置にまず書込まれる。異なるノードが、修正されたデータ項目の現在のバージョンを読出す必要がある場合、同じ、永続的記憶装置への書込および永続的記憶装置からの読出シーケンスが用いられる。
【００１０】
相互接続を通したデータ項目の転送
システムがノード間でデータ項目を転送する媒体として不揮発性記憶装置を用いるシステムでは、異なるノード間でダーティデータ項目の書込を調整する必要はない。各ノードは、ダーティデータ項目を書き出し、さらにはチェックポイントを行なうための従来のメカニズムを用い得る。
【００１１】
いくつかのシステムでは、要求を行なうノードが、修正されたデータ項目の一貫したスナップショットバージョンのみを必要とする場合、データ項目を永続的記憶装置に書込むことなく、修正されたデータ項目は、要求を行なうノードに送信される。したがって、これらのコヒーレンシ制御メカニズムを用いると、異なるノード内の多数のトランザクションは、トランザクションコミット前に行レベルロックを用いて同じデータ項目を修正することができるが、いずれかのデータベースデータ項目が、１つのノードのキャッシュ内においてのみダーティである。したがって、あるノードが故障した場合は、データベースを回復させるために、そのノードのリドゥログのみが、そのノード内のチェックポイントレコードからそのリドゥログの終わりまで走査されればよい。さらに、多数のノードが故障した場合は、各ノードのリドゥログが、走査され、データベースを回復するように順次適用され得る。つまり、多数のリドゥログからの変更を併合する必要はない。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかし、排他ロックを有し、さらにはデータ項目を修正した可能性をもつノードから、排他的用途または読出の現在のバージョンのために同じデータ項目を要求するノードまでのデータ項目転送の待ち時間を改善するために、データ項目を永続的記憶装置に最初に書込まずに、１つのノードのメインメモリから別のノードのメインメモリへとデータ項目を直接転送することが望ましい。ダーティデータ項目が１つのノードから別のノードへと転送されるとき、過去イメージ（ＰＩ）として公知のデータ項目のコピーは、送信を行なうノード内に保持されてもよく、または保持されなくてもよい。
【００１３】
ノードがダーティデータ項目を、永続的記憶装置にそれらを記憶することなく転送できる場合、ダーティデータ項目の書込は、種々のノード間で調整されなければならない。調整が起こらない場合には、ダーティデータ項目を転送したノードは、ダーティデータ項目を永続的記憶装置に書込むことによって、そのチェックポイントを前進させることを望むであろう。しかし、ある他のノードが既により新しいバージョンのデータ項目を永続的記憶装置に書込んでいた場合には、ダーティデータ項目を永続的記憶装置に書込むことによって、データの完全性が壊されるおそれがある。
【００１４】
加えて、ダーティデータ項目がディスクに書込まれない限り、チェックポイントは、前進させられ得ない。あるノードが他のノードに送信するデータ項目のダーティバージョンをそのノードが保持しない場合、ノードは、他のノードとともにディスクへの書込動作を何らかの形で調整しなければならない。
【００１５】
さらに、システムがスケーラブルであるためには、システムによって行なわれるディスクへの書込動作の回数は、システム内のノード数の関数であるべきでない。むしろ、ディスクへの書込動作の数は、システム内のデータ項目に対して実際に行なわれた変更の数を単純に反映するべきである。
【００１６】
以上のことから、システム内のダーティデータ項目の書込を調整するための技術であって、同じデータ項目のダーティバージョンが１つよりも多くの揮発性メモリ内に存在することのできる技術を提供することが疑いもなく望まれる。
【課題を解決するための手段】
【００１７】
発明の概要
同じデータ項目の異なるコピーを含み得る多数のキャッシュを備えたシステム内でキャッシュを管理するための技術が提供される。具体的には、このようなデータ項目上で行なわれるディスクへの書込動作を調整して、より古いバージョンのデータ項目がより新しいバージョン上に書込まれないことを確実にし、さらには、故障後の回復に必要とされる処理量を減じるための技術が提供される。多数のキャッシュと協調してデータ項目を永続的記憶装置に書込ませるためにマスタが用いられる、さまざまな方式が提供される。このような方式は、直接書込方式、間接書込方式、オーナーベース方式、および役割ベース方式を含むが、これらに限定されているわけではない。キャッシュに関連したチェックポイントを管理するための技術も提供されており、ここでは、チェックポイントを用いて、故障時に回復ログの処理を開始すべき位置が決定される。
【発明を実施するための最良の形態】
【００１８】
この発明は、同じ参照番号が同様の要素を指す添付の図において、限定としてではなく、例として示される。
【００１９】
発明の詳細な説明
ダーティデータ項目の書込を調整するための方法および装置を記載する。以下の記載においては、説明のため、この発明の完全な理解をもたらすための数々の特定の詳細を記載する。しかしながら、この発明はこれら特定の詳細なしに実施可能であることが明らかであろう。他の場合には、この発明を不必要に不明瞭にすることを避けるために、周知の構造および装置をブロック図の形で示す。
【００２０】
転送用の媒体として永続的記憶装置を使用する最適化システム
ノード間でデータ項目を転送するための媒体として永続的記憶装置を用いるシステムでは、１つのノードから別のノードへデータ項目を転送する待ち時間は、データベースキャッシュ書込サブシステムを修正して、他のノードが読出または書込しようと待っているデータ項目の書込に対してより高い優先度を与えることで減少され得る。これは、他のノードがダーティデータ項目を読出または修正しようと待っているので、書込まれる必要があるダーティデータ項目のために別個の待ち行列（「ping待ち行列」）を設けることで達成できる。ロックマネージャ（分散ロックマネージャＤＬＭまたはグローバルロックマネージャＧＬＭのいずれかであり得る）が保持ノードにメッセージを送り、保持ノードに対し、データ項目に対するロックをリリースするように頼むと、ダーティデータ項目はオンデマンドでping待ち行列に動かされ得る。
【００２１】
別の方式に従うと、１つのノードから別のノードへのデータ項目を転送する待ち時間は、各々のデータ項目ヘッダまたはデータ項目制御ブロック内で「強制書込」カウントを維持することで減少され得る。データ項目を別のノードに転送するために書込が実行されるたびごとに、強制書込カウントが増分される。永続的記憶装置書込サブシステムは、或るしきい値よりも高い強制書込カウントを有するダーティデータ項目の最優先待ち行列を維持する。このような待ち行列を用いて、これらのデータ項目を、ノード間で頻繁に共有されない他のダーティデータ項目よりも頻繁に書込むことを可能にする。加えて、ノード間のロック転送の待ち時間が改良されるが、それはデータベースキャッシュ書込サブシステムがダーティデータ項目を、これらデータ項目のロックがリリースされる必要があると予測して、熱心に書出していたことによる。
【００２２】
しかしながら、この態様で最適化されたとしても、ノード間でデータ項目を転送するための媒体として共有の永続的記憶装置を用いるシステムは、永続的記憶装置にデータ項目を書込むことに関連したオーバーヘッドを抱える。以下に記載の技術は、ダーティデータ項目を含むデータ項目が永続的記憶装置にまず書込まれずにノード間で転送され得る、システムに関する。
【００２３】
正当性およびスケーラビリティ
永続的記憶装置にまず記憶されずにキャッシュ間でダーティデータ項目を転送できるシステムでは、正当性およびスケーラビリティのために、異なるノードごとのキャッシュ内のダーティデータ項目の書込を調整する必要がある。正当性は、ノードがチェックポイントを完了（すなわち、故障後にリドゥログから変更が適用される必要があり得る出発点を記録）すると、チェックポイントに先立ちコミットされた変更が入っているあらゆるデータ項目のバージョンが不揮発性永続的記憶装置に書込まれていることを要件とする。さらに２つのノードが同時に永続的記憶装置にデータ項目を書込むことを許されてはならず（なぜならこれらが互いの変更を壊すおそれがあるからである）、ノードはより新しいバージョンの上に、より古いバージョンのデータ項目を書込むことを許されてはならない。
【００２４】
スケーラビリティは、異なるノードによって変更がなされた場合でも、永続的記憶装置のデータ項目書込が可能な限り多くの変更をカバーすることを要件とする。スケーラビリティの理由からデータベースシステムは、走査される、およびおそらくはノード故障後に再適用される必要があるリドゥログの量を制限したいと望むであろう。したがってデータベース書込の数は、データ項目に対してなされる変更の数と比例し得るが、これらの変更を行なうノードの数と比例すべきではない。
【００２５】
機能の概観
同じデータ項目のダーティバージョンが多数のキャッシュに常駐できるシステム内で、永続的記憶装置へのダーティデータ項目の書込を調整するためのさまざまな技術を提供する。一技術に従うと、調整はデータ項目に割当てられたマスタを使用して実行される。一実施例に従うと、データ項目のダーティバージョンの書込を調整するのに用いられるマスタは、データ項目へのアクセスを支配するロックを管理するように割当てられるのと同じエンティティである。このような実施例では、マスタはロック管理システム、たとえば、分散またはグローバルロック管理システムのいずれかに属するロックマネージャなどの構成要素であるのが典型的であろう。
【００２６】
一実施例では、永続的記憶装置にダーティデータ項目を書込みたいと望むノードは、データ項目に割当てられたマスタに永続的記憶装置書込要求を送る。マスタは（１）要求しているノードに、書込を実行する許可を与えるか、または（２）要求しているノードに記憶されたダーティバージョンと少なくとも同じだけ新しいバージョンを、別のノードが既に永続的記憶装置に書込んだことを、要求しているノードに知らせ得る。
【００２７】
別の実施例では、マスタは応答として「書込実行」メッセージを送り、要求しているノードに記憶されたダーティバージョンと少なくとも同じだけ新しいデータ項目のバージョンを、要求しているノードとは別のノードに対し、永続的記憶装置に書込むように頼むこともある。この別のノードがマスタに、書込が実行されたという「書込確認」メッセージを送った後、マスタは「書込通知」メッセージを送り、要求しているノードに記憶されたダーティバージョンと少なくとも同じだけ新しいデータ項目のバージョンを別のノードが既に永続的記憶装置に書込んだことを、要求しているノードに知らせる。
【００２８】
データ項目の特定のバージョンが一旦永続的記憶装置に書込まれると、この特定のバージョンと同じまたはこれよりも古いデータ項目のダーティバージョンは、この特定のバージョンの書込によって「カバー」される。データ項目のカバーされたバージョンはもはや永続的記憶装置に書込まれる必要はない（かつそうされるべきではない）。カバーされたバージョンが入っているノードをここで「該当の」ノードと呼ぶ。
【００２９】
要求しているノードに、データ項目が永続的記憶装置に書込まれたことを知らせるのに加え、マスタは書込通知メッセージを送って、データ項目が永続的記憶装置に書込まれたことを該当のノードすべてに知らせることができる。他の該当のノードへの書込通知メッセージは、データ項目が永続的記憶装置に書込まれた確認を受取った後すぐに送られても、または或る他のイベントまで遅延されてもよい。
【００３０】
別の実施例では、ダーティデータ項目が永続的記憶装置に書込まれることをノードが欲するたびに、あらゆるノードがマスタに問う必要を避けるために、マスタはこのデータ項目についての「所有権許可」をノードに付与することができる。ノードがデータ項目の所有権許可を保持している間は、ノードはデータ項目のマスタに書込要求メッセージを送ることなしに、データ項目を永続的記憶装置に自由に書込むことができる。所有権許可は、排他ロックの所有権とともに暗黙に付与されても、または排他ロックの付与とは別に、かつこれとは独立に付与されてもよい。
【００３１】
一実施例に従うと、データ項目について「グローバルダーティ」フラグが維持される。ノードがデータ項目のダーティバージョンを別のノードに転送すると、グローバルダーティフラグは真にセットされる。オーナが永続的記憶装置にデータ項目を書込む際にグローバルダーティフラグが真にセットされていれば、オーナはマスタに書込確認メッセージを送る。次にマスタは書込通知メッセージを該当のノードに送ることができる。逆に、グローバルダーティフラグが偽にセットされていれば、オーナはデータ項目を書込む際にマスタに書込確認メッセージを送る必要はない。
【００３２】
直接書込方式
直接書込方式に従うと、ダーティデータ項目の永続的記憶装置への書込は、データ項目に割当てられたマスタを用いて調整される。具体的に、ダーティデータ項目を永続的記憶装置に書込みたいと望むノードは、データ項目に割当てられたマスタに書込要求メッセージを送る。マスタは（１）要求しているノードに、書込を実行する許可を与えるか、または（２）要求しているノードに記憶されたダーティバージョンと少なくとも同じだけ新しいバージョンを、別のノードが既に永続的記憶装置に書込んだことを、要求しているノードに知らせ得る。
【００３３】
より具体的には、ダーティデータ項目がノードのキャッシュから「ping outされる」、すなわち別のノードが読出（Ｓロック）または書込（Ｘロック）のために同じデータ項目の現在のバージョンを必要とすると、送る側のノードのキャッシュにあるデータ項目の状態はＰＩに変えられる。データ項目はなおもダーティまたはチェックポイント待ち行列に留まる。クリーンなデータ項目がpingoutされると、データ項目はフリーとして印付けられるか、またはキャッシュ内に留まって一貫したスナップショット読出を満足することができる。
【００３４】
データ項目のマスタは、データ項目がping outされたときのデータ項目のバージョン数を記録する。典型的にこのバージョン数はログシーケンス数（ＬＳＮ）、システムコミット数（ＳＣＮ）または、リドゥログ内の変更にデータ項目のバージョンを相関付けるのに用いられ得るグローバルに一意のタイムスタンプである。チェックポイントまたはキャッシュ書込サブシステムは最終的にＰＩ（またはその或る後継）を書出す必要があるが、それはデータ項目がなおダーティまたはチェックポイント待ち行列にあるからである。
【００３５】
直接書込方式に従うと、メッセージがマスタに送られ、これは、データ項目のより新しいバージョンが書込まれた状態でもって返答するか、または要求しているノードに書込許可を与えることになる。さらに、他のノードからの同じデータ項目についての書込要求は、書込ノードが書込完了状態でもってロックマネージャに応答するまで待ち行列にいる。ＰＩが永続的記憶装置に書込まれた後、データ項目のマスタはＰＩのバージョン数を、永続的記憶装置に現在あるバージョンとして記録する。
【００３６】
図１を参照して、直接書込方式を採用したシステムを例示するブロック図が示される。ノード１，２，３は、特定のデータ項目のバージョンＶ１、Ｖ２およびＶ３をそれぞれキャッシュに記憶している。Ｖ３＞Ｖ２＞Ｖ１であると想定し、ここでＡ＞Ｂとは、ＡがＢよりも新しいバージョンのデータ項目であることを意味する。
【００３７】
マスタ１００はデータ項目に割当てられたマスタである。図１に例示するシナリオでは、ノード１およびノード３が書込要求をマスタ１００に送る。多数のノードが同じデータ項目を同時に書込むことを防ぐために、マスタ１００にはたとえば、各データ項目について書込要求待ち行列が入っていることがあり得る。データ項目について受取った書込要求は、書込要求待ち行列に記憶されてマスタにより順次処理される。ここに示す例では、マスタ１００はノード３からの書込要求を最初に処理し、一方でノード１からの書込要求は書込要求待ち行列に留まる。マスタ１００は、ノード３の書込要求への応答として、Ｖ３を永続的記憶装置に書込む許可をノード３に与える書込実行メッセージをノード３に送る。
【００３８】
書込要求がノード３に付与された一方、マスタ１００は、永続的記憶装置への書込許可を他のいかなるノードにも付与しない。したがってノード１からの書込要求は書込要求待ち行列内で保留のままである。
【００３９】
ノード３がＶ３を永続的記憶装置に書込んだ後、ノード３はマスタ１００に書込確認メッセージを送り、永続的記憶装置への書込動作が完了し、かつ永続的記憶装置への書込許可がノード３によりリリースされていることを示す。Ｖ３はＶ１およびＶ２よりも新しいので、Ｖ１およびＶ２はＶ３の書込によりカバーされている。
【００４０】
次にマスタ１００は待ち行列内の次の書込要求の処理に進む。この例では、マスタ１００はノード１からの書込要求を処理する。ノード１の書込要求はＶ１を書込む要求である。Ｖ１は既にＶ３の書込によりカバーされたので、マスタ１００はノード１に書込通知メッセージを送り、Ｖ１が既にカバーされていることを示す。書込通知メッセージに応答して、ノード１は、Ｖ１を永続的記憶装置に書込まずに、そのチェックポイント待ち行列からＶ１についてのエントリをなくす。今やノード１はＶ１がカバーされていることを知っているので、ノード１はメモリにＶ１のコピーを維持する必要はない。
【００４１】
一実施例に従うと、Ｖ３の書込によりカバーされたＶ２が入っているノード２に対しては、ノード２がＶ２についての書込要求をマスタ１００に送るまで書込通知メッセージは送られない。
【００４２】
間接書込方式
直接書込方式を用いると、各ノードはノードのチェックポイント待ち行列内の各エントリについて書込要求メッセージを送る。或る場合には、ノードは書込要求への応答として書込実行メッセージを受取ることになる。書込実行メッセージが受取られると、要求しているノードは書込動作を実行しなければならない。他の場合には、要求しているノードは書込要求への応答として書込通知を受取ることになる。書込通知メッセージが受取られる場合には、要求しているノードは書込動作を実行する必要はない。
【００４３】
間接書込方式では、書込通知メッセージで返答される書込要求の割合を増加させることが試みられる。これを達成するため、マスタ１００は書込動作を実行するように頼まれるノードに関して選択的である。具体的にマスタ１００は、或るノードからの書込要求メッセージへの応答として、書込実行メッセージを別のノードに送ることができる。書込実行メッセージが送られるノードは、キャッシュ内に記憶されるデータ項目のバージョンの新しさを含むさまざまな要因に基づいて選択され得る。一実施例に従うと、マスタ１００は、書込要求メッセージを送ったノードに拘わらず、データ項目の現在のバージョンが入っているノードに書込実行メッセージを送る。
【００４４】
より特定的に、一実施例に従うとマスタは、過去イメージの中で最も高いバージョンを有するノードか、または好ましくは排他ロック（Ｘ）のホルダ（データ項目の現在のバージョンを有しているであろう）のいずれかに書込要求を送る。排他ロックホルダでなく最も高いＰＩに書込要求を送ると、現在のデータ項目は連続的に修正に応じることができる。
【００４５】
データ項目は、永続的記憶装置に書込まれている間修正してはならない。したがって、さらに修正され得る現在のデータ項目を書込むためには、これをロックして修正を防ぐか、またはこれを「複製（clone）」して、変更を異なるコピーに対して行なわせる必要がある。ロックは望ましくない。複製が可能であれば、現在のデータ項目（すなわちＸロックまたはＳロック）を有するノードに書込要求を向けることが好ましい。
【００４６】
データの現在のバージョンを永続的記憶装置に書込ませることで、永続的記憶装置の書込は可能な限り多くの変更をカバーできる。永続的記憶装置への書込が完了すると、書込完了状態と、書込まれたデータ項目のバージョン数とを伴うメッセージがマスタに送られる。マスタは永続的記憶装置にあるバージョン数を記録し、永続的記憶装置の書込により今やカバーされているデータ項目のＰＩバージョンを有するノードすべてに書込通知メッセージを送る。ノードが書込通知を受取ると、ノードはそのチェックポイントレコードを正しく進めてＰＩデータ項目をリリースできるが、これは、チェックポイントレコードに先立つダーティまたはチェックポイント待ち行列にあるすべてのデータ項目が永続的記憶装置に書込まれたか、または、他のノードにある同じデータ項目の書込に由来するマスタからの書込通知を受取ったか、のいずれかの場合に行なわれる。データ項目が書込まれるとき、マスタは書込要求の待ち行列を論理的に維持するが、受取った最も高い書込要求のバージョン数を記録するだけでよい。
【００４７】
たとえば、図２に示すシナリオでは、ノード３はＶ３についての書込要求メッセージをマスタ１００に送ってはいない。しかし、データ項目のバージョンＶ１を書込むためのノード１からの書込要求メッセージへの応答として、マスタ１００は、データ項目を書込むノードとしてノード３を選択する。ノード３は応答としてデータ項目のＶ３を書込み、書込確認メッセージをマスタ１００に送る。次にマスタ１００は書込通知メッセージをノード１に送る。
【００４８】
Ｖ３を永続的記憶装置に書込むためにノード３が選択されたので、Ｖ１およびＶ２はいずれもカバーされる。対照的に、マスタ１００が（直接書込方式に従い）Ｖ１を書込む許可をノード１に与えた場合、Ｖ２およびＶ３はカバーされないであろう。Ｖ２およびＶ３を永続的記憶装置に書込む時間が来ると、別個の書込動作を行なわなければならないであろう。
【００４９】
間接書込方式ではさらに、マスタ１００に送られなければならない書込要求メッセージの数を減少させることが試みられるが、これは、書込要求メッセージを送った該当のノードだけでなく、これを送らなかったノードにも先制的に書込通知メッセージを送ることで行なわれる。たとえば図２に示すシナリオでは、間接書込方式を用いて、ノード２がＶ２についての書込要求を送っていないにもかかわらず、マスタ１００は書込通知をノード２にも送ることになる。一実施例に従うと、マスタ１００は書込通知メッセージを該当のノードすべてに送る。
【００５０】
該当のノードは、書込通知を受取ると、データ項目の対応するバージョンについてのエントリをそのチェックポイント待ち行列からなくす。間接書込方式を用いると、チェックポイント待ち行列内のエントリの多くはこの態様でなくされてから、書込要求がこれらエントリについて送られることになるであろう。したがって、ノードによって送られる書込要求メッセージの数は、そのチェックポイント待ち行列に置かれたエントリの数よりも大幅に小さくなるであろう。
【００５１】
オーナベースの書込
間接書込方式および直説書込方式のいずれにおいても、データ項目が１つのノードのキャッシュでダーティ化されたにすぎない場合でも、書込要求メッセージがデータ項目のマスタに送られる。多くのデータベースシステムでは、データベースワーキングセットのかなりの部分がノード間で区分化され得るが、これはノード間での内部永続的記憶装置構造の区分化（たとえば各ノードについての別個のデータ項目フリーリスト）、またはノードへのトランザクションのアプリケーションレベルの経路付けのいずれかによって行なわれる。このようなシステムでは、データ項目はただ１つのノードのキャッシュでのみダーティ化されていることが頻繁にある。オーナベースの書込方式では、これらの状況下で書込要求を送る必要性が回避される。
【００５２】
オーナベースの書込方式は、データ項目のすべての書込が、データ項目の「オーナ」として現在指定されているノードによって行なわれることを引起す。直接および間接書込方式とは対照的に、データ項目のオーナがデータ項目の或るバージョンを書込みたいと望むと、オーナはデータ項目のマスタに書込要求メッセージを送ることなく、永続的記憶装置へのデータ項目の書込を許される。
【００５３】
データ項目のオーナとして動作するノードを選択するにはさまざまな要因が用いられ得る。一実施例に従うと、データ項目のオーナは以下の規則に従って選択される。
【００５４】
（１）  或るノードがデータ項目について排他ロックを付与されていれば、このノードがデータ項目のオーナと見なされる。
【００５５】
（２）  排他ロックホルダがない、すなわち多数の共有ロック（Ｓ）ホルダがある場合、データ項目に対する排他ロックを一番最近に有していたノードがデータ項目のオーナとして選択される。
【００５６】
（３）  データ項目がいかなるノードによってもダーティ化されたことがなければ、このデータ項目にはオーナはない。
【００５７】
データ項目のオーナであるノードでは、データ項目は、このノード内でダーティ化されていないかもしれないとしても、ノードのダーティまたはチェックポイント待ち行列とリンクされる。
【００５８】
データ項目のオーナがデータ項目を永続的記憶装置に書込んだ後、オーナはデータ項目が「グローバルにダーティ」であったかどうかを判断する。オーナ以外のいかなるノードによってなされたいかなる修正も、このノードによって永続的記憶装置に保存されていなければ、データ項目はグローバルにダーティである。データ項目がグローバルにダーティであった場合、オーナは書込確認メッセージをマスタに送る。次にマスタは書込通知を該当のノードに送る。データ項目がグローバルにダーティでなかった場合、オーナは書込確認メッセージをマスタに送る必要はない。
【００５９】
データ項目がグローバルにダーティであったかどうかの判断をデータ項目のオーナに対して可能にするにはさまざまな技術が用いられ得る。一実施例に従うと、グローバルダーティフラグがデータ項目と関連付けられる。ノードが永続的記憶装置にデータ項目を書込まずにデータ項目のダーティバージョンを別のノードに送ると、送る側のノードはデータ項目のグローバルダーティフラグを真にセットする。データ項目がグローバルにダーティであるかどうかを判断するには、オーナはデータ項目と関連付けられたグローバルダーティフラグを調べるだけでよい。永続的記憶装置に書込まれるデータ項目のバージョンが（１）データ項目の現在のバージョンまたは（２）最新のＰＩバージョンのいずれかである場合、オーナはデータ項目を永続的記憶装置に書込んだ後にグローバルダーティフラグを偽にセットする。
【００６０】
データ項目のグローバルダーティフラグはさまざまなやり方で記憶され得る。たとえばデータ項目がデータベースシステム内のデータ項目であれば、グローバルダーティフラグは、（１）データ項目を記憶するブロックのブロックヘッダ、（２）データ項目のデータ項目制御ブロック、（３）ロックがデータ項目の新たなオーナに付与される際におけるローカルロックマネージャ内のロック構造など、に記憶され得る。
【００６１】
図３ａを参照して、データ項目のオーナ（ノード３）が永続的記憶装置にデータ項目を書込みたいと望むシナリオが示され、ここでグローバルダーティフラグは偽にセットされる。図３ａに示すように、これらの状況下では、ノード３はマスタ１００から許可を求める必要はない。加えてノード３は、永続的記憶装置への書込動作が実行されたことをマスタ１００に通知する必要もない。
【００６２】
図３ｂを参照して、データ項目のオーナ（ノード３）が永続的記憶装置にデータ項目を書込みたいと望むシナリオが示されるが、ここではグローバルダーティフラグは真にセットされる。ここに示すシナリオでは、ノード１およびノード２は、ノード３に記憶されたバージョンＶ３よりも古いデータ項目のダーティバージョンＶ１およびＶ２を有する。図３ａに示すシナリオと同様、このシナリオでもノード３はＶ３を永続的記憶装置に書込む許可を要求する必要はない。しかしながら、グローバルダーティフラグは真であったので、ノード３はＶ３を永続的記憶装置に書込んだ後、マスタ１００に書込確認メッセージを送る。次にマスタ１００は書込通知メッセージをノード１およびノード２に送る。Ｖ３を永続的記憶装置に書込んだ後、ノード３はグローバルダーティフラグを偽にセットする。
【００６３】
図３ｃを参照して、データ項目の永続的記憶装置への書込をデータ項目の非オーナ（ノード１）が望むシナリオが示される。このシナリオでは、ノード１が書込要求メッセージをマスタ１００に送る。次にマスタ１００は、データ項目のオーナ（ノード３）に書込実行メッセージを送る。ノード３は、Ｖ３を永続的記憶装置に書込み、グローバルダーティフラグを偽にセットし、書込確認メッセージをマスタ１００に送る。次にマスタ１００は、書込通知メッセージを該当のノード（ノード１およびノード２）に送る。
【００６４】
役割ベースの方式
オーナベースの書込方式では、データ項目のオーナが、永続的記憶装置へのデータ項目の書込前にデータ項目のマスタから許可を得る必要性が回避される。しかしながら、２つのノードが同時に永続的記憶装置へのデータ項目の書込を試みる可能性を回避するために、データ項目の現在のオーナがデータ項目を永続的記憶装置に書込んでいる間、データ項目の所有権は変更を許されない。したがって、排他ロックのホルダがオーナと見なされるシステムでは、データ項目の現在のオーナがデータ項目を永続的記憶装置に書込む間、排他ロックは別のノードに転送され得ない。結果として、データ項目を修正したいと望む後続のノードへの修正許可の転送は、データ項目が永続的記憶装置に書込まれるまで遅延される。このような遅延はシステムの全体的な性能を低下させる。加えて、オーナがデータ項目をダーティ化していないかもしれないときでも、データ項目のオーナがそのダーティ待ち行列内にデータ項目をリンクしなければならないことは望ましくない。
【００６５】
役割ベースの方式では、（１）データ項目内の排他ロックの所有権と、（２）書込要求を送らずに永続的記憶装置にデータ項目を書込む許可とを別にする。データ項目内の排他ロックの所有権と、書込要求を送らずに永続的記憶装置にデータ項目を書込む許可とが別にされているため、永続的記憶装置への書込動作が進行中でも、ノード間でデータ項目の排他ロック所有権を転送できる。
【００６６】
役割ベースの方式に従うと、ロックの役割が各ロックに割当てられる。データ項目が１つのノードのキャッシュ内でのみ潜在的にダーティであり得る場合、ロック役割は「ローカル」である。したがって、データ項目に対するロックがシステム全体で初めてノードに付与される場合、ロックにはローカルの役割が付与される。役割がローカルであるロックの下でのデータ項目は、マスタの介入なしにロックを保持するノードによって永続的記憶装置から読出され、かつ永続的記憶装置に書込まれ得る。
【００６７】
或るノードのキャッシュから、異なるノードからのロック要求のためデータ項目がping outされると、データ項目が保持ノードのキャッシュにおいてダーティであれば、ロックについての役割は「グローバル」に変換される。そうでなければ、データ項目とともに転送されるロックはローカルの役割に留まる。したがって、データ項目がグローバルの役割にある必要があるのは、マルチノードシステム内のデータ項目について少なくとも１つのＰＩがある場合のみである。
【００６８】
グローバルの役割における現在のデータ項目またはＰＩデータ項目が永続的記憶装置に書込まれる必要があると、その保持ノードは、書込まれる必要があるデータ項目のバージョン数とともに書込要求メッセージをマスタに送る。マスタは、現在のデータ項目を有するノード（Ｘロックホルダ）か、または、書込まれる必要があるＰＩのバージョン数以上のバージョン数を有するあらゆるＰＩのいずれかに、書込要求を送ることができる。書込が完了すると、マスタは、永続的記憶装置に書込まれるデータ項目のバージョンによりカバーされるＰＩを有するすべてのノードに書込通知を送る。
【００６９】
排他ロックがグローバルの役割にあるノードは、その永続的記憶装置への書込動作をマスタと協調する必要もあるので、排他ロックの下にあるデータ項目が書込中であっても、排他ロックは別のノードに転送され得る。同じ理由から、ノードはこのノード内でダーティ化されていない限り、そのチェックポイントまたはダーティ待ち行列内にデータ項目をリンクしない。ダーティデータ項目がローカルの役割の下で書込まれている間にping outされると、ロック役割はグローバルに切換えられ、進行中の書込はマスタに通信される。
【００７０】
図４ａを参照して、ローカルモードのロックのホルダがデータ項目のバージョンを永続的記憶装置に書込みたいと望むシナリオが示される。ノード３が保持するロックはローカルモードにあるため、ノード３はマスタ１００からの許可を求めずに永続的記憶装置にデータ項目を書込む。ノード３はまた、データ項目が永続的記憶装置に書込まれたことをマスタ１００に知らせる必要もない。
【００７１】
図４ｂを参照して、グローバルモードのロックのホルダ（ノード３）が永続的記憶装置にデータ項目のバージョンＶ３を書込みたいと望むシナリオが示される。ロックモードはグローバルであるため、別のノードがデータ項目を書込んでいる可能性がある。したがってノード３は書込要求メッセージをマスタ１００に送る。書込要求メッセージに応答してマスタ１０は、データ項目を書出すノードを選択する。マスタ１００は、Ｖ３と少なくとも同じだけ新しいデータ項目のバージョンを有するノードを選択することが好ましい。この例では、Ｖ３がデータ項目の現在のバージョンである。したがってマスタ１００はノード３に書込実行メッセージを送り返す。
【００７２】
書込実行メッセージに応答してノード３はＶ３を永続的記憶装置に書込み、書込確認メッセージをマスタ１００に送り返す。次にマスタ１００は書込通知メッセージを該当のノード（ノード１およびノード２）に送る。
【００７３】
永続的記憶装置に書込まれるデータ項目のバージョンが現在のバージョンであれば、データ項目を永続的記憶装置に書込むノードはさらに、ロックをグローバルモードからローカルモードに変換する。現在のバージョンが永続的記憶装置に書込まれる際に変換が実行され得る。現在のバージョンを永続的記憶装置に書込むノードは、ノードがデータ項目に対する排他ロックを保持するという事実に基づき、ノードが現在のバージョンを書込んでいることを判断できる。この例ではＶ３が現在のバージョンであるため、Ｖ３を永続的記憶装置に書込んだ後、ノード３はモードをグローバルからローカルに変換する。
【００７４】
図４ｃを参照して、データ項目の現在のバージョンを保持していないノード（ノード１）が永続的記憶装置にデータ項目を書込むように要求するシナリオが示される。図４ｃに示すイベントの順番は、書込要求メッセージがノード３ではなくノード１から来る点を除き、図４ｂと同じである。
【００７５】
図４ｂに示すように、オーナベースの方式とは対照的に、役割ベースの方式ではデータ項目に対する排他ロックのオーナはやはり、ロックがグローバルモードにあるときにはマスタ１００からデータ項目を書込む許可を求めなければならない。しかしながら、オーナベースの方式とは異なり、データ項目（およびこれに対する排他ロック）は、永続的記憶装置への書込動作が完了するのを待つことなく、１つのノードから別のノードへ転送され得る。
【００７６】
たとえば図４ｄは、ノード（ノード４）がデータ項目の排他的所有権を要求した点を除き図４ｃと同じシナリオを示している。ノード３が書込実行メッセージに応答して永続的記憶装置にＶ３を書込むプロセスにあっても、ノード３はデータ項目をノード４に転送できる。排他書込ロックによって、ノード４はデータ項目の修正に進んでバージョンＶ４を作成し得る。しかしモードはグローバルであるため、ノード４はＶ４を永続的記憶装置に書込むことはできない。
【００７７】
図４ｃでは、ノード３から書込確認メッセージを受取ると、マスタ１００はローカルへの変換メッセージをノード４に送る。ローカルへの変換メッセージを受取るのに応答して、ノード４はモードをグローバルからローカルに変換する。モードがローカルに戻るように変えられた後、ノード４はマスタ１００からの許可なしにデータ項目を永続的記憶装置に書込み、かつ永続的記憶装置からデータ項目を読出す。
【００７８】
代替的な実施例では、マスタ１００は書込確認メッセージに応答してローカルへの変換メッセージを送らない。ローカルへの変換メッセージなしに、排他ロックのモードはノード４でグローバルに留まる。モードがグローバルであるため、ノード４がＶ４を永続的記憶装置に書込むことを望めば、ノード４は書込要求をマスタ１００に送ることになる。書込要求メッセージに応答してマスタ１００は、ローカルへの変換メッセージをノード４に送り得る。ノードがローカルに変換された後、ノード４はさらなる許可なしにＶ４を書込み得る。
【００７９】
書込通知の遅延
上述のシナリオでは、書込通知メッセージの送信は直ちに該当のノードすべてに対して行われ得る、または送信は該当のノードのうちいくつかまたはすべてに対して遅延され得ることに言及した。一実施例に従うと、永続的記憶装置への書込動作が実行されると、書込通知メッセージは直ちに、実行された書込でカバーされるＰＩについての書込を要求したノードに対してのみ送られる。たとえば図１でマスタ１００はノード１に書込通知メッセージを直ちに送るが、ノード２には送らない。
【００８０】
永続的記憶装置にあるデータ項目のバージョン数はこの後、マスタから他の該当のノードへ、さまざまな技術のうちいずれか１つを用いて通信され得る。たとえば永続的記憶装置にあるデータ項目のバージョン数は、（１）新たなロック要求のためのロック付与メッセージか、または（２）データ項目の現在のバージョンが別のノードに送られる必要がある際におけるpingメッセージか、の一部として通信され得る。したがって他の該当のノードは、そのＰＩを書込または交換する必要がある場合、ローカルロックマネージャとのみ通信することでそのＰＩを破棄できる。
【００８１】
メッセージのバッチ処理
マスタと該当のノードとの間で通信されるメッセージの数を減らす別の技術は、マスタからおよびここへの書込要求メッセージおよび書込通知メッセージをバッチ処理して、より少ない、より大きなメッセージにすることでメッセージの数を減らすことを含む。たとえばノード１が３つのエントリでそのチェックポイント待ち行列を進めようと望む場合、ノード１は、永続的記憶装置に書込まれなければならないすべての３つのデータ項目（およびこれらのそれぞれのバージョン）を識別する単一の書込要求メッセージをマスタ１００に送り得る。同様に、完了している永続的記憶装置への書込動作３つに対してノード１が関心を有する場合、マスタ１００は、永続的記憶装置に書込まれた３つのデータ項目（およびこれらのそれぞれのバージョン）を識別する単一の書込確認メッセージをノード１に送り得る。
【００８２】
チェックポイント待ち行列−同じデータ項目の多数の過去イメージの管理
上述のシナリオでは、各ノードのキャッシュは各データ項目について多くとも１つのＰＩを有すると仮定された。現実には、データ項目についてのいくつかのバージョンが永続的記憶装置に書込まれる前に、データ項目は多数のノードを通じて何回か循環し得る。ダーティデータ項目が別のノードにping outされるたびごとにＰＩを作成すること、および、ノードのキャッシュ内のダーティまたはチェックポイント待ち行列において異なる位置でいくつかのＰＩについてエントリがあることは適切であろう。
【００８３】
たとえば図５は、ノードのチェックポイント待ち行列５００が特定のデータ項目（データ項目５）について３つのエントリを有するシナリオを示す。具体的に、チェックポイント待ち行列は、ヘッド５０２および末尾５０４、ならびに３つのエントリ５０６，５０８，５１０を有し、これらはデータ項目５のバージョンＶ１、Ｖ６およびＶ８に対応する。同様に図６は、別のノードのチェックポイント待ち行列６００がデータ項目５について２つのエントリを有するシナリオを示す。具体的に、エントリ６０６およびエントリ６０８は、データ項目５のバージョンＶ３およびＶ７に対応する。
【００８４】
説明のため、チェックポイント待ち行列５００がノードＡ（図示せず）についてのチェックポイント待ち行列であり、チェックポイント待ち行列６００がノードＢ（図示せず）についてのチェックポイント待ち行列であると仮定する。
【００８５】
データ項目のマスタは、ダーティデータ項目が別のノードに転送された後に作成される最も新しいＰＩのバージョン数で更新される。したがって、ノードＡがデータ項目５のＶ１を作成し、データ項目５を別のノードに転送すると、データ項目５のマスタは更新されて、ノードＡがＶ１を有することを示す。この後、ノードＡがデータ項目５のＶ６を作成し、データ項目５を別のノードに転送すると、データ項目５のマスタは更新されて、ノードＡがＶ６を有することを示す。同様に、後でノードＡがデータ項目５のＶ８を作成し、データ項目５を別のノードに転送すると、データ項目５のマスタは更新されて、ノードＡがＶ８を有することを示す。
【００８６】
しかしながら、ＰＩはキャッシュ内のメモリを占め、これまたはより新しいバージョンが永続的記憶装置に書込まれるまで交換され得ない。したがってダーティデータ項目がキャッシュから転送されると、新たに作成されたＰＩは、もし存在すれば以前のＰＩと併合（交換）され得る。しかしながら、併合されたＰＩと関連付けられたチェックポイントエントリは、併合に関与した最も早いバージョンのエントリとしてダーティまたはチェックポイント待ち行列内の同じ位置に留まらなければならないが、それは、最初のＰＩが作成された際にデータ項目に対してなされた変更がデータ項目の永続的記憶装置バージョン上に反映されるまで、チェックポイントは完了したと見なされ得ないからである。さらに、ディスクへの書込動作によって併合の最後のバージョンがカバーされるまで、併合したエントリはチェックポイント待ち行列からなくされ得ない。
【００８７】
たとえば図７は、チェックポイント待ち行列５００を示すが、ここでデータ項目５のバージョンＶ１、Ｖ６およびＶ８についてのエントリ５０６，５０８，５１０は併合されて単一のエントリ７０２となっている。単一のエントリ７０２はエントリ５０６で占められていた位置にあるが、それはエントリ５０６が併合に関与した最も早いエントリであったからである。
【００８８】
併合エントリの部分的カバー
データ項目のＰＩが併合される場合、データ項目の或るバージョンが異なるノードで永続的記憶装置に書込まれる際、バージョンは、併合したＰＩに反映される変更のうちいくつかをカバーするが、すべてをカバーしないことがあり得る。たとえばノードＢがデータ項目５のＶ７を永続的記憶装置に書込む場合、併合したエントリ７０２のＶ１およびＶ６と関連付けられた変更のみがカバーされる。Ｖ８と関連付けられた変更はカバーされない。
【００８９】
永続的記憶装置バージョンが、併合したＰＩに入っている変更を完全にカバーする場合、ＰＩについてのエントリは破棄可能であり、チェックポイントはＰＩにおいてなされた最も早い変更を過ぎて進められ得る。たとえばデータ項目５のＶ９が永続的記憶装置に書込まれた場合、併合したエントリ７０２は破棄可能であろう。
【００９０】
一方、永続的記憶装置の書込が併合ＰＩの変更のうちいくつかをカバーするのみである場合、併合ＰＩについてのエントリは破棄できない。たとえばＶ７の永続的記憶装置への書込は、併合されていないエントリ５０６および５０８をチェックポイント待ち行列５００からなくすことを許しても、併合したエントリ７０２をチェックポイント待ち行列５００からなくすことは許さない。
【００９１】
部分的にカバーされた併合ＰＩについてのエントリが破棄され得ないとしても、エントリはダーティまたはチェックポイント待ち行列内で、永続的記憶装置に書込まれたバージョンの直後のバージョンについてのエントリの位置に動かされ得る。たとえばデータ項目５のＶ７が永続的記憶装置に書込まれた後、エントリ７０２は、データ項目５のＶ８についてのエントリ（すなわちエントリ５１０）があったチェックポイント待ち行列５００内の位置へ移され得る。これにより、併合ＰＩについてのエントリによってブロックされることなく、ディスクへの書込バージョンによってカバーされない最初のエントリまでチェックポイントが進行できる。
【００９２】
部分的にカバーされた併合エントリの作成の回避
或るシステムでは、ダーティまたはチェックポイント待ち行列はリンクされたリストとして実現される。リンクされたリストを走査し、待ち行列内の正しい位置に併合エントリを挿入することは、ＣＰＵ使用に関して不経済となるおそれがある。これを容易するためにメモリ内インデックスが実現可能であるが、これによってデータ項目をチェックポイント待ち行列にリンクする際に余分なオーバーヘッドが生じてしまうであろう。
【００９３】
一実施例に従うと、部分的にカバーされた併合エントリを動かすことに関わるオーバーヘッドは、部分的にカバーされた、動かされたエントリの作成を回避することで回避される。具体的に、併合動作によって、部分的にカバーされることになる併合エントリが作成されそうな場合には、併合動作は実行されない。
【００９４】
一実施例に従うと、（１）データ項目のバージョンが永続的記憶装置に書込まれており、かつ（２）データ項目がノード間で転送されるときに、マスタは、永続的記憶装置に現在書込まれているデータ項目のバージョン数（「書込中」バージョン）を、データ項目が転送されているノード（「受取る側の」ノード）に通信する。こうして受取る側のノードは、書込中バージョンと同じ、またはこれよりも早いデータ項目のいかなるバージョンも、書込中バージョンより後のデータ項目のいかなるバージョンとも併合すべきでないことを知る。
【００９５】
再び図５および図６を参照して、ノードＡがデータ項目５のＶ６を書込むプロセスにあると仮定する。書込動作が完了する前に、ノードＡはデータ項目５をノードＢに送り、ノードＢはデータ項目５についての受取ったバージョンを修正し、データ項目５のＶ７を作成する。マスタは、マスタがpingをノードＢに送る際にデータ項目５のＶ６が永続的記憶装置に書込まれたことをノードＢに知らせる。したがってノードＢはデータ項目５のＶ７をデータ項目５のＶ３と併合しないが、それは、結果としての併合データ項目がＶ６の書込によって部分的にしかカバーされないであろうからである。Ｖ６の書込はＶ３を完全にカバーするので、Ｖ６の書込が完了した後、ノードＢはＶ３を破棄し、エントリ６０６を待ち行列６００からなくすことができる。
【００９６】
したがって、永続的記憶装置への書込動作が進行中である間、書込中バージョンと少なくとも同じだけ古いバージョンと関連付けられたエントリおよびＰＩが互いに併合され、書込中バージョンよりも新しいバージョンと関連付けられたエントリおよびＰＩが互いに併合され得る。しかしながら、書込中バージョンと少なくとも同じだけ古いバージョンと関連付けられたＰＩは、書込中バージョンよりも新しいバージョンと関連付けられたＰＩと併合されるべきではない。
【００９７】
最も新しいバージョンのホルダが永続的記憶装置への書込動作を常に実行するシステムでこの技術を用いれば、永続的記憶装置への書込動作によって併合ＰＩが部分的にカバーされるということが確実になくなる。具体的に、永続的記憶装置への書込動作を受けているデータ項目を送るためにノードがpingされると、これはデータ項目の新しいバージョンをより古いバージョンと併合しないであろう。データ項目が永続的記憶装置への書込動作を受けていなければ、受取ったデータ項目は最も早いバージョンであり、この後他のノードのいずれも、このデータ項目のより早いバージョンを永続的記憶装置に書込むように頼まれることはないであろう。
【００９８】
部分的な変更をカバーする書込を回避する代替的な手法は、既存のチェックポイント待ち行列エントリと併合するのではなく、新たなチェックポイント待ち行列エントリをいつ作成すべきかを発見的に（heuristically）判定することである。たとえば、データ項目３のバージョンＶ７についてチェックポイント待ち行列エントリが存在すると仮定する。データ項目３の新たなバージョンについて新たなエントリを作成すべきか、または既存のエントリと新たなバージョンを併合すべきかを判断することが必要であり得る。併合すべきかどうかの決定はたとえば、（１）リドゥログにある最も新しい変更と、（２）ダーティまたはチェックポイント待ち行列のヘッドでのデータ項目になされた最も早い変更とに関して、既存のエントリになされた最初の変更がどれだけ古いかに基づき、発見的に決定され得る。この発見的手法では、既存のエントリと関連付けられたＰＩがかなりすぐに書込まれる（または書込によってカバーされる）であろう可能性が推定され、ノードはＰＩ内の最初の変更を過ぎてチェックポイントを拡張できる。
【００９９】
たとえば、リドゥログ内の最も新しい変更がＶ７よりもずっと遅い時間に対応し、かつチェックポイント待ち行列のヘッドにあるデータ項目がＶ７に近い時間と関連付けられていれば、既存のエントリと関連付けられたＰＩがもうすぐ書込まれる（または書込によりカバーされる）であろう可能性は高く、したがって新たなバージョンについて別個のエントリを設けるべきである。逆に、リドゥログにおける最も新しい変更がＶ７に近い時間に対応し、かつチェックポイント待ち行列のヘッドでのデータ項目がＶ７よりもずっと早い時間に対応するのであれば、既存のエントリと関連付けられたＰＩがもうすぐ書込まれる（または書込でカバーされる）可能性は低い。したがって新たなバージョンを既存のエントリに併合すべきである。
【０１００】
単一ノード故障チェックポイント待ち行列
上述のように、チェックポイント待ち行列のヘッドにあるエントリは、故障後に回復処理が始まらなければならないリドゥログ内の位置を判断する。正確な回復のためには、クラスタ内のノードがいくつ故障に関与していたかに拘わらず、チェックポイント待ち行列のヘッドでのエントリに対応する場所からリドゥログの処理を始めることが安全である。
【０１０１】
一実施例に従うと、各ノードについての２つのチェックポイント、すなわち多故障チェックポイントおよび単一故障チェックポイントを追跡し続けるためのチェックポイント機構が設けられる。多故障チェックポイントは、ノードが関与した多ノード故障の後でノードのリドゥの処理を始める位置を示す。単一故障チェックポイントは、ノードの単一ノード故障の後でノードのリドゥログの処理を始める位置を示す。
【０１０２】
以下に記載するように、多故障チェックポイント待ち行列からエントリをなくすことを許さない状況下で、単一故障チェックポイント待ち行列からエントリをなくすことができる。したがって典型的に、単一故障チェックポイントは多故障チェックポイントよりもさらに進められるであろう。単一故障チェックポイントはさらに進められるため、単一故障チェックポイントを維持すれば、その結果として、単一ノード故障から回復するために実行されなければならない作業が少なくなる。
【０１０３】
チェックポイントを進めることに関して、ノードがダーティデータ項目を別のノードに転送する際にノードの多ノード故障チェックポイントは変更しない。データ項目はダーティであったので、多故障チェックポイント待ち行列にはデータ項目についてのエントリがある。このエントリは、ダーティデータ項目が転送された後も多故障チェックポイント待ち行列に留まる。
【０１０４】
対照的に、ダーティデータ項目と関連付けられたエントリは、ダーティデータ項目が別のノードに転送される際に単一故障チェックポイント待ち行列からなくされる。転送されたダーティ項目についてのエントリを単一故障チェックポイント待ち行列からなくすことが安全であるが、それは、転送する側のノードのみが故障した場合、ダーティデータ項目になされた変更が失われないであろうからである。転送ノードのみの故障への応答として、転送ノードによってなされた変更は、受信ノードに送られたデータ項目のバージョンに反映される。これらの状況下で、変更を永続的記憶装置に確実に保存する責任がデータ項目とともに転送される。こうして、受信ノードがデータ項目に対していかなるさらなる修正も実行しない場合でも、受信ノードは（１）転送ノードによりなされた変更（または変更についてのリドゥ）を確実に永続的記憶装置に書込むこと、または（２）ダーティデータ項目（および責任）をさらに別のノードに転送することのうちいずれかを行なわなければならない。
【０１０５】
ダーティデータ項目の別のノードへの転送により、転送する側のノードは、転送したデータ項目についてのエントリを、その単一ノード故障チェックポイント待ち行列からなくすことが可能となる。したがって、単一ノード故障チェックポイント待ち行列を進めたいと望むノードは、単一ノード故障チェックポイント待ち行列のヘッドにあるエントリに対応するダーティデータ項目を、単に別のノードに転送できる。ダーティデータ項目を受取るノードがデータ項目を要求したことがなかったとしても、ダーティデータ項目の転送はこの目的のために実行され得る。
【０１０６】
これら２つのチェックポイントはさまざまなやり方で実現可能であり、この発明はいかなる特定の実現例にも限定されない。たとえば、単一故障チェックポイント待ち行列および多故障チェックポイント待ち行列は、２つの全く別個の待ち行列として維持され得る。これに代えて、単一故障チェックポイント待ち行列および多故障チェックポイント待ち行列の両方として用いられる、エントリの「組合わされた」単一の待ち行列を維持してもよい。組合わされた待ち行列を用いる場合、組合わされた待ち行列内で、単一故障チェックポイント待ち行列のヘッドにあるのはどのエントリかを識別するためにポインタを用いることがある。エントリは、多故障チェックポイント待ち行列からなくされる場合、組合わされた待ち行列からなくされる。単一故障チェックポイント待ち行列からなくされる場合、エントリはこれに従って印付けられるが、組合わされた待ち行列からなくされない。
【０１０７】
ビンベースのバッチ処理
ビンベースのバッチ方式に従うと、２つの別個のチェックポイント待ち行列、すなわちグローバルにダーティなチェックポイント待ち行列と、ローカルにダーティなチェックポイント待ち行列とがノード内に維持される。ノードのローカルにダーティなチェックポイント待ち行列は、このノードにおいてのみダーティであるデータ項目についてのエントリを含む。ノードのグローバルにダーティなチェックポイント待ち行列は、他のノードでもダーティ化されたデータ項目についてのエントリを含む。
【０１０８】
一実施例に従うと、グローバルにダーティなチェックポイント待ち行列にあるエントリはグループ化されて「ビン（bin）」となる。各々のビンは或る時間範囲と関連付けられ、この時間範囲内で最初にダーティ化されたデータ項目のバージョンについてのエントリが入っている。したがって、データ項目が時間Ｔ７，Ｔ９，Ｔ１２でダーティ化された際に作成されたデータ項目のバージョンに、併合エントリが対応する場合、この併合エントリは、Ｔ７を含む時間範囲に対応するビンに属することになるが、それはＴ７が、このエントリでカバーされる「最初にダーティ化された時間」だからである。
【０１０９】
たとえば図８は、分割されてビン８１２，８１４，８１６となったノードＸのグローバルにダーティなチェックポイント待ち行列８００を示す。ビン８１２は時間範囲Ｔ１５〜Ｔ２５と関連付けられ、最初にダーティ化された時間がＴ１５とＴ２５との間であるグローバルにダーティなデータ項目についてのエントリが入っている。ビン８１４は時間範囲Ｔ１６〜Ｔ３５と関連付けられ、最初にダーティ化された時間がＴ１６とＴ３５との間であるグローバルにダーティなデータ項目についてのエントリが入っている。ビン８１６はＴ３６〜Ｔ４５の時間範囲と関連付けられ、最初にダーティ化された時間がＴ３６とＴ４５との間であるグローバルにダーティなデータ項目についてのエントリが入っている。
【０１１０】
一実施例に従うと、各ビンには或るバージョン数が割当てられる。ビンのバージョン数はたとえば、このビンにある任意のエントリについての最初にダーティ化された時間値であり得る。たとえばビン８１２は３つのエントリ８０５，８０６，８０７を含み、これらはそれぞれデータ項目１のＶ１、データ項目５のＶ１、およびデータ項目８のＶ３と関連付けられる。データ項目１のＶ１、データ項目５のＶ１、およびデータ項目８のＶ３は最初にそれぞれ時間Ｔ１７、Ｔ１９およびＴ２３でダーティ化されたと仮定する。このシナリオでは、ビン８１２内の任意のＰＩの最も高い最初にダーティ化された時間はＴ２３である。したがってビン８１２にはバージョン数Ｔ２３が割当てられることになる。
【０１１１】
一実施例に従うと、書込要求メッセージの数は、永続的記憶装置書込サブシステムが書込要求をマスタに対して、エントリごとでなくビンごとに発行することで減少させられる。たとえばチェックポイント待ち行列８００を進めるために、ノードＸは、ビン８１２内のすべてのエントリに対応するデータ項目の書込のために単一の書込要求メッセージをマスタに送る。書込要求メッセージは、（ビン内の特定のエントリでなく）単にバージョン数Ｔ２３によってビン８１２を識別できる。書込要求に応答してマスタは、最初にダーティ化された時間が書込要求の特定するバージョン数以下であるＰＩを有するデータ項目すべての現在のロックホルダに対し、書込実行メッセージを送る。この例でマスタは、最初にダーティ化された時間がＴ２３以下であるＰＩを有するデータ項目すべての現在のロックホルダに対し、書込実行メッセージを送る。
【０１１２】
最も早い変更がＴ２３にある、またはこれよりも前であるダーティデータ項目すべてを、各ノードがディスクに書込むことを終了すると、ノードは書込確認メッセージをマスタに送る。書込実行メッセージが送られたノードすべてからマスタが書込確認メッセージを受取ると、マスタは書込通知メッセージをすべてのノードに送り、要求された書込が完了したことを知らせる。これに応答して、あらゆるノードは対応するビンを空にできる。たとえば、最初にダーティ化された時間がＴ２３にある、またはこれよりも前であるすべてのデータ項目がディスクに書込まれたことをノードＸが知らされると、ノードＸはビン８１２を空にし得る。ビン８１２を空にするには、（１）Ｔ２３の後になされた変更をカバーしないエントリすべてを破棄し、（２）Ｔ２３の後になされた変更をカバーするビン８１２内のエントリを他のビンに移すことがあり得る。たとえばエントリ８０６が、Ｔ１９およびＴ４０でなされた変更をカバーした併合エントリであった場合、ビン８１２が空にされる際にエントリ８０６はビン８１４に動かされる。
【０１１３】
一実施例に従うと、マスタは（１）ＰＩの最初にダーティ化された時間と、（２）ＰＩに対する最後の変更と関連付けられたバージョン数（「最後にダーティ化された時間」）との両方を追跡する。たとえば併合エントリ７０２について、マスタは併合エントリがバージョンＶ８（併合エントリでの最新のバージョン）およびバージョンＶ１（併合エントリでの最も早いバージョン）についてであることを知ることになる。このような実施例では、ノードはマスタからビンのバージョン数とともに書込通知を受取ると、最後にダーティ化された時間がビンバージョン数以下であるビンにあるすべてのエントリを破棄し、（２）最後にダーティ化された時間がビンバージョン数よりも大きいビンにあるすべてのエントリを、待ち行列内の次のビンへと動かすことによって、ビンを空にする。この手法では、ダーティデータ項目が別のノードに転送されたため新たなＰＩが作成されると、この新たなＰＩについてのエントリは常に、もしあれば、より古いＰＩのビン内のより古いＰＩについてのエントリと交替できるが、それは、ＰＩ内に入っている変更を部分的にカバーする書込がある際に、結果の併合ＰＩについてのエントリがその適当なビンへと動かされ得るからである。
【０１１４】
ビンベースのバッチ処理は一般に、分散ロックマネージャよりも、グローバルマスタを用いるマルチノードシステムに対してより好適である。現在のロックホルダへのメッセージは容易にバッチ処理可能であるが、なぜならこれらは同時に生成されるからである。本質的に、永続的記憶装置にあるデータ項目のバージョン数と、書込まれているプロセスにあるデータ項目のバージョン数とを追跡する代わりに、マスタはグローバルにダーティなデータ項目すべてについての永続的記憶装置バージョン数を追跡するが、これはチェックポイントレコードがノード内のダーティデータ項目すべてについての変更を追跡するのとよく似ている。
【０１１５】
回復
マルチノードシステム内で実行されるディスクへの書込動作を追跡し続けることは重要である。このような情報はたとえば、チェックポイント待ち行列からなくされ得るのはどのエントリかを判断、およびデータ項目の過去イメージがディスクに書込可能および／またはキャッシュから割当解除（「フラッシュ（flush）」）可能であるかどうかを判断するのに極めて重要である。具体的には、データ項目のより後のバージョンがディスクに既に書込まれていれば、データ項目のバージョンはディスクに書込まれてはならない。さらに、データ項目の最も新しいバージョンがディスクに書込まれた場合、データ項目のＰＩバージョンはキャッシュからフラッシュされ得る。
【０１１６】
或る状況下では、ディスクへの書込動作の実行が成功したかどうかは明らかではないこともある。たとえば、データ項目をディスクに書込むノードが書込動作中に故障した場合、故障が起こったのは書込動作が無事に完了する前か、またはその後かは明らかでないことがある。同様に、特定のデータ項目のマスタが常駐するノードが故障した場合、この故障の結果としてデータ項目についての情報が失われているおそれがある。このような情報には、ディスクに書込まれるべきデータ項目の最後のバージョンを示す情報が含まれ得る。
【０１１７】
ディスクへの書込動作の実行が成功しているかどうかが明らかでない状況が生じても、この問題は、ディスクにあるデータ項目を走査してそのバージョンを判定することで解決され得る。しかしながら、回復動作の一部としてのディスク走査はかなりの量の時間およびリソースを消費し、データが利用可能となるのを過度に遅延させるおそれがある。
【０１１８】
この発明の一局面に従うと、ディスク上のデータ項目を走査する必要性は、（１）データ項目の特定のバージョンがディスクに書込まれたかどうかが明らかでなく、かつ、特定のバージョンがディスクに書込まれたことを回復情報（たとえばリドゥログ）が示していれば、特定のデータ項目のディスクへの書込が成功したと回復プロセスに仮定させ、（２）このデータ項目についての以前にキャッシュされたバージョンすべてを「疑わしい（suspect）」として印付けることによって回避される。回復動作後、システムは逆の仮定の下で進行し得る。具体的に、データ項目の特定のバージョンがディスクに書込まれなかったという仮定の下でシステムが進行する。しかしながら、データ項目の疑わしいバージョンをディスクに書込むのに先立ち、システムはディスクに常駐するデータ項目のバージョンを読出す。データ項目のディスク上のバージョンがより新しければ、ディスクへの書込動作は実行されず、マスタには、どのバージョンがディスクにあるかが知らされる。任意に、マスタは次に書込通知メッセージを、ディスクにあるバージョンでカバーされるバージョンを保持するノードすべてに送る。一方、データ項目は回復される。
【０１１９】
同様に、ノードがデータ項目の現在のバージョンを要求すると、要求しているノードにはデータ項目の疑わしいバージョンを供給することはできないが、それはデータ項目のより新しいバージョンがディスクに入っている可能性があるからである。その代わりに、データ項目のディスク上のバージョンをディスクから読出す。ディスクから読出されるデータ項目のバージョンが最も新しいバージョンであれば、このバージョンが要求しているノードに与えられる。データ項目のディスク上のバージョンが最も新しいバージョンでなければ、故障したノードのリドゥログに維持された回復情報に基づいて、最も新しいバージョンが作成される。
【０１２０】
過去イメージを維持しないチェックポイント管理
上述のシナリオの多くで、各ノードはＰＩがディスクへの書込動作でカバーされるまでＰＩを維持するように構成されると仮定した。しかしながら、この発明の一実施例に従うと、このようなＰＩは維持されない。
【０１２１】
具体的に各ノードは、グローバルにダーティなチェックポイント待ち行列およびローカルにダーティなチェックポイント待ち行列を維持する。ローカルにダーティなチェックポイント待ち行列内のエントリと関連付けられたダーティデータ項目は、ディスクへの書込動作でカバーされるまで保持される。しかしながら、グローバルにダーティなチェックポイント待ち行列内のエントリと関連付けられたＰＩはこの態様で維持される必要はない。
【０１２２】
この実施例では、ディスクへの書込動作を実行する権利は、上述のようにデータ項目に対して保持されるロックのモードと結び付けられる。具体的に或るノードは、（１）このノードがデータ項目についての排他ロックを保持する場合、または（２）データ項目についての排他ロックを保持するノードがなく、このノードが排他ロックを保持する一番最近のノードであった場合、データ項目についてのディスクへの書込動作を実行する権利を有する。
【０１２３】
ノードはローカルにダーティなデータ項目すべてについて排他ロックを有するので、ノードは、マスタの介入なしに、ローカルにダーティな待ち行列と関連付けられたデータ項目をディスクに書込むことができるであろう。ノードはさらに、グローバルにダーティな待ち行列におけるエントリと関連付けられたデータ項目について排他ロックを有する、または一番最近の排他ロックを保持したこともあり得るため、マスタの介入なしにこのデータ項目をディスクに書込むことができることがある。
【０１２４】
ダーティデータ項目がキャッシュからping outされる際にノードはＰＩを維持しないため、特別の回復処理が必要となる。具体的には、データ項目転送中に、またはノード故障のためにデータ項目の現在のバージョンが失われると、システムは、すべてのノードの併合リドゥログからの変更を、永続的記憶装置にあるデータ項目に適用することによって、データ項目の現在のバージョンを再構成する。回復処理が始まらなければならない各リドゥログ内の場所は、ノードと関連付けられたチェックポイントによって判定される。ノード内のチェックポイントは、チェックポイントに先立ちノードでなされた変更が入っているデータ項目のバージョンが永続的記憶装置にない限り、完了したと見なされ得ない。したがってダーティデータ項目が別のノードからpingoutされると、任意のチェックポイント待ち行列内にデータ項目の過去イメージを維持する代わりに、データ項目自体を破棄でき、データ項目ヘッダまたは制御ブロックはグローバルにダーティな待ち行列内にリンクされる。
【０１２５】
グローバルにダーティな待ち行列は、エントリと関連付けられた最初にダーティ化された時間によって順序付けられ、ローカルにダーティな待ち行列と類似するが、ただし、エントリの各々について維持され関連付けられた実データ項目はない（すなわちデータ項目の内容はノードのキャッシュに存在しない）。ノード内のチェックポイントは、ローカルにダーティな待ち行列のヘッドにおけるエントリの最初にダーティ化された時間と、グローバルにダーティな待ち行列のヘッドにおけるエントリの最初にダーティ化された時間とのうち低い方となる。
【０１２６】
ノードは、そのチェックポイントを進めたいと欲すると、マスタの介入なしにローカルにダーティな待ち行列内のデータ項目を書込む（なぜなら２つのノードが同時に同じデータ項目を書込む可能性はないからである）、または書込要求をマスタに送り、グローバルにダーティな待ち行列内のデータ項目ヘッダのより現在のバージョンに対応するオーナノードにあるデータ項目を書出すことができる。
【０１２７】
これに代わる実施例に従うと、２つのチェックポイントレコードが各ノード（各待ち行列に１つずつ）で記憶される。１番目のチェックポイントレコードは時間ＴＸを示すが、ここでＴＸに先立ちノードのキャッシュ内で現在ダーティであるデータ項目になされた変更すべては、永続的記憶装置にあるデータ項目のバージョンに記録されている。２番目のチェックポイントレコードは、このノードでなされた最初の変更のバージョン数と、このノードにおいて１回ダーティ化されたが、その後でping outされて、永続的記憶装置に書込まれていないデータ項目のリストとからなる。一旦pingされるとキャッシュはダーティデータ項目を追跡できなくなるが、一方でマスタにおいてロックをなおオープンのままにしておく（すなわちロックは書込通知があるまでクローズにされない）。
【０１２８】
ノードで故障が起こると、故障したノードでのリドゥログを走査するための開始位置は、（１）１番目のチェックポイントレコード（またはローカルチェックポイントレコード）により判定されるログ内の位置と、（２）２番目のチェックポイントレコードでのデータ項目のリストに対してなされた最も早い変更によって判定されるログ内の位置（これはグローバルチェックポイントレコードの、この特定のノードの部分として見なされ得る）とのうち、より少ない方を判定することで計算される。
【０１２９】
回復中、ノードのグローバルチェックポイントレコードとノードのローカルチェックポイントレコードとの間（グローバルチェックポイントレコードがローカルチェックポイントレコードより後であると仮定して）のログ部分についての潜在的なリドゥのために考慮される必要があるのは、グローバルチェックポイントレコードにあるデータ項目に対応するログレコードのみである。一旦ローカルチェックポイントレコードに達すると、ログの終端に達するまで、すべてのログレコードが潜在的なリドゥのために考慮される必要がある。
【０１３０】
この手法は、２番目のチェックポイントレコードにおけるデータ項目のリストを、（システム全体におけるダーティデータ項目すべてではなく）このノードで以前にダーティ化されたデータ項目のみに制限する点で、先行技術の方式よりも優れている。第２に、各ノードのグローバルチェックポイントレコードは他のノードとは独立に書込可能である（すなわちグローバルマスタまたはＧＬＭチェックポイントを調整する必要がない）。最後に、回復中に走査される必要がある各ノードのリドゥログの部分は常により短いが、それはあらゆるノードについてのリドゥログが、システム全体で以前に書込まれていない変更から走査される必要がないからである。
【０１３１】
さらに、グローバルキャッシュが存在する先行技術の永続的記憶装置書込プロトコルは、クロックからの値がログシーケンス数（ＬＳＮ）として用いられる同期グローバルクロックへのアクセスを仮定している。ここに記載の技術では、同期グローバルクロックへのアクセスは必要でない。さらに先行技術では、クラスタ内のダーティデータ項目の回復シーケンス数およびロック首尾一貫性を維持するグローバルマスタ（ＧＬＭ）が必要である。加えて先行技術は、マスタがいくつかのノードにわたって分散されるシステム（ＤＬＭ）に容易に拡張できない。
【０１３２】
ハードウェア概要
図９は、この発明の実施例が実現され得るコンピュータシステム９００を例示したデータ項目の図である。コンピュータシステム９００は、情報の通信を行なうためのバス９０２または他の通信メカニズム、および、情報を処理するための、バス９０２に結合されるプロセッサ９０４を含む。コンピュータシステム９００はまた、プロセッサ９０４によって実行されるべき情報および命令の記憶のための、バス９０２に結合されるランダムアクセスメモリ（ＲＡＭ）または他の動的記憶装置等のメインメモリ９０６を含む。メインメモリ９０６はまた、プロセッサ９０４によって実行されるべき命令の実行中に一時的数値変数または他の中間情報を記憶するために用いられ得る。コンピュータシステム９００はさらに、プロセッサ９０４のための命令および静的情報を記憶するための、バス９０２に結合される読出専用メモリ（ＲＯＭ）９０８または他の静的記憶装置を含む。磁気永続的記憶装置または光学永続的記憶装置等の記憶装置９１０が、設けられ、情報および命令を記憶するためにバス９０２に結合される。
【０１３３】
コンピュータシステム９００は、コンピュータユーザに情報を表示するための、陰極線管（ＣＲＴ）等のディスプレイ９１２にバス９０２を介して結合され得る。英数字および他のキーを含む入力装置９１４がバス９０２に結合されて、情報およびコマンド選択をプロセッサ９０４に伝達する。別の種類のユーザ入力装置は、方向情報およびコマンド選択をプロセッサ９０４に伝達し、さらにはディスプレイ９１２上でのカーソルの動きを制御するための、マウス、トラックボール、またはカーソル方向キー等のカーソル制御９１６である。この入力装置は、典型的には、２つの軸、第１の軸（たとえば、ｘ）と第２の軸（たとえば、ｙ）とにおいて２自由度を有し、これによって、装置が平面で位置を特定することが可能となる。
【０１３４】
この発明は、ここで説明される技術を実現するためのコンピュータシステム９００の用途に関連する。この発明の１つの実施例に従うと、これらの技術は、メインメモリ９０６内に含まれる１つ以上の命令の１つ以上のシーケンスをプロセッサ９０４が実行することに応答して、コンピュータシステム９００によって行なわれる。このような命令は、記憶装置９１０等の別のコンピュータ読出可能な媒体からメインメモリ９０６へと読出され得る。メインメモリ９０６内に含まれる命令シーケンスの実行によって、プロセッサ９０４がここで説明されるプロセスステップを実行させられる。代替的な実施例では、ソフトウェア命令の代わりに、またはソフトウェア命令と組合せてハードワイヤード回路を用いてこの発明を実現することもできる。したがって、この発明の実施例は、ハードウェア回路とソフトウェアとの特定のいずれかの組合せに限定されない。
【０１３５】
ここで用いられるような用語「コンピュータ読出可能な媒体」は、実行のために命令をプロセッサ９０４に提供するいずれかの媒体を指す。このような媒体は、不揮発性媒体、揮発性媒体、および送信媒体を含むがそれらに限定されない多くの形をとり得る。不揮発性媒体は、たとえば、記憶装置９１０等の光学永続的記憶装置または磁気永続的記憶装置を含む。揮発性媒体は、メインメモリ９０６等のダイナミックメモリを含む。送信媒体は、バス９０２を含むワイヤを含んだ、同軸ケーブル、銅ワイヤ、および光ファイバを含む。送信媒体はまた、電波および赤外線データ通信中に生成されるような音波または光波の形をとり得る。
【０１３６】
コンピュータ読出可能な媒体の一般的な形は、たとえば、フロッピー（Ｒ）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、または他のいずれかの磁気媒体、ＣＤ−ＲＯＭ、他のいずれかの光学媒体、パンチカード、ペーパーテープ、ホールパターンを備えた他のいずれかの物理的な媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、フラッシュＥＰＲＯＭ、他のいずれかのメモリチップまたはカートリッジ、以下で説明されるような搬送波、またはコンピュータがそこから読出可能な他のいずれかの媒体を含む。
【０１３７】
種々の形のコンピュータ読出可能な媒体は、実行のために１つ以上の命令の１つ以上のシーケンスをプロセッサ９０４に搬送することに関与し得る。たとえば、命令は、最初にリモートコンピュータの磁気ディスク上で搬送され得る。リモートコンピュータは、命令をそのダイナミックメモリにロードし、モデムを用いて電話線上で命令を送信し得る。コンピュータシステム９００にとってローカルなモデムは、電話線上のデータを受信し、赤外線トランスミッタを用いてデータを赤外線信号に変換し得る。赤外検出器が、赤外線信号で搬送されたデータを受信し得、適切な回路がデータをバス９０２上に置き得る。バス９０２は、データをメインメモリ９０６へと搬送し、ここから、プロセッサ９０４は命令を取出し、実行する。メインメモリ９０６が受取る命令は、任意で、プロセッサ９０４による実行の前に、またはその後に、記憶装置９１０上に記憶され得る。
【０１３８】
コンピュータシステム９００はまた、バス９０２に結合される通信インターフェイス９１８を含む。通信インターフェイス９１８は、ローカルネットワーク９２２に接続されるネットワークリンク９２０に対する双方向データ通信結合を提供する。たとえば、通信インターフェイス９１８は、統合サービスデジタル通信網（ＩＳＤＮ）カードまたはモデムであってデータ通信接続を対応する種類の電話線に提供し得る。別の例として、通信インターフェイス９１８は、ローカルエリアネットワーク（ＬＡＮ）カードであってデータ通信接続を適合したＬＡＮに提供し得る。ワイヤレスリンクも実現され得る。このようないずれの実現例でも、通信インターフェイス９１８は、種々の種類の情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号、または光信号を送受信する。
【０１３９】
ネットワークリンク９２０は、典型的には、１つ以上のネットワークを通して他のデータ装置にデータ通信を提供する。たとえば、ネットワークリンク９２０は、ローカルネットワーク９２２を通してホストコンピュータ９２４へと、またはインターネットサービスプロバイダ（ＩＳＰ）９２６によって動作されるデータ装置へと、接続を提供し得る。ＩＳＰ９２６は、次に、現在「インターネット」９２８と通例呼ばれるワールドワイドパケットデータ通信ネットワークを通してデータ通信サービスを提供する。ローカルネットワーク９２２およびインターネット９２８の両方は、デジタルデータストリームを搬送する電気信号、電磁信号、または光信号を用いる。コンピュータシステム９００へと、およびコンピュータシステム９００からデジタルデータを搬送する、ネットワークリンク９２０上にあり通信インターフェイス９１８を通る信号および種々のネットワークを通る信号は、情報を運ぶ搬送波の例示的な形である。
【０１４０】
コンピュータシステム９００は、ネットワーク、ネットワークリンク９２０、および通信インターフェイス９１８を通して、プログラムコードを含むメッセージを送信し、プログラムコードを含むデータを受信し得る。インターネットの例では、サーバ９３０は、インターネット９２８、ＩＳＰ９２６、ローカルネットワーク９２２、および通信インターフェイス９１８を通して、アプリケーションプログラムのための要求されたコードを送り得る。
【０１４１】
受信されたコードは、それが受信される時にプロセッサ９０４によって実行され得、および／または、後の実行のために記憶装置９１０に、または他の不揮発性記憶装置に記憶され得る。この様態で、コンピュータシステム９００は、搬送波の形のアプリケーションコードを得ることができる。上の明細書では、この発明は、その具体的な実施例を参照しながら説明された。しかし、この発明のより広い思想および範囲から逸脱することなく、この発明に対して種々の変形および変更が可能であることは明らかであろう。したがって、明細書および図面は、限定的な意味ではなく例示的な意味で理解されるべきである。
【図面の簡単な説明】
【０１４２】
【図１】この発明の実施例に従った直接書込方式においてどのようにディスクへの書込動作が調整されるのかを例示するブロック図である。
【図２】この発明の実施例に従った間接書込方式においてどのようにディスクへの書込動作が調整されるのかを例示するブロック図である。
【図３ａ】グローバルダーティフラグが偽である場合にオーナーベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。
【図３ｂ】グローバルダーティフラグが真である場合にオーナーベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。
【図３ｃ】書込要求がオーナーからではない場合にオーナーベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。
【図４ａ】モードがローカルである場合に役割ベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。
【図４ｂ】モードがグローバルである場合に役割ベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。
【図４ｃ】要求が排他ロックホルダからでない場合に役割ベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。
【図４ｄ】転送が書込動作中に行なわれる場合に役割ベースの書込方式においてどのようにディスクへの書込動作が調整されるのかを例示する、この発明の実施例に従ったブロック図である。
【図５】チェックポイント待ち行列を例示するブロック図である。
【図６】チェックポイント待ち行列を例示するブロック図である。
【図７】併合されたエントリを備えるチェックポイント待ち行列を例示するブロック図である。
【図８】エントリがバッチされてビンになる、チェックポイント待ち行列を例示するブロック図である。
【図９】この発明の実施例が実現され得るコンピュータシステムを例示するブロック図である。
【図１】
2005506598.tif 000003
【図２】
2005506598.tif 000004
【図３ａ】
2005506598.tif 000005
【図３ｂ】
2005506598.tif 000006
【図３ｃ】
2005506598.tif 000007
【図４ａ】
2005506598.tif 000008
【図４ｂ】
2005506598.tif 000009
【図４ｃ】
2005506598.tif 000010
【図４ｄ】
2005506598.tif 000011
【図５】
2005506598.tif 000012
【図６】
2005506598.tif 000013
【図７】
2005506598.tif 000014
【図８】
2005506598.tif 000015
【図９】
2005506598.tif 000016
【国際公開パンフレット】
2005506598.tif 000017
2005506598.tif 000018
2005506598.tif 000019
2005506598.tif 000020
2005506598.tif 000021
2005506598.tif 000022
2005506598.tif 000023
2005506598.tif 000024
2005506598.tif 000025
2005506598.tif 000026
2005506598.tif 000027
2005506598.tif 000028
2005506598.tif 000029
2005506598.tif 000030
2005506598.tif 000031
2005506598.tif 000032
2005506598.tif 000033
2005506598.tif 000034
2005506598.tif 000035
2005506598.tif 000036
2005506598.tif 000037
2005506598.tif 000038
2005506598.tif 000039
2005506598.tif 000040
2005506598.tif 000041
2005506598.tif 000042
2005506598.tif 000043
2005506598.tif 000044
2005506598.tif 000045
2005506598.tif 000046
2005506598.tif 000047
2005506598.tif 000048
2005506598.tif 000049
2005506598.tif 000050
2005506598.tif 000051
2005506598.tif 000052
2005506598.tif 000053
2005506598.tif 000054
2005506598.tif 000055
2005506598.tif 000056
2005506598.tif 000057
2005506598.tif 000058
2005506598.tif 000059
2005506598.tif 000060
2005506598.tif 000061
2005506598.tif 000062
2005506598.tif 000063
2005506598.tif 000064
2005506598.tif 000065
2005506598.tif 000066
2005506598.tif 000067
2005506598.tif 000068
2005506598.tif 000069
2005506598.tif 000070
2005506598.tif 000071
2005506598.tif 000072
2005506598.tif 000073
【国際公開パンフレット（コレクトバージョン）】
2005506598.tif 000074
2005506598.tif 000075
【国際調査報告】
2005506598.tif 000076
2005506598.tif 000077
2005506598.tif 000078
2005506598.tif 000079
2005506598.tif 000080