(57)【特許請求の範囲】
【請求項１】
タプル指向ファイルシステムにおいて、
データベースに対する処理を行うデータアクセス手段は、タプルの削除又は縮小によりページ内に生じる空き領域の総和サイズを増加させたトランザクションが稼動中の場合は、当該トランザクション以外のトランザクションが前記空き領域を使用しないよう制御する、タプル単位排他制御方法。
【請求項２】
前記データアクセス手段は、ロールバックにより復元されるタプルが、前記ページの未使用領域サイズより小さい又は等しい場合は、前記ページの未使用領域から削除された又は更新前のタプルを前記未使用領域に追加し、前記ページの未使用領域サイズより大きい場合は、前記タプルの再詰め込みを行い、タプル最後端位置から前記復元されるタプルを追加する、請求項１記載のタプル単位排他制御方法。
【請求項３】
前記データアクセス手段は、前記空き領域を増加する処理を行うときに、前記空き領域を使用禁止とする、請求項１記載のタプル単位排他制御方法。
【請求項４】
前記データアクセス手段は、前記空き領域を増加させた処理を発行した稼働中のトランザクションが当該ページに一つしか存在しない場合は、当該トランザクションからの処理に限り前記空き領域を使用する、請求項２記載のタプル単位排他制御方法。
【請求項５】
前記データアクセス手段は、前記空き領域を増加させた稼働中のトランザクションが当該ページに一つしか存在しない場合に、未使用領域と隣接する空き領域の使用を可能とするよう制御する、請求項２記載のタプル単位排他制御方法。
【請求項６】
前記データアクセス手段は、タプル追加のロールバック処理として前記タプルの削除を行い、タプル更新のロールバック処理として前記タプルの位置に前記タプルの更新前タプルを復元し、前記タプル追加又はタプル更新のロールバック処理により生じた領域を空き領域として管理する、請求項２記載のタプル単位排他制御方法。
【請求項７】
タプル指向ファイルシステムにおいて、
データベースに対する処理を行うデータアクセス手段は、先発のタプルを削除するトランザクションによりタプルを削除し、当該タプルの位置情報を削除状態にして後発のタプルを追加するトランザクションが同じページ内にタプルを追加する場合、前記削除状態にあるタプルの長さとページの未使用領域長を加えた長さが追加するタプルの長さよりも長い場合には、前記削除状態にあるタプルに対して排他制御を要求し、前記タプルを削除するトランザクションが稼働中の場合は排他制御を拒否することによって前記削除状態にあるタプルの領域に対するタプルの追加を禁止し、前記タプルを削除するトランザクションが稼働完了している場合は排他制御を許可することによってタプルの追加を可能とする、タプル単位排他制御方法。
【請求項８】
前記データアクセス手段は、タプルの追加時に削除状態にあるタプルの長さとページの未使用領域長を加えた長さが追加するタプルの長さよりも短い場合、前記削除状態のタプルの長さが使用可能かどうかを判定し、使用可能ならば前記削除状態の領域サイズを加え、前記削除状態のタプルの位置情報を空き状態にし、ページ内のすべての削除状態にあるタプルの長さが前記追加するタプルの長さより短い場合、ページ内の未使用領域を拡張することにより、前記追加するタプルを拡張された未使用領域に挿入する、請求項７記載のタプル単位排他制御方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、複数のトランザクションからアクセスされるデータを記憶したデータベースを管理するデータベース管理システムにおける、タプル単位排他制御方式に関する。
【０００２】
最近、複数のトランザクションからアクセスされるデータを記憶したデータベースを管理するデータベース管理システムとして、タプル指向ファイルシステムが用いられている。
【０００３】
データベースのレコードをタプル指向ファイルシステムで構成する場合、ジム・グレイ、アンドレアス・リュータ；「トランザクション  プロセシング：コンセプト  アンド  テクニック」、モーガン  カウフマン出版、1993年発行(Jim Gray, Andreas Reuter; TRANSACTION PROCESSING: CONCEPTS AND TECHNIQUES, Morgan Kaufmann Publishers, Inc., 1993)に示されるように、ページは複数のレコードを含み、各レコードはタプルとして表される。図２にページの構成例を示す。ページ２０１はタプル２０２とスロット２０３を含む。スロットは、そのスロットが指すタプルのページ内の位置を記憶しており、各タプルは、ページの番号とスロット番号（以降、物理識別番号と記す）によって一意に識別される。タプルの追加はアドレスの正の方向に追加され、スロットはアドレスの負の方向に増加する。
【０００４】
ページ内の状態はページヘッダ２０７で管理されており、そこにはページ内の未使用領域２０５の先頭オフセット２０６、タプルの削除、あるいはタプルが短くなった場合に発生する空き領域２０４のサイズ、ページに割当てられた最大スロット番号、現在使用中のスロット数等が管理されている。
【０００５】
ページにタプルを追加する場合、未使用領域２０５が新たなタプル追加に必要なサイズより大きい場合は未使用領域の先頭オフセット２０６よりタプルを追加する。一方、未使用領域は十分な大きさではないが、未使用領域サイズと空き領域サイズとの和が新たなタプル追加に必要なサイズより大きい場合は、ページのコンパクションを行いタプルを追加する。未使用領域サイズと空き領域サイズとの和がタプル追加に十分な大きさでない場合は、別のページに挿入する、又は当該ページにタプルの一部分を挿入して残りを他のページに挿入する等の方法がある。
【０００６】
通常データベースは複数のトランザクションから同時にアクセスされるが、上記のタプル指向ファイルシステムでは、あるトランザクション１がページからタプルを削除した後、当該トランザクションの終了より前に別のトランザクション２が当該ページのコンパクションを行って別のタプルの追加を行い、コミット（データの更新）したとする。この後、トランザクション１がロールバックした時に、当該ページにタプルを復元するだけの空き領域がない場合、タプルの復元ができない。
【０００７】
この問題を解決するため、ページに対してアクセスを行ったトランザクションが終了するまで当該ページに排他ロックを取る方法や、タプルの削除等ページ内の未使用領域あるいは空き領域が大きくなった場合に、当該ページの未使用領域サイズを管理する未使用領域テーブルに対してトランザクション終了までロックを取り、タプルの追加等、当該ページの未使用領域サイズを消費する処理を行う場合は、この処理を行う前に未使用領域テーブルに対してロックが確保されてから処理を行って、タプルの復元に必要な領域を確保する方法などがある。
【０００８】
【発明が解決しようとする課題】
上記従来技術の前者の方法では、トランザクション終了まで当該ページに含まれる他のタプルに対する他のトランザクションからのアクセスが妨げられることになり、トランザクションの並行性が低下する。また、後者の方法では他のタプルの参照や、当該ページの未使用領域あるいは空き領域を消費しない更新、削除等のアクセスは可能であるが、タプルの追加や未使用領域を消費する更新等が妨げられ、当該ページ内の未使用領域や空き領域を有効に利用できない。
【０００９】
オブジェクト指向データベース等では、通常１つ以上のタプルを組み合わせて複雑なデータ構造を表現するが、これらのデータに対するアクセス速度を向上させるために、これらの複数のタプルをできるだけ同一ページ内に配置する格納スキーマが採用されている。後者の方法では、ページ内のタプルの削除、更新等が行われた場合に他のタプルを同一ページに格納することができず、複雑な構造を持つデータに対するアクセス速度が遅くなる。
【００１０】
本発明の第一の目的は、タプル指向ファイルシステムにおいてロールバック処理時に、タプルの物理識別番号を変化させずにタプルを復元することが可能であり、かつトランザクションの並行性を低下させないタプル単位排他制御方式を提供することである。
【００１１】
本発明の第二の目的は、ページ内の空き領域や未使用領域を有効に利用することが可能な、タプル単位排他制御方式を提供することである。
【００１２】
【課題を解決するための手段】
上記の目的は、次のような発明によって達成される。すなわち、第一の目的を達成するために、タプルに対する排他制御を要求する処理と、ページに対する排他制御を要求する処理と、ページの空き領域に対する排他制御を要求する処理と、ページの空き領域が使用可能かどうかを判定する処理を持つタプルアクセス手段と、改良されたコンパクション手段を持ち、ページ内の空き領域の総和サイズを増加させたトランザクションが稼働中かどうかを判定し、稼働中であれば当該ページの空き領域が使用されないようにするタプル単位排他制御方式を提供する。
【００１３】
第二の目的を達成するために、ページ内のタプルの最後端の位置を記憶する手段と、改良されたコンパクション手段とを設け、タプルの格納時に当該ページ内のタプルの最後端の位置及び空き領域サイズの更新と、タプルの格納に未使用領域を使用する場合は未使用領域管理情報の更新とを行うタプル単位排他制御方式を提供する。
【００１４】
【作用】
第一の目的は以下のように達成される。あるトランザクションがページからタプルを削除する等して、ページ内の空き領域サイズを増加させた場合、ページの空き領域に対する排他制御を要求する処理により、当該ページの空き領域の使用を行えないようにする。
【００１５】
一方、タプルの追加・更新等の処理で当該ページの未使用領域以外に空き領域の使用が必要な場合は、上記要求手段に対して当該ページの空き領域が使用可能かどうかを判定し、使用可能な場合のみ使用するよう制御する。
【００１６】
この後、当該ページ内の空き領域を増加させたトランザクションがロールバックを行う場合、本発明によって提供される排他制御方法、及び未使用エリアにタプルが追加できない場合に改良されたコンパクションを行い、コンパクションによって生じる領域を全て空き領域として管理し、他のトランザクション（ロールバック中のトランザクションを除く）が当該領域を使用できないようにすることにより、当該ページ内の空き領域を保証することができる。
【００１７】
従って、タプルの物理識別番号を変更することなく、当該トランザクションのロールバックを行うことが可能となる。このため、当該ページに対する排他制御は、当該ページに対するアクセスが行われている間のみで良くなり、トランザクション処理の並行性を向上させることができる。
【００１８】
第二の目的は以下のように達成される。すなわち、ページの空き領域の総和サイズを増加させたトランザクションが当該ページに対して一つの場合で、未使用領域はタプルの格納に十分な大きさではないが、空き領域のサイズを加えるとタプルの格納に必要なサイズが確保される場合に、ページ内のタプルの最後端の位置より後にタプルの追加が可能であれば、ページ内のタプルの最後端の位置より、またそうでない場合は、改良されたコンパクションを行なった後のページ内のタプルの最後端の位置より、本発明によって提供されるページ管理方法を用いてタプルを追加することにより、ページ内の空き領域を有効に使用できる。
【００１９】
上記の場合、稼働中トランザクションが増加させたページの空き領域を使用するトランザクションは、当該トランザクションのみである。また、ロールバック時に、当該ページの空き領域を使用していたタプルは、削除されていたタプルの回復を行うまでに当該ページの領域を使用しないように制御される。このため、タプルのロールバックに必要な領域は、削除されていたタプルのロールバック時には確保されていることになり、ロールバック処理においてタプルの物理識別番号を変更せずに、タプルの復元を行うことが可能となる。
【００２０】
さらに、第一の目的は、さらに、以下のように達成される。あるトランザクションがページからタプルを削除する場合、ページ内に設定されている削除されたタプルの位置情報を正値から負値に反転させることで削除状態にし、削除されたタプルのイメージはそのままにしておくことにより、当該トランザクションが稼働完了するまで当該プルに対する排他制御を要求する処理により、当該タプルの領域を使用することができないように制御する。
【００２１】
一方、タプルの追加で当該ページの未使用領域以外に当該ページの全空き領域の使用が可能な場合、当該ページ内に確保されたすべてのタプルの位置情報を参照し、位置情報が負値の場合は位置情報が示したタプルのイメージを参照し、タプル中に格納されたタプル長と未使用領域とを加算した長さが追加するタプルの長さより長い場合、当該タプルに対する排他制御を要求する処理により、排他が許可されれば削除状態のタプルの領域を使用してタプルを追加できる。
【００２２】
【実施例】
図１〜図３３を用いて、本発明の実施例を説明する。
図１は、本発明が実施されるデータベース管理システムのブロック図を示すものである。データベース２を管理するデータベース管理システム１には、トランザクション管理手段３、排他制御管理手段４、ジャーナル管理手段５、及びデータアクセス管理手段６が含まれる。
【００２３】
本発明で提供されるタプル単位排他制御方式は、データアクセス管理手段６に組み込まれ、それらはタプルアクセス制御手段７、ページ空き領域排他通知処理８、タプル物理識別子排他要求処理９、ページコンパクション手段１０、改良されたページコンパクション手段１１、ページ空き領域使用判定及び制御処理１２、及びページ排他要求処理１３が含まれる。
【００２４】
本実施例において、タプル排他要求処理９、空き領域使用判定及び制御処理１２、及びページ排他要求処理１３は、タプルアクセス制御手段７で用いられるアルゴリズムの一部として実現されている。ページ空き領域排他要求処理８は、空き領域使用判定及び管理処理１２のアルゴリズムの一部として実現されている。
【００２５】
また、ページコンパクション手段１０、改良されたページコンパクション手段１１は、タプルアクセス制御手段７より必要に応じて呼び出される。タプル排他要求処理９、ページ排他要求処理１３、及びページ空き領域排他要求処理８で出された排他要求は、排他制御管理手段４において管理される。また、タプルの追加、削除、更新時にデータアクセス管理手段から取得要求が出されるジャーナルは、ジャーナル管理手段５を通して取得される。
【００２６】
まず、本発明の実施例で用いられるデータ構造について説明する。
図２にページの構成例を示す。ページ２０１はタプル２０２とスロット２０３を含む。スロットは、そのスロットが指すタプルのページ内の位置を記憶しており、各タプルは、ページの番号とスロット番号（以降、物理識別番号と記す）によって一意に識別される。タプルの追加はアドレスの正の方向に追加され、スロットはアドレスの負の方向に増加する。ページはデータベース２中に記憶されており、必要に応じてメモリ（図示せず）に読み込まれる。
【００２７】
ページ内の状態を示すページ制御情報はページヘッダ２０７で管理されており、そこにはページ内の未使用領域２０５の先頭オフセット２０６、タプルの削除、あるいはタプルが短くなった場合に発生する空き領域２０４のサイズ、ページに割当てられた最大スロット番号、現在使用中のスロット数等が管理されている。これらのデータは、タプルアクセス手段により、新規にページが割り当てられた場合に初期化され、タプル追加、削除、更新時に更新される。また、これらの処理を行うにあたり、ページのコンパクションが行われたときは、ページコンパクション手段１０あるいは改良されたページコンパクション手段１１により更新される。
【００２８】
図３はページ制御情報２０７の例である。ページ制御情報２０７は、ページ内割当てスロット数管理部３０２、使用スロット数管理部３０３、空き領域総和サイズ管理部３０４、未使用エリア先頭オフセット管理部３０５、タプル最後端オフセット管理部３０６から構成される。タプル最後端オフセットとは、未使用エリアに隣接する空き領域の先頭オフセットであり、未使用エリアに隣接する空き領域がない場合は、未使用エリア先頭オフセットと等しい値を持つ。
【００２９】
ページの初期化時に、割り当てスロット数３０２及び使用スロット数３０３、空き領域総和サイズ３０４は０に、未使用領域先頭オフセット３０５及びタプル最後端オフセット３０６はヘッダ２０７の長さに初期化される。
【００３０】
割り当てスロット数３０２は、タプルの追加、及び削除時にタプルアクセス制御手段７により、また、ページコンパクション時にページコンパクション手段１０により更新され、ページコンパクション手段１０および改良されたページコンパクション手段１１、タプルアクセス制御手段７により参照される。使用スロット数３０３は、タプルアクセス制御手段７により参照、更新される。空き領域総和サイズ３０４、及び未使用領域先頭オフセット３０５は、タプルアクセス制御手段７及びページコンパクション手段１０により更新され、タプルアクセス制御手段７により参照される。タプル最後端オフセット２０７は、タプルアクセス制御手段７及びページコンパクション手段１０、１１により更新され、タプルアクセス制御手段７により参照される。
【００３１】
次に、本発明で用いられるアルゴリズムについて説明する。なお、ページに対するロックは、セマフォで行うことも可能である。また、ページのメモリ上への固定要求および解放要求は、ページに対するロック要求およびロック解放要求時に同時に行われるものとする。
【００３２】
図４は、タプルの追加を行う場合にタプルを追加するスロットを求めるアルゴリズムであり、タプルアクセス制御手段７で実行される。ステップ４０１で先頭のスロットを求め、ステップ４０２で割当てスロット数分ループし、使用可能スロットを求める。ステップ４０３で当該スロットが空いているかどうかを判定する（空いていればスロット値が−１）。スロットが空いていた場合、当該スロットに排他ロック（以降Ｘロックと記す）が可能かどうかをテスト（ステップ４０４）し、ロック可能であればタプルを追加するスロット番号を当該スロット番号とし（ステップ４０６）、０を返す（ステップ４０７）。ステップ４０３又は４０４でＮの場合は次スロットを求め（ステップ４０５）、再度ループする（ステップ４０２ｅ）。ステップ４０２で示される条件が満たされるまで、ステップ４０２から４０２ｅの間に含まれる処理が繰り返される。全ての割当てスロットを調べたが、タプルを追加するスロットが求められなかった場合は、タプルを追加するスロット番号を割当てスロット数＋１とし（ステップ４０８）、１を返す（ステップ４０９）。
【００３３】
図５は、ページコンパクション手段１０によって実行されるコンパクションアルゴリズムである。まず、ワークエリアの初期化を行う（ステップ５０１）。次に、先頭スロットを求め（ステップ５０２）、未使用領域先頭オフセットをヘッダ直後に位置付けてから、割当てスロット数分ループを行う（ステップ５０３）。ステップ５０４でスロットが使用中かどうかを判定し、使用中であれば（スロットの値が−１ではない）、現在のスロット番号を最大使用スロット番号として保持する（ステップ５１０）。そして、スロット値が０かどうかを判定し（ステップ５１１）、０でなければタプルをワークエリアの未使用エリア先頭オフセットからコピーし（ステップ５０５）、ワークエリアの未使用エリア先頭オフセットを更新する（ステップ５０６）。その後、次スロットを求める（ステップ５０７）。全てのタプルのコピーが終了したら（ステップ５０３ｅ）、ワークエリアの使用スロット数、割当てスロット数、タプル最後端オフセットを更新し（ステップ５０８）、ワークエリアの内容をページにコピーする（ステップ５０９）。
【００３４】
図６は、改良されたページコンパクション手段１１によって実行される改良されたコンパクションアルゴリズムである。図５に示したアルゴリズムとの相違は、未使用領域先頭オフセットおよび割当てスロット数を変更しないことである。改良されたコンパクションは、以下のように行われる。まずワークエリアの初期化を行う（ステップ６０１）。次に、先頭スロットを求め（ステップ６０２）、タプル最後端オフセットをヘッダ直後に設定してから割当てスロット数分ループを行う（ステップ６０３）。ステップ６０４でスロットが使用中かどうかを判定し、使用中であればタプルをワークエリアの未使用エリア先頭オフセットからコピーし（ステップ６０５）、ワークエリアのタプル最後端オフセットを更新し（ステップ６０６）、次スロットを求める（ステップ６０７）。全てのタプルのコピーが終了したら（ステップ６０３ｅ）、ワークエリアの使用スロット数、未使用エリア先頭オフセットを更新し（ステップ６０８）、ワークエリアの内容をページにコピーする（ステップ６０９）。
【００３５】
図３のタプル最後端オフセット領域３０６を使用しない場合は、上記のコンパクション及び改良されたコンパクションにおいて、タプル最後端オフセット領域のメンテナンスが不要となる。また、改良されたコンパクションにおいては、タプル最後端オフセットの代わりにタプルの最後端位置を示す変数をプログラム内に保持し、処理を行う。
【００３６】
図７〜９は、タプル追加のアルゴリズムである。本アルゴリズムはタプルアクセス制御手段７で実行される。本アルゴリズムの処理のステップ７０１がページ排他要求処理１３に、ステップ７０６がタプル排他要求処理９に、ステップ７０７及びステップ７０８が空き領域使用判定及び制御処理１２に、ステップ７０７がページ空き領域排他要求処理８に対応する。
【００３７】
まず、ステップ７０１でタプル追加予定のページにＸロックを行う。そして、図４で示したスロットサーチアルゴリズムによりスロットを求め（ステップ７０２）、スロットサーチの結果を判定して（ステップ７０３）、挿入に必要なデータ長を求める（ステップ７０４、７０５）。
【００３８】
ステップ７０６で追加するタプルの物理識別子にＸロックを行ない、ステップ７０７でページにタプルの追加が可能かどうかを判定する。タプルの追加が可能な場合は、ページの未使用エリア先頭オフセットからタプルを追加する（ステップ７１１）。この時、未使用領域先頭オフセット及びタプル最後端オフセットの双方を更新する。
【００３９】
コンパクションを行えばタプルの追加が可能な場合は、まず、ページの空き領域に対してＸモードのロックテストを行う（ステップ７０８）。ロック可能であれば、ステップ７１６ａでタプル最後端オフセットからタプルが追加可能かどうかを判定し、追加不可能であれば図５に示したコンパクションを行い（ステップ７０９）、ページの未使用エリア先頭オフセットからページを追加する（ステップ７１１）。ステップ７１６ａでタプル追加可能であった場合は、タプル最後端オフセットからタプルを追加する（ステップ７１２）。
【００４０】
一方、自トランザクションのみが当該ページの空き領域に対してロックを行っている場合は、ステップ７１６ｂでタプル最後端オフセットからタプルが追加可能かどうかを判定し、追加不可能であれば図６に示した改良されたコンパクションを行い（ステップ７１０）、タプル最後端オフセットからタプルを追加する（ステップ７１２）。タプルの追加が可能であった場合は、改良されたコンパクションを行うステップをスキップし、タプル最後端オフセットからタプルを追加する。タプル最後端オフセットからタプルを追加する場合、まず、最後端オフセットの更新を行う。そして、タプル追加後の最後端のオフセットが、未使用領域先頭オフセットを超えた場合のみ、未使用領域先頭オフセットをタプル最後端オフセットと等しくする。
【００４１】
タプルの追加後、ページに対するロックを解放し（ステップ７１４）、追加成功を返す（ステップ７１８）。一方、ステップ７０７でコンパクションを行ってもページにタプルを追加できない場合、あるいはステップ７０８で他トランザクションがページの空き領域に対してロックを行っている場合は、ステップ７０６で行ったロックおよびページに対するロックを解放し（ステップ７１３、７１５）、タプル追加不可を返す（ステップ７１７）。
【００４２】
図３のタプル最後端オフセット３０６を使用しない場合は、ステップ７１７および７１８が削除される。また、ページ空き領域ロックテスト（ステップ７０８）の結果が、同一トランザクションのみがロックしている場合も不可と同一の処理を行うようにする（ステップ７１０、７１２は不要となる）。さらに、タプル最後端オフセットの更新も不要となる。
【００４３】
図１８〜２０にタプル更新のアルゴリズムを示す。本アルゴリズムもタプル追加アルゴリズム同様、タプルアクセス制御手段７で実行される。ステップ１６０１がタプル排他要求処理９に、ステップ１６０２がページ排他要求処理１３に、ステップ１６０６及びステップ１６１４がページ空き領域排他要求処理８に、ステップ１６０３、１６０６、１６０９、１６１３、１６１４が空き領域判定及び制御処理１２に、それぞれ対応する。まず、タプルの物理識別子に対してＸロックを行う（ステップ１６０１）。ただし、タプルに対するロックは、削除対象タプルが検索時にＸロックされている場合には必要ない。次に、タプルの存在するページに対してＸロックを行い（ステップ１６０２）、更新前及び更新後のタプル長の比較を行う（ステップ１６０３）。
【００４４】
更新前と更新後のタプル長が等しい場合は、更新後のタプルを更新前のタプル位置に上書きし（ステップ１６０４）、ページのロックを解放する（ステップ１６０５）。
更新前の長さが更新後の長さより短い場合は、当該ページの空き領域に対してＳロックを確保し（ステップ１６０６）、更新後のタプルを更新前のタプル位置より上書きし（ステップ１６０７）、当該ページの空き領域長に、更新前のタプル長と更新後のタプル長の差を加え、更新前タプルの最後端位置がタプル最後端位置である場合は、タプル最後端オフセットを更新する（ステップ１６０８）。
【００４５】
更新後の長さの方が長い場合は、まず、更新後の長さと未使用領域長とを比較する（ステップ１６０９）。更新後のタプル長と未使用領域長とが等しい、または更新後タプル長の方が短い場合は、未使用領域先頭オフセットから更新後タプルを追加し（ステップ１６１０）、空き領域長に更新前タプル長を追加し、未使用領域先頭オフセット及びタプル最後端オフセットを更新し（ステップ１６１１）、更新前タプルを指しているスロット値を、追加した更新後タプルの先頭に変更する（ステップ１６１２）。
【００４６】
当該ページの未使用領域長より更新後タプル長の方が長い場合、空き領域長、更新前タプル長、及び未使用領域長の和と、更新後タプル長とを比較する（ステップ１６１３）。前者の方が短い、又は等しい場合は当該ページ空き領域使用ロックテストを行う（ステップ１６１４）。その結果、タプルを更新しようとしているトランザクションと同一のトランザクションのみがロックを確保している場合は、タプル最後端オフセットよりタプル追加可能かどうかを判定し（ステップ１６１５）、追加不可能であれば、タプルを指すスロット値を−１として改良されたコンパクションを行う（ステップ１６１６）。その後、タプル最後端オフセットからタプルを追加し、空き領域長、未使用領域長、及びタプル最後端オフセットを更新する（ステップ１６１７）。
【００４７】
ステップ１６１４の結果、ロック可能である場合は、タプル最後端オフセットよりタプル追加可能かどうかを判定し（ステップ１６１８）、追加不可能であればタプルを指すスロット値を０としてコンパクションを行い（ステップ１６１９）、未使用領域先頭オフセットからタプルを追加し、空き領域長、及び未使用領域長、タプル最後端オフセットを更新する（ステップ１６２０）。ステップ１６１８の結果、追加可能であればステップ１６１７を実行する。
【００４８】
ステップ１６１３で更新後タプル長の方が長い場合、あるいはステップ１６１４でロック不可の場合は、当該ページに対するロックを解放する（ステップ１６２１）。そして、更新後タプル追加可能なページのサーチを行い（ステップ１６２２）、先に述べたタプル追加アルゴリズムを利用して、ステップ１６２２で求めたページに更新後タプルの追加を試みる（ステップ１６２３）。タプル追加の結果を判定し、失敗であればステップ１６２２に戻り、成功すれば先にロックを解放した更新タプルの存在するページに再度Ｘロックを確保する（ステップ１６２４、ステップ１６２５）。そして、ページの空き領域にＳロックを行い（ステップ１６２６）、更新前タプルをポイント形式に変換し（ステップ１６２７）、空き領域長の更新及びステップ１６０８と同様必要であれば、タプル最後端オフセットを更新する（ステップ１６２８）。
【００４９】
図３におけるタプル最後端オフセット３０６を使用しない場合は、タプル最後端オフセットの更新が不要になり、また、追加の場合と同様、ページ空き領域ロックテスト（ステップ１６１４）の結果が同一トランザクションのみがロックしている場合は不可の場合と同一の処理を行うようにする。さらに、ステップ１６１５、１６１８、１６１６、１６１７が不要となる。
【００５０】
図１０にタプルの削除アルゴリズムを示す。本アルゴリズムも更新、追加アルゴリズム同様、タプルアクセス手段制御７で実行される。ステップ８０１がタプル排他要求手段９に、ステップ８０２がページ排他要求手段１３に、ステップ８０４が空き領域使用判定及び制御手段１２とページ空き領域排他要求手段８に、それぞれ対応する。
【００５１】
まず、タプルの物理識別子に対してＸロックを行う（ステップ８０１）。ただし、タプルに対するロックは削除対象タプルが検索時にＸロックされている場合は必要ない。次に、タプルの存在するページに対してＸロックを行う（ステップ８０２）。次に、ステップ８０３でタプルの削除を行い、当該ページの空き領域に対して共有ロック（以降Ｓロックと記す）を行う（ステップ８０４）。最後に、ページのロックを解放する（ステップ８０５）。図３のタプル最後端オフセット３０６を使用しない場合は、タプル最後端オフセットの更新は不要である。
【００５２】
次に、ロールバック処理のアルゴリズムについて説明する。なお、本実施例では、ロールバック処理は、タプルに対して行われた処理の逆順にロールバック処理を行うものとする。なお、ロールバックアルゴリズムはすべてタプルアクセス制御手段７において実行される。
図１１は、タプル追加のロールバック処理のアルゴリズムである。ステップ９０１はページ排他要求処理に対応する。タプルの存在するページに対するロックを行い（ステップ９０１）、タプルの削除を行い（ステップ９０２）、ページに対するロックを解放する（ステップ９０３）。ただし、タプル削除において、未使用領域先頭オフセットの更新は行わない。
【００５３】
図２１は、タプル更新のロールバック処理のアルゴリズムである。ステップ１７０１がページ排他要求処理１３に、ステップ１７０２が空き領域使用判定及び制御処理１２に対応する。まず、タプルを戻すページにＸロックを行う（ステップ１７０１）。次に、更新前タプル（ロールバックの結果ページに戻されるタプル）の長さと更新後タプル（ロールバックの結果、ページから削除されるタプル）の長さとの比較を行う（ステップ１７０２）。
【００５４】
双方の長さが等しい場合は、更新後タプルの存在する位置から更新前タプルを上書きする（ステップ１７０３）。
更新前タプルの方が短い場合は、更新後タプルの存在する位置から更新前タプルを上書きし（ステップ１７１０）、長さの差を空き領域長に加える。更新後タプルの最後端位置が、タプル最後端オフセットがである場合は、タプル最後端オフセットのメンテナンスも行う（ステップ１７１１）。
【００５５】
更新前タプル長の方が長い場合は、空き領域長に更新後タプル長を加え（１７０５）、コンパクションが必要かどうかを判定し（ステップ１７０５）、必要であれば、更新後タプルを指すスロット値を−１として改良されたコンパクションを行い（ステップ１７０６）、タプル最後端オフセットから更新前タプルを追加し、必要な情報を更新する（ステップ１７０７）。
【００５６】
コンパクションが必要でなければ、未使用領域先頭から更新前タプルを追加し、必要な情報を更新し（ステップ１７０８）、その後ページのロックを解放する（ステップ１７０９）。
タプル最後端オフセット３０６を使用しない場合、タプル最後端オフセットの更新は不要である。また、改良されたコンパクション（ステップ１７０６）の実行によりタプルの最後端が求まるため、ステップ１７０７ではそれを利用して更新前タプルの追加を行う。
【００５７】
図１２はタプル削除のロールバック処理のアルゴリズムである。ステップ１００１がページ排他要求処理１３に対応する。まず、タプルを戻すページにＸロックを行う（ステップ１００１）。次に、コンパクションが必要かどうかを判定し（ステップ１００２）、コンパクションが必要であれば、図８に示した改良されたコンパクションを行い（ステップ１００３）、タプル最後端オフセットからタプルを追加する（ステップ１００４）。コンパクションが不要であれば、ページの未使用エリア先頭オフセットからタプルを追加して（ステップ１００５）、最後にページに対するロックを解放する（ステップ１００６）。
【００５８】
タプル最後端オフセット３０６を使用しない場合、タプル最後端オフセットの更新は不要である。また、改良されたコンパクション（ステップ１００３）の実行によりタプルの最後端が求まるため、ステップ１００４ではそれを利用して削除されていたタプルの追加を行う。
【００５９】
１．タプル追加・削除例
まず、図１３を用いて、本実施例で用いるページの例を示す。１１０８及び１１０９はページに格納されているタプルであり、１１０２は空き領域、１１０５は未使用領域である。１１０１はページヘッダであり、図３に示した情報が格納されている。この例では、割当てスロット数は４、使用スロット数は２、未使用領域先頭オフセットは図中１１０４で示される位置、タプル最後端オフセットは同じく１１０３で示される位置である。ページの空き領域サイズは図中１１０２のサイズの総和である。１１０６、１１０７、１１１０、１１１１はスロットであり、１１１０はタプル１（１１０８）の先頭オフセットを、１１１１はタプル２（１１０９）の先頭オフセットを指す。１１０６、１１０７は現在使用されていないスロットであり、その値は共に−１である。
【００６０】
（１）タプル追加例１
まず、図１３の状態のページにおいて、ページ内の空き領域を増加させたトランザクションが存在しない場合のタプルの追加例を示す。
タプルの追加には、図７〜９で示されるアルゴリズムを実行する。この例では、図７で示されるアルゴリズムのステップ７０２（ステップ７０２のアルゴリズムは図４に示してある）により、スロット１１０７がタプルを追加するスロットとなる。
【００６１】
タプルの追加に必要なサイズが未使用領域（１１０５）より小さい場合は、ステップ７０７によりコンパクションを行わなくてもタプルの追加が可能と判断されるため、１１０４で示される位置からタプルの追加を行う。
一方、タプルの追加に必要なサイズが、未使用領域より大きいが、タプル最後端オフセット（１１０３）からスロット最後端までのサイズより小さい場合、ステップ７１８がＹとなるため、タプル最後端オフセットからタプルを追加する。
【００６２】
タプルの追加に必要なサイズがタプル最後端オフセット（１１０３）からスロット最後端までのサイズより大きいが、ページ内空き領域１１０２の総和サイズと未使用領域サイズの和より小さい場合は、図５に示されるページコンパクションを行い、当該ページにタプルを追加することが可能である。
【００６３】
（２）タプル追加例２
次に、タプル追加予定ページから、スロット１１０７に格納されていたタプルを削除したトランザクションが稼働中であった場合のタプルの追加例について説明する。ただし、前記タプルを削除したトランザクションは、タプルを追加しようとしているトランザクションとは等しくないものとする。
【００６４】
この場合も、図７〜９に示されるアルゴリズムを用いる。当該ページロック後、ステップ７０２で追加可能なスロットを求める（アルゴリズムは図４に示してある）。本実施例では、スロット１１０７がステップ４０３でＹとなるが、次のステップ４０４でＮとなるため（スロットにはＸロックが掛けられている）、追加予定スロットとはならず、次のスロット１１０６が追加予定スロットとなる。タプルの追加に必要なサイズが未使用領域（１１０５）より小さい場合は、上記（１）と同様にタプルの追加を行う。
【００６５】
一方、タプルの追加に必要なサイズが、未使用領域より大きいが、タプル最後端オフセット（１１０３）からスロット最後端までのサイズより小さい場合、及び、タプルの追加に必要なサイズがタプル最後端オフセット（１１０３）からスロット最後端までのサイズより大きいが、ページ内空き領域１１０２の総和サイズと未使用領域サイズの和より小さい場合であるが、この例では当該ページの空き領域にロックが掛けられているため、ステップ８０８で不可となり、当該ページに対するタプルの追加は不可能と判定される。
【００６６】
（３）タプル追加例３
次に、タプルを追加しようとしているトランザクションが、先に当該ページからスロット１１０７に格納されていたタプルを削除していた場合のタプルの追加について説明する。
この場合も、図７〜９に示されるアルゴリズムを用いる。当該ページロック後、ステップ７０２で追加可能なスロットを求める（アルゴリズムは図４に示してある）。本実施例では、スロット１１０７がステップ４０３でＹとなり、次のステップ４０４でもＹとなるため（スロットにはＸロックが掛けられているが、Ｘロックを掛けているトランザクションとロックのテストを行ったトランザクションとは同一トランザクションである）、スロット１１０７が追加予定スロットとなる。
タプルの追加に必要なサイズが未使用領域（１１０５）より小さい場合、上記（１）、（２）と同様にタプルの追加を行う。
【００６７】
一方、タプルの追加に必要なサイズが、未使用領域より大きいが、タプル最後端オフセット（１１０３）からスロット最後端までのサイズより小さい場合は、ステップ７１９がＹとなるため、タプル最後端オフセットからタプルを追加する。
【００６８】
タプルの追加に必要なサイズがタプル最後端オフセット（１１０３）からスロット最後端までのサイズより大きいが、ページ内空き領域１１０２の総和サイズと未使用領域サイズの和よりより小さい場合は、図６に示される改良されたページコンパクションを行い、当該ページのタプル最後端オフセットからにタプルを追加することが可能である。
【００６９】
（４）タプル削除例
図１３の例で、スロット１１１１で示されるタプル２（１１０９）の削除について説明する。タプルの削除には図１０で示されたアルゴリズムを用いる。
まず、タプルの物理識別子にＸロックを行い、タプルの存在するページを求め、ページのロックを行って、スロット１１１１の値をー１とする。次に、タプル最後端オフセット１１０３を更新するが、これは全使用スロットから、最大のスロット値を持つものを求め、そのスロット値＋そのスロットが示すタプルのサイズを新たなタプル最後端オフセットとする。
その後、削除されたタプル２のサイズを空き領域サイズに加え、ページの空き領域に対してＳロックを行ってページのロックを解放する。
【００７０】
次に、図２２〜２５を用いて、図２２中のタプル２（１８０１）を更新する例について説明する。
（５）タプル更新例：タプルサイズが等しい場合
この場合は、図１８〜２０に示したアルゴリズムにより、更新後のタプルを１８０１に上書きすればよい。
【００７１】
（６）タプル更新例：タプルが小さくなる場合
タプルが小さくなる場合は、空き領域ロック後、タプル２（１８０１）に更新後タプルを上書きし、短くなった長さ分を空き領域サイズに加える。
【００７２】
（７）タプル更新例：タプルが大きくなる場合
タプルが大きくなる場合は、更新後のタプルがページの未使用領域１８０２に入る場合は、図２３に示すように更新後のタプル２（１９０１）を未使用領域に入れ、タプル２のあった場所を空き領域とする（１９０２）。また、図２２でタプル３を更新する場合のように、未使用領域に面したタプルを更新する場合は、更新後のタプル長が、更新前のタプル長と未使用領域長の和より小さい場合はタプル３に直接上書きすることも可能である。
【００７３】
次に、更新後のタプルが未使用領域には入らないが、コンパクションをすればページに入る場合で、コンパクションが可能な場合は、まずページのコンパクションを行い、更新後のタプル２（２００１）を追加すればよい。
【００７４】
次に、コンパクションを行ってもページに入らない場合、あるいは、コンパクションを行えばページに入るが、コンパクションが不可の場合は、図２５に示すように、まず、タプル２（２１０４）の追加可能なページ２１０３を求め、タプルを追加する。その後、ページ２１０２の空き領域をロックし、タプル２をポイント形式（２１０１）とし、ポイント形式にタプル２（２１０４）の物理識別番号を格納する。
【００７５】
２．ロールバック例
次に、ロールバック処理の例を示す。なお、実際の処理では、タプルの追加、削除等において、ロールバックのために必要な情報の取得が行われるが、本実施例では省略する。
【００７６】
（１）タプル削除のロールバック
図１４は、自トランザクションで、図１３で示されるページからタプル２を削除した後、他のトランザクションが当該ページにタプル３（１２０１）を追加し、コミットした直後の様子を示している。
【００７７】
ここで、自トランザクションがロールバックを行う場合の例について説明する。  タプル削除のロールバックには図１２に示されたアルゴリズムを用いる。まず、当該ページに対してロックを行う。削除されたタプルはスロット１２０２で示されているが、当該スロットは、タプルの削除時にＸロックが掛けられているため、他のトランザクションは使用していない。次に、削除されたタプル２の追加位置を決定する。この場合、ページの未使用エリアオフセット及びタプルの最後端オフセットは共に１２０３で示された位置を指しているが、未使用エリア１２０４は、タプル２を追加するのに十分な大きさがないため、コンパクションを行う必要がある。そこで、ステップ１００３に示されるように改良されたコンパクションを行う（アルゴリズムは図６）。
【００７８】
その結果、図１５に示すようにタプル最後端オフセット（１３０１）が変更される。そして、１３０１で示された位置より、タプル２の追加を行うことが可能となる。この時、タプルの物理識別子は当該ページのページ番号及びスロット１３０２のスロット番号（＝４）となるが、これはタプル削除前と同一の値となり、タプルの物理位置を変更せずにタプルのロールバックを行うことが可能となる。  未使用領域サイズが、タプル２の追加に必要なサイズより大きい場合は、ページのコンパクションは行われず、未使用領域先頭オフセットの示す位置よりタプルを追加し、未使用領域先頭オフセット及びタプル最後端オフセットの値を更新する。
【００７９】
（２）タプル追加・削除のロールバック例
次に、同一トランザクションでのタプルの削除・追加のロールバック例について説明する。図１６は、図１３に示される状態のページから、タプル２の削除を行い、その後タプル４（１４０１）の追加を行った場合の例である。
【００８０】
ここで、トランザクションのロールバックを行う場合、まず、タプル１４０１の削除を行う。タプル追加のロールバックには、図１１に示すアルゴリズムを使用する。まず、当該ページにロックを行い、スロット１４０２の値を−１とする。その後、ページのタプル最後端オフセット及び空き領域サイズを更新し、当該ページのロックを解放する。タプル４削除後のページの状態を図１７に示す。１５０１はタプル最後端オフセットの示す位置である。
【００８１】
次に、削除されたタプル２のロールバックを行う。タプル２の追加には、図１２で示されるアルゴリズムを用いる。まず、タプル２の存在していたページに対してロックを行う。次に、タプルの追加位置を求めるが、これは（１）と同様のため省略する。
【００８２】
（３）タプル更新のロールバック例
タプルサイズが変化していない場合は、更新前のタプルをそのまま上書きすればよい。図２３や２４のように、タプルが長くなっていた場合で、同一ページに収まっている場合は、更新前タプルをそのまま上書きすればよい。図２４の例をロールバックした場合の状態を図２６に示す。その結果、タプル２は２２０１のように復元され、残りの部分は空き領域（２２０２）となる。また、タプル最後端位置の更新が必要である。
【００８３】
また、図２５に示したように他のページにポイントされている場合は、まずポイント形式２１０１を空き領域２３０１とし、未使用領域先頭オフセットから更新前タプル２（２３０２）を追加する。その後、ページ２１０３のタプル２（２１０４）を削除すればよい。
タプルが短くなっている場合は、ポイント形式の復元の場合と同様の処理を行えばよい。
【００８４】
前記実施例とは異なる他の実施例を説明する。
図２８は、本発明が実施されるデータベース管理システムのブロック図を示すものであり、基本的に図１と同様の構成を示す。
本発明で提供されるタプル単位排他制御方式は、データアクセス管理手段６に組み込まれ、手段６には、タプルアクセス制御手段７及びページコンパクション手段１０が含まれる。また、タプルアクセス制御手段７には、タプル物理識別子排他要求手段９及びページ排他制御要求手段１３が含まれる。
【００８５】
まず、本実施例で用いられる図２におけるページの状態を管理するページヘッダ２０７の他のデータ構造を図２９に示す。ページヘッダ２０７には、図２で示したページに割り当てられた最大スロット番号３０２、現在使用中のスロット数３０３、タプルの削除、あるいはタプルが短くなった場合に発生する空き領域総和サイズ３０４、未使用領域２０５の先頭オフセット３０５に追加して、タプルを削除状態のタプル領域に追加したときや、タプルが短くなったときの空き領域サイズを後のコンパクション対象とするコンパクションサイズ３０７等の情報が管理されている。コンパクションサイズ３０７は、新規にページを割り当てた場合及びページのコンパクションを行った場合に初期化（０クリア）される。ページに格納されたタプルの構造の例を図３０に示す。タプルの先頭には、当該タプルの物理的な長さを示すタプル長２６０１が管理され、その後にタプルを構成するデータが格納される。削除状態にあるタプルの領域に追加したいタプルが格納できるか否かの判定は、タプル長２６０１を参照することによって決定される。
【００８６】
図３１、及び３２は、本実施例で示す異なるタプルの追加を行うアルゴリズムである。本アルゴリズムは、図２８におけるタプルアクセス制御手段７において実施される。タプルの追加要求が行われると、まず、追加する候補となるページをサーチし、ページに対してＸロックを行う。ページに対するロックは、セマフォで行うことも可能である。また、ページのメモリ上への固定要求および解放要求は、ページに対するロック要求およびロック解放要求時に同時に行われるものとする。ステップ２７０２では、ページ内の状態を管理するページヘッダ２０７の空き領域の総和サイズ３０４と追加するタプル長とを比較し、タプルが当該ページに追加可能か否かを判定する。この時点で空きがないと判断されれば、当該ページにはタプルを追加できないものとし、追加不可を返し(ステップ２７０３)、次の候補となるページをサーチする。このとき、参照した空き領域総和サイズ３０４は、当該ページ中のすべての空き領域の総和であり、未使用領域のサイズも含まれる。ステップ２７０２の判定の結果、タプルの追加が可能と判断されると、次に当該ページの未使用領域に追加可能か否かを判定する(ステップ２７０４)。未使用領域長は、ページ内の状態を管理するページヘッダ２０７の未使用領域の先頭オフセット３０５を使用して求めることができる。
【００８７】
判定の結果、未使用領域には十分な領域がない場合には、ステップ２７０５で当該ページの先頭スロットを求め、ステップ２７０６で割り当てスロット数分ループし、使用可能スロットを求める。ステップ２７０７で当該スロットが空いているかどうかを判定する(削除されていれば空き状態であり、スロット値は当該スロットが指し示すタプルの当該ページの先頭からのオフセットを正負を反転させたものか、あるいはスロット値が−１)。スロットが空いていた場合、当該スロットを使用してタプルの物理識別子にＸロックが可能かどうかをテストし(ステップ２７０８)、ロック可能であればステップ２７０９で、削除状態にある当該スロットが指し示すタプル領域のタプル長２６０１が追加するタプル長よりも長いかどうかを判定し、削除状態にあるタプル長の方が長い場合は、当該タプル領域を使用することを決定する。削除状態にあるタプル長の方が短い場合は、ページ内の状態を管理するページヘッダ２０７のコンパクションサイズ３０７に空き領域のタプル長を加算する(ステップ２７１０)。また、このとき空きスロット値を−１に更新しておく。
【００８８】
ステップ２７０７、ステップ２７０８、ステップ２７０９でＮの場合は次スロットを求め(ステップ２７１１)、再度ループする（ステップ２７０６ｅ）。全ての割り当てスロットを調べたが、タプルを追加するスロットが求められなかった場合は、ステップ２７１２でページ内の状態を管理するページヘッダ２０７のコンパクションサイズ３０７を使用してコンパクションを行う。本ステップでは、コンパクションサイズと未使用領域長の和が追加するタプル長よりも長ければ、ページ内のコンパクション処理を行って、未使用領域の先頭からタプルを挿入する。コンパクションサイズと未使用領域長の和が追加するタプル長よりも短い場合は、当該ページにはタプルを追加できないものとし、タプル追加不可を返し、別の候補ページをサーチする。
【００８９】
ステップ２７０４でＹの場合、及び、全ての割り当てスロットを調べたが、タプルを追加するスロットが求められなかった場合は、タプルを追加するスロット番号を割り当てスロット数＋１とし(ステップ２７１３)、ステップ２７１３で決定したスロット番号を使用してタプルの物理識別子にＸロックを行う(ステップ２７１４)。そして、未使用領域の先頭から追加するタプルを挿入し、スロット値を未使用領域の先頭とする(ステップ２７１５)。挿入が終わるとページヘッダ２０７の空き領域の総和サイズ３０４及び未使用領域先頭オフセット３０５を更新する(ステップ２７１６、２７１７)。
【００９０】
次に、ステップ２７０９でＹとなった場合、使用するスロット番号を、見つけたスロット番号すなわちロック可能なスロット番号とし(ステップ２７１８)、タプルの物理識別子にＸロックを行う(ステップ２７１９)。そして、当該スロット値の指し示した領域より、追加タプルを挿入し、スロット値の正負を反転させる(ステップ２７２０)。挿入が終わるとページヘッダ２０７の空き領域総和サイズ３０４を更新し(ステップ２７２１)、ページヘッダ２０７のコンパクションサイズ３０７を更新する(ステップ２７２２)。タプルの追加が終了するとページロックを解放し(ステップ２７２３)、追加成功を返す(ステップ２７２４)。
【００９１】
図３３にタプルの削除アルゴリズムを示す。まず、タプルの物理識別子に対してＸロックを行う(ステップ２８０１)。ただし、タプルに対するロックは、削除対象タプルが検索時にＸロックされている場合は必要ない。次に、タプルの存在するページに対してＸロックを行う(ステップ２８０２)。次に、ステップ２８０３でタプルの削除を行い、当該タプルのスロット値を反転させ、削除状態にする(ステップ２８０４)。そして、空き領域総和サイズ３０４を更新する(ステップ２８０５)。こうしてタプルの削除が終了すると、ページロックを解放する（ステップ２８０６）。
【００９２】
このように、タプルの削除時には、スロットの状態を削除状態にすることにより、当該削除されたタプルの領域はそのままにしておくので、ロールバック時にも当該タプルの領域は、スロット領域の反転だけでタプルを復元できる。すなわち、削除されたタプルに排他が取得されているため、当該タプルの領域についてもデータが保証されている。
【００９３】
本実施例で示したタプルの削除状態の表現方法については、スロットの値の反転のみならず、スロットの領域に削除状態を識別するフラグにより判定する方法、及び削除されたタプルのヘッダ等に削除状態を示すフラグを設定して判定する方法等により実現してもよい。
【００９４】
【発明の効果】
以上示したように、本発明によればタプル指向ファイルシステムにおいて、タプル単位排他制御を行っても、タプルの物理識別子を変更せずにタプルのロールバックが可能となり、トランザクションの並行性を向上が可能となる。また、ページ内の空き領域の利用効率を高めることが可能となる。
【図面の簡単な説明】
【図１】システム構成の一例を示すブロック図である。
【図２】ページ内におけるタプル管理の一例である。
【図３】ページヘッダの構成例である。
【図４】タプルを追加するためのスロットを捜すアルゴリズムの例である。
【図５】コンパクションを行うアルゴリズムの例である。
【図６】改良されたコンパクションを行うアルゴリズムの例である。
【図７】タプル追加アルゴリズムの例である。（その１）
【図８】タプル追加アルゴリズムの例である。（その２）
【図９】タプル追加アルゴリズムの例である。（その３）
【図１０】タプル削除アルゴリズムの例である。
【図１１】タプル追加処理のロールバック処理のアルゴリズムの例である。
【図１２】タプル削除処理のロールバック処理のアルゴリズムの例である。
【図１３】本発明の実施例において用いられる、ページの例である。（その１）
【図１４】本発明の実施例において用いられる、ページの例である。（その２）
【図１５】本発明の実施例において用いられる、ページの例である。（その３）
【図１６】本発明の実施例において用いられる、ページの例である。（その４）
【図１７】本発明の実施例において用いられる、ページの例である。（その５）
【図１８】タプル更新のアルゴリズムである。（その１）
【図１９】タプル更新のアルゴリズムである。（その２）
【図２０】タプル更新のアルゴリズムである。（その３）
【図２１】タプル更新のロールバック処理のアルゴリズムである。
【図２２】タプルの更新例である。（その１）
【図２３】タプルの更新例である。（その２）
【図２４】タプルの更新例である。（その３）
【図２５】タプルの更新例である。（その４）
【図２６】タプルの更新例である。（その５）
【図２７】タプルの更新例である。（その６）
【図２８】データベース管理システムのブロック図である。
【図２９】ページヘッダのデータ構造図である。
【図３０】タプルの構造例である。
【図３１】タプル追加のアルゴリズムである。（その１）
【図３２】タプル追加のアルゴリズムである。（その２）
【図３３】タプル削除のアルゴリズムである。
【符号の説明】
１…データベース管理システム、２…データベース、３…トランザクション管理手段、４…排他制御管理手段、５…ジャーナル管理手段、６…データアクセス管理手段、７…タプルアクセス制御手段、８…ページ空き領域排他要求処理、９…タプル物理識別子排他要求処理、１０…ページコンパクション手段、１１…改良されたページコンパクション手段、１２…ページ空き領域使用判定及び制御処理、１３…ページ排他要求処理。
【図１】
0003699733.tif 000002
【図２】
0003699733.tif 000003
【図３】
0003699733.tif 000004
【図４】
0003699733.tif 000005
【図５】
0003699733.tif 000006
【図６】
0003699733.tif 000007
【図７】
0003699733.tif 000008
【図８】
0003699733.tif 000009
【図９】
0003699733.tif 000010
【図１０】
0003699733.tif 000011
【図１１】
0003699733.tif 000012
【図１２】
0003699733.tif 000013
【図１３】
0003699733.tif 000014
【図１４】
0003699733.tif 000015
【図１５】
0003699733.tif 000016
【図１６】
0003699733.tif 000017
【図１７】
0003699733.tif 000018
【図１８】
0003699733.tif 000019
【図１９】
0003699733.tif 000020
【図２０】
0003699733.tif 000021
【図２１】
0003699733.tif 000022
【図２２】
0003699733.tif 000023
【図２３】
0003699733.tif 000024
【図２４】
0003699733.tif 000025
【図２５】
0003699733.tif 000026
【図２６】
0003699733.tif 000027
【図２７】
0003699733.tif 000028
【図２８】
0003699733.tif 000029
【図２９】
0003699733.tif 000030
【図３０】
0003699733.tif 000031
【図３１】
0003699733.tif 000032
【図３２】
0003699733.tif 000033
【図３３】
0003699733.tif 000034