JP6784296B2 - データベース管理装置、データベース管理方法、及びプログラム - Google Patents

データベース管理装置、データベース管理方法、及びプログラム Download PDF

Info

Publication number
JP6784296B2
JP6784296B2 JP2018541071A JP2018541071A JP6784296B2 JP 6784296 B2 JP6784296 B2 JP 6784296B2 JP 2018541071 A JP2018541071 A JP 2018541071A JP 2018541071 A JP2018541071 A JP 2018541071A JP 6784296 B2 JP6784296 B2 JP 6784296B2
Authority
JP
Japan
Prior art keywords
record
application
exclusive
transaction
control unit
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.)
Active
Application number
JP2018541071A
Other languages
English (en)
Other versions
JPWO2018056267A1 (ja
Inventor
祥人 中西
祥人 中西
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
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
Application filed by NEC Corp filed Critical NEC Corp
Publication of JPWO2018056267A1 publication Critical patent/JPWO2018056267A1/ja
Application granted granted Critical
Publication of JP6784296B2 publication Critical patent/JP6784296B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、データベースシステムにおける排他制御を行なうための、データベース管理装置及びデータベース管理方法に関し、更に、これらを実現するためのプログラムに関する。
従来から、データベースにアクセスする複数のアプリケーションプログラム(以下「アプリケーション」と表記する。)が並列に動作する、データベースシステムにおいては、データの整合性を確保するため、排他制御が導入されている(特許文献1及び2参照)。この排他制御によれば、複数のアプリケーションが、同時にデータベースの特定のレコードを更新しようとした場合に、レコードを更新できるアプリケーションは1つに制限される。
また、データベースシステムでは、一般的に、データベースの原子性を保証するために、一連のレコードの更新は、1つのトランザクションとして制御(以下「トランザクション制御」と表記する。)されている。このトランザクション制御においては、1つのトランザクション内で行なわれたレコードの更新は、トランザクション終了時に実行される確定処理(コミット)によって、データベース上で確定される。一方、トランザクションの途中でトランザクションが破棄(ロールバック)された場合は、トランザクション内で行った全てのレコード更新も破棄される。
また、トランザクション制御を行うデータベースにおいて、上述の排他制御は、多くの場合、悲観的ロックによって実現されている。悲観的ロックでは、アプリケーションは、トランザクション内でこれから更新しようとするレコードに対して排他をかけてから(ロックしてから)、レコードを参照および更新する。また、アプリケーションが、特定のレコードに排他をかけようとした際に、既に、別のアプリケーションが、この特定のレコードに排他をかけていた場合は、このアプリケーションは、別のアプリケーションが更新を確定して排他を解除するまで、排他待ちをすることになる。トランザクション内で更新されたレコードデータは、コミットするまで確定されないため、排他はコミットによって解除されることになる。
特開2003−308219号公報 特開2012−164190号公報
上述したように、従来のデータベースシステムにおいては、排他制御によって、データの整合性は確保されるが、排他待ちによってアプリケーションの処理性能に悪影響が及ぶという問題がある。即ち、特定のアプリケーションは、レコードを更新する際に、別のアプリケーションが既に排他をかけている場合は、別のアプリケーションのトランザクションがコミットまたはロールバックされるまで待たされることになる。この結果、排他中のトランザクションの完了に時間がかかると、排他待ちをしている特定のアプリケーションによるトランザクションの完了までの時間が長くなってしまい、特定のアプリケーションの処理性能が低下してしまう。
この問題について図16を用いて説明する。図16は、従来からのデータベースシステムにおける排他制御を説明するための図である。図16において、縦軸は時間の経過を表すと共に、アプリケーション1及びアプリケーション2における処理の順序も表している。
図16の例では、アプリケーション1及びアプリケーション2は、共に、テーブルAについては、共有レコードを更新するが、テーブルBについては、それぞれ独立して固有レコードを更新する。具体的には、アプリケーション1は、固有レコード1−1、1−2、1−3を更新し、アプリケーション2は、固有レコード2−1、2−2、2−3を更新する。従って、図16の例では、アプリケーション1がコミット完了とするまで、アプリケーション2による共有レコード及び固有レコード2−1〜2−3の更新処理は待たされる。
このように、従来のデータベースシステムでは、アプリケーションは、1つのレコードの排他待ちのために、他の排他不要のレコードの更新処理を行うことができなくなるため、処理性能が低下し、処理時間に無駄が生じてしまう。
また、このようなアプリケーション処理の具体例として、並列動作するトランザクションに対して、受付番号のような通番を発行して、各トランザクションに一意の連番を付与し、以降のアプリケーション処理で連番を使用した制御を行うことが挙げられる。この場合、連番はトランザクションが成功した場合にのみ更新され、ロールバックした場合に抜け番を生成しないようにされている。
また、上述の具体例では、連番を管理するレコードを用意し、複数のアプリケーションでそのレコードを排他して更新することが必要となるため、並行動作するトランザクションが連番付与の処理においてシリアライズされてしまう。この問題は、ロールバック時に抜け番を許容するようにすることで対応できるとも考えられるが、以降のアプリケーションの実装においては、抜け番を考慮することが強いられるため、アプリケーションが複雑になるという別の問題が生じてしまう。
本発明の目的の一例は、上記問題を解消し、データベースシステムにおいて並列して処理を実行する複数のアプリケーションプログラムの処理性能の低下を抑制し得る、データベース管理装置、データベース管理方法、及びプログラムを提供することにある。
上記目的を達成するため、本発明の一側面におけるデータベース管理装置は、複数のアプリケーションプログラムによってアクセスされるデータベースを管理するための装置であって、
前記データベースに格納されているレコードに対する前記アプリケーションプログラムからの要求を受け付ける、要求受付部と、
前記要求が特定のレコードに対する排他的使用である場合に、一定条件を満たすことを条件に、排他的使用を要求している前記アプリケーションプログラムに対して、排他的使用を許可する、アクセス処理制御部と、
を備え、
前記アクセス処理制御部は、使用を許可された前記アプリケーションプログラムが前記特定のレコードの更新を完了する旨を宣言した場合に、前記特定のレコードに対する排他的な使用を解除して、使用を許可した前記アプリケーションプログラム以外のアプリケーションプログラムに、前記特定のレコードの使用を許可する、
ことを特徴とする。
また、上記目的を達成するため、本発明の一側面におけるデータベース管理方法は、複数のアプリケーションプログラムによってアクセスされるデータベースを管理するための方法であって、
(a)前記データベースに格納されているレコードに対する前記アプリケーションプログラムからの要求を受け付ける、ステップと、
(b)前記要求が特定のレコードに対する排他的使用である場合に、一定条件を満たすことを条件に、排他的使用を要求している前記アプリケーションプログラムに対して、排他的使用を許可する、ステップと、
(c)使用を許可された前記アプリケーションプログラムが前記特定のレコードの更新を完了する旨を宣言した場合に、前記特定のレコードに対する排他的な使用を解除して、使用を許可した前記アプリケーションプログラム以外のアプリケーションプログラムに、前記特定のレコードの使用を許可する、ステップと、
を有することを特徴とする。
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、コンピュータによって、複数のアプリケーションプログラムによってアクセスされるデータベースを管理するためのプログラムであって、
前記コンピュータに、
(a)前記データベースに格納されているレコードに対する前記アプリケーションプログラムからの要求を受け付ける、ステップと、
(b)前記要求が特定のレコードに対する排他的使用である場合に、一定条件を満たすことを条件に、排他的使用を要求している前記アプリケーションプログラムに対して、排他的使用を許可する、ステップと、
(c)使用を許可された前記アプリケーションプログラムが前記特定のレコードの更新を完了する旨を宣言した場合に、前記特定のレコードに対する排他的な使用を解除して、使用を許可した前記アプリケーションプログラム以外のアプリケーションプログラムに、前記特定のレコードの使用を許可する、ステップと、
を実行させる、ことを特徴とする。
以上のように本発明によれば、データベースシステムにおいて並列して処理を実行する複数のアプリケーションプログラムの処理性能の低下を抑制することができる。
図1は、本発明によるデータベースの管理下でのアプリケーションプログラムの動作を説明する図である。 図2は、本発明によるデータベースの管理下でのアプリケーションプログラムの動作を説明する図である。 図3は、本発明によるデータベースの管理下でのアプリケーションプログラムの動作を説明する図である。 図4は、本発明における各アプリケーションプログラムの処理順序と処理結果とを示す図である。 図5は、本発明の実施の形態におけるデータベース管理装置の概略構成を示す図である。 図6は、本発明の実施の形態におけるデータベース管理装置の具体的構成を示すブロック図である。 図7は、本発明の実施の形態で用いられるトランザクション更新管理表の一例を示す図である。 図8は、本発明の実施の形態で用いられるレコード排他管理表の一例を示す図である。 図9は、本発明の実施の形態で用いられるトランザクション依存管理表の一例を示す図である。 図10は、アプリケーションによる要求が排他ありレコード読み込みである場合の本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。 図11は、アプリケーションによる要求がレコード更新である場合の本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。 図12は、アプリケーションによる要求がレコードの更新完了である場合の本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。 図13は、アプリケーションによる要求がコミットである場合の本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。 図14は、アプリケーションによる要求がロールバックである場合の本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。 図15は、本発明の実施の形態におけるデータベース管理装置を実現するコンピュータの一例を示すブロック図である。 図16は、従来からのデータベースシステムにおける排他制御を説明するための図である。
(発明の概要)
本発明は、同一のレコードを排他的に使用して更新する複数のアプリケーションプログラム(以下「アプリケーション」と表記する)において、レコード排他待ちによる性能低下の影響を抑制して、各アプリケーションの並列実行性能を向上させる。具体的には、本発明では、トランザクション中にレコードの更新完了を宣言するステップが導入される。よって、レコードの更新完了の宣言によって、トランザクション中にレコードの排他的使用が解除され、他のアプリケーションの排他待ちも解除される。この時、両方のアプリケーションのトランザクションの依存関係を管理することで、トランザクションの原子性を保証しつつ、排他待ち時間を短縮することができる。
ここで、図1〜図3を用いて、本発明における処理について説明する。図1〜図3は、それぞれ、本発明によるデータベースの管理下でのアプリケーションプログラムの動作を説明する図である。
図1に示すように、先に対象レコードに排他をかけたアプリケーション1のトランザクションが更新完了を宣言すると、アプリケーション1のトランザクションのコミットが完了していない状態であっても対象レコードの排他が解除される。これにより、排他待ちをしていた別のアプリケーション2のトランザクションは、対象レコードに対して排他をかけることができるようになり、アプリケーション2の排他待ちが解除される。この時、アプリケーション2のトランザクションは、アプリケーション1のトランザクションによって更新されたコミット未完了の対象レコードを参照できる。
従って、図1に示すように、アプリケーション2における排他待ち区間が短くなるため、アプリケーション2のトランザクションの処理時間の短縮効果が得られることになる。また、アプリケーション1のコミットの発行とアプリケーション2のコミットの発行とが同時に起こる可能性があるため、グループコミット機能を適用できる場合も発生する。
また、アプリケーション2のトランザクションは、アプリケーション1のトランザクションによってコミットされていない状態のレコードを参照しているため、本発明では、各トランザクションに依存関係を持たせることで、データベースの原子性を保証する。具体的には、本発明では、下記の(a)及び(b)の制御が行なわれる。
(a)アプリケーション1のトランザクションより先に、アプリケーション2のトランザクションが終了した場合、アプリケーション1のトランザクションが終了するまで、アプリケーション2のトランザクションを待機させる(図2参照)。
(b)アプリケーション1のトランザクションがロールバックした場合、アプリケーション2のトランザクションのコミットを拒絶し、アプリケーション2のトランザクションにロールバックさせる(図3参照)。
図2に示すように、(a)の制御が行なわれると、先にアプリケーション2のトランザクションがコミットを行っても、アプリケーション2のトランザクションは、アプリケーション1のコミット完了を待ち合わせることになる。
図3に示すように、(b)の制御が行なわれると、アプリケーション1のトランザクションがレコードデータ不正などの異常を検知してロールバックしたことにより、アプリケーション2のトランザクションからのコミットが拒絶され、アプリケーション2のトランザクションがロールバックされる。
図4は、本発明における各アプリケーションプログラムの処理順序と処理結果とを示す図である。図4には、アプリケーション1とアプリケーション2とがコミット及びロールバックを実施する順番と、各アプリケーションによる実施の結果とがまとめられている。図4においては、順番1→順番2の順に処理が行われ、矢印の後に記載されている内容が、実施結果を表している。
(実施の形態)
以下、本発明の実施の形態における、データベース管理装置、データベース管理方法、及びプログラムについて、図5〜図15を参照しながら説明する。
[装置構成]
最初に、図5を用いて、本実施の形態におけるデータベース管理装置の概略構成について説明する。図5は、本発明の実施の形態におけるデータベース管理装置の概略構成を示す図である。
図5に示す、本実施の形態におけるデータベース管理装置300は、複数のアプリケーションプログラム(以下「アプリケーション」と表記する)100によってアクセスされるデータベース200を管理するための装置である。
アプリケーション100はデータベース200を利用する任意のアプリケーションであり、データベース200に対して各種操作を要求する。操作としては、「排他ありレコード読み込み」、「レコード更新」、「更新完了」「コミット」、「ロールバック」、が挙げられる。なお、アプリケーション100によって要求される操作は、上記に限定されるものではない。本実施の形態において、アプリケーション100は、従来と同様に、一般的なデータベースに対して要求できる操作を要求することができる。
また、データベース200は、記憶装置の記憶領域に構築されており、データとして各種テーブルを格納している。また、テーブルは、複数のレコードで構成されている。また、以降の説明において、単に“レコード”と表記したものは、特記しない限りデータベース200に格納されているレコードを指している。
図5に示すように、データベース管理装置300は、要求受付部301と、アクセス処理制御部302とを備えている。このうち、要求受付部301は、データベース200に格納されているレコードに対するアプリケーション100からの要求を受け付ける。
アクセス処理制御部302は、アプリケーション100からの要求が特定のレコードに対する排他的使用である場合に、一定条件を満たすことを条件に、排他的使用を要求しているアプリケーション100に対して、排他的使用を許可する。
また、アクセス処理制御部302は、使用を許可されたアプリケーション100が特定のレコードの更新を完了する旨を宣言した場合に、特定のレコードに対する排他的な使用を解除する。そして、アクセス処理制御部302は、使用を許可したアプリケーション100以外のアプリケーション100に、特定のレコードの使用を許可する。
このように、本実施の形態では、データベース管理装置300は、アプリケーションがトランザクションの実行中にレコードの更新完了を宣言した場合は、コミットが完了していなくても、当該アプリケーションによるレコードの排他的使用を解除する。そして、データベース管理装置は、他のアプリケーションに、当該レコードの使用を許可する。このため、本実施の形態によれば、データベースシステムにおいて並列して処理を実行する複数のアプリケーション100の処理性能の低下を抑制することができる。
ここで、図6〜図9を用いて、本実施の形態におけるデータベース管理装置の具体的構成について説明する。図6は、本発明の実施の形態におけるデータベース管理装置の具体的構成を示すブロック図である。図6において、各処理部間を結ぶ実線は、処理部間でのデータのやり取りを行う関係を表している。また、破線は、管理表とそれを操作する処理部との関係を表している。
図6に示すように、本実施の形態では、データベース管理装置300は、要求受付部301及びアクセス処理制御部302に加えて、レコード排他制御部303と、依存関係制御部304と、ストレージ処理部305とを備えている。以下に、各処理部について具体的に説明する。
要求受付部301は、上述したように、アプリケーション100それぞれからの要求を受け付け、受け付けた要求をアクセス処理制御部302に渡す。また、要求受付部301は、本実施の形態では、複数備えられており、各要求受付部301は、複数存在するアプリケーション100のいずれかと一対一で対応している。
アクセス処理制御部302は、本実施の形態では、要求受付部301から受け取った要求に応じて、トランザクション更新管理表306の制御データを操作する。また、アクセス処理制御部302は、後述する各処理部を通して、アクセス処理を制御する。更に、アクセス処理制御部302は、要求の種類に応じた処理を行なうため、以下の処理部を有する。
具体的には、本実施の形態では、アクセス処理制御部302は、排他あり読み込み処理制御部311と、レコード更新処理制御部312と、更新完了処理制御部313と、コミット処理制御部314と、ロールバック処理制御部315とを備えている。
排他あり読み込み処理制御部311は、アプリケーション100が排他的なレコードの読み込み(「排他ありレコード読み込み」とも表記する。)を要求した場合に、要求元のアプリケーション100に対応するトランザクション更新管理表306が存在しているかどうかを判定する。また、排他あり読み込み処理制御部311は、この場合において、後述のレコード排他制御部303による処理結果に基づいて、排他あり読み込みが可能かどうかを判定する。
図7は、本発明の実施の形態で用いられるトランザクション更新管理表の一例を示す図である。図7に示すように、トランザクション更新管理表306は、アプリケーション100のトランザクション内容の管理に用いられる。また、トランザクション更新管理表306は、アプリケーション100毎に設けられている。
図7において、[アプリケーションID]は、対応するアプリケーション100を個々に識別する識別子である。アプリケーションIDは、例えば、UNIX(登録商標)システムにおけるプロセスIDのような識別子である。
[トランザクション状態]は、対応するアプリケーション100の現在のトランザクションの状態を示している。トランザクション状態には、“有効”と“無効”とがある。“有効”の場合は、アクセス処理制御部302は、該当するアプリケーション100からの全ての要求を受け付ける。“無効”の場合は、アクセス処理制御部302は、該当するアプリケーション100からの要求のうち、ロールバックのみを受け付け、それ以外の要求を拒否する。
[テーブル名]、[キー]、[値]、及び[更新]は、該当するトランザクションによる「排他あり読み込み」及び「更新」の対象となるレコードを識別する情報である。[テーブル名]はレコードのテーブル名を表し、[キー]はレコードの主キー値を表し、[値]はレコードのデータ部値を表している。
[更新]は、対象のレコードが更新されているかどうかを表している。“あり”の場合は更新が行なわれている状態を表し、“なし”の場合は「排他あり読み込み」のみが行なわれた状態を表している。
レコード更新処理制御部312は、アプリケーション100がレコード更新を要求した場合に、要求元アプリケーション100におけるトランザクション更新管理表306を確認する。そして、レコード更新処理制御部312は、トランザクション状態が“有効”である場合は、レコード更新要求に応じて、トランザクション更新管理表306の該当テーブルの該当レコードの値を更新する。
更新完了処理制御部313は、アプリケーション100がレコード更新完了を要求した場合に、要求元アプリケーション100におけるトランザクション更新管理表306を確認する。そして、更新完了処理制御部313は、トランザクション状態が“有効”である場合は、レコード排他制御部303に、後述するレコード排他管理表307(図8参照)を更新させる。
コミット処理制御部314は、アプリケーション100がトランザクションのコミットを要求した場合に、要求元アプリケーション100のトランザクション更新管理表306を確認する。そして、コミット処理制御部314は、トランザクション状態が“有効”である場合は、レコード排他制御部303に、後述するレコード排他管理表307(図8参照)を更新させる。
ロールバック処理制御部315は、アプリケーション100がロールバックを要求した場合に、依存関係制御部304にロールバック処理を要求する。
レコード排他制御部303は、図8に示すレコード排他管理表307の制御データを操作し、データベース200のレコードの排他制御を実行する。図8は、本発明の実施の形態で用いられるレコード排他管理表の一例を示す図である。図8に示すように、レコード排他管理表307は、データベース200に格納されているテーブル内の各レコードに対する、アプリケーション100による排他取得要求の管理と排他状態の管理とに用いられる。また、レコード排他管理表307は、複数行の“制御レコード”で構成されている。
以降の説明において、“制御レコード”は、特記しない限り、レコード排他管理表307に格納されているレコードを示している。レコード排他管理表307は、データベースに格納されているテーブル毎に設けられている。
また、レコード排他管理表307において、[テーブル名]は、対象のテーブル名を表している。[キー]は、レコードの主キー値を表している。[要求元]は、該当レコードの排他を要求したアプリケーション100のアプリケーションIDを表している。
[直前要求元]は、該当レコードに対して、要求元アプリケーション100の直前に排他取得を要求していたアプリケーション100を表している。[直前要求元]が“なし”となっている場合は、直前に排他要求をしていたアプリケーション100が存在していないか、既に、直前のアプリケーション100のトランザクションが完了していることを表している。
また、[キー]が同一となっている制御レコード同士では、一方の[要求元]と他方の[直前要求元]とが一致しており、両者によって、リスト構造が構成され、要求順が管理されている。
[排他状態]は、データベース200に格納されているレコードに対する要求元アプリケーション100の排他状態を表している。“排他待ち”は、排他取得待ち状態を表している。“取得中”の場合は排他を取得した状態を表している。“更新完了”は、排他取得後に更新完了を宣言された状態であることを表している。[キー]が同一となっている制御レコードにおいては、“取得中”である制御レコードは必ず1つである。
依存関係制御部304は、アプリケーション100それぞれのトランザクションの依存関係を管理し、アクセス処理制御部302による処理の結果に応じて、依存関係を更新する。本実施の形態では、依存関係制御部304は、図9に示すトランザクション依存管理表308の制御データを操作し、アプリケーション100間のトランザクション依存関係を制御する。本実施の形態では、依存関係制御部304によって、トランザクションの原子性を保証しつつ、排他待ち時間を短縮している。
図9は、本発明の実施の形態で用いられるトランザクション依存管理表の一例を示す図である。図9に示すように、トランザクション依存管理表308は、トランザクションの依存関係をグラフ構造で表示しており、現在有効なトランザクション間の依存関係の管理に用いられる。
また、トランザクション依存管理表308に示された各ノードには、トランザクションを識別するために、アプリケーションIDが表示されている。トランザクション依存管理表308は、「アプリケーションID」を管理しているともいえる。また、トランザクション依存管理表308において、矢印は、ノード間の依存関係を表しており、矢印の向きは、親ノードから子ノードの方向に設定されている。
あるアプリケーション100によって更新完了とされたレコードが、他のアプリケーション100によって排他取得されたとする。この場合、トランザクション依存管理表308においては、更新を完了したアプリケーション100は親ノードとして表示され、排他取得したアプリケーション100は子ノードとして表示される。
従って、トランザクション依存管理表308によれば、トランザクションがコミット可能かどうかを親ノードの存在によって判断することができる。また、トランザクション依存管理表308において、親ノードが存在しなければ、コミットを即時実行できると判断できる。一方、親ノードが存在すれば、親ノードのトランザクションがコミットされるまでコミットの実行を待つべきと判断できる。
更に、トランザクション依存管理表308において、コミットが実行されれば、該当ノードは削除され、ロールバックが実行されれば、該当ノードとその子孫ノードとは削除される。また、トランザクション依存管理表308では、子孫ノードとは、子ノードとその先の子ノードとの全てを含むノードを意味する。
ストレージ処理部305は、データベース200を構成する記憶装置(ストレージ)に対して、レコードのデータ取得及びデータ更新を実行する。
[動作説明]
次に、本発明の実施の形態におけるデータベース管理装置300の動作について図10〜図14を用いて説明する。また、本実施の形態では、データベース管理装置300を動作させることによって、データベース管理方法が実施される。よって、本実施の形態におけるデータベース管理方法の説明は、以下のデータベース管理装置300の動作説明に代える。
また、以下においては、アプリケーション100による要求が、「排他ありレコード読み込み」、「レコード更新」、「更新完了」、「コミット」、及び「ロールバック」である場合、それぞれについて説明する。
[排他ありレコード読み込み]
最初に、図10を用いて、アプリケーション100が排他ありレコード読み込みを要求した場合のデータベース管理装置300の動作について説明する。図10は、アプリケーションによる要求が排他ありレコード読み込みである場合の本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。以降においては、要求元であるアプリケーション100のアプリケーションIDを“AP001”として説明する。
図10に示すように、最初に、要求受付部301は、アプリケーション100から、排他ありレコード読み込みの要求を受付ける(ステップA1)。具体的には、要求受付部301は、アプリケーション100から、読み込み対象となるテーブルのテーブル名と、読み込み対象レコードのキー値とを、情報として受け取り、受け取った情報を、アクセス処理制御部302の排他あり読み込み処理制御部311に渡す。
次に、排他あり読み込み処理制御部311は、アプリケーションIDが要求のあったアプリケーションに該当するトランザクション更新管理表306が存在しているかどうかを判定する(ステップA2)。具体的には、例えば、要求のあったアプリケーションIDが“AP001”であるとすると、排他あり読み込み処理制御部311は、アプリケーションIDが“AP001”に設定されたトランザクション更新管理表306が存在しているどうかを判定する。
ステップA2の判定の結果、該当するトランザクション更新管理表306が存在しない場合は、排他あり読み込み処理制御部311は、アプリケーションIDを“AP001”に設定したトランザクション更新管理表306を新たに作成する(ステップA3)。また、排他あり読み込み処理制御部311は、作成したトランザクション更新管理表306におけるトランザクション状態を“有効”にする。
一方、ステップA2の判定の結果、該当するトランザクション更新管理表306が存在する場合、及びステップA3の実行後は、排他あり読み込み処理制御部311は、トランザクション更新管理表306のトランザクション状態が“有効”かどうかを判定する(ステップA4)。
ステップA4の判定の結果、トランザクション状態が“無効”の場合は、排他あり読み込み処理制御部311は、要求受付部301を通して、要求のあったアプリケーション100にエラーを返却する(ステップA5)。この場合、データベース管理装置300における処理は一旦終了する。
一方、ステップA4の判定の結果、トランザクション状態が“有効”の場合は、排他あり読み込み処理制御部311は、レコード排他制御部303に、要求元アプリケーションが求めているレコードの排他状態を確認させる(ステップA6)。
具体的には、排他あり読み込み処理制御部311は、要求元アプリケーション100のID(“AP001”)と、排他対象レコードのテーブル名及びキーの値とを、レコード排他制御部303に渡す。これにより、レコード排他制御部303は、該当テーブル用のレコード排他管理表307から制御レコードを読み込み、排他対象レコードの排他状態を確認する。
次に、レコード排他制御部303は、要求元アプリケーション100以外の別のアプリケーション100によって、排他対象レコードについて更新完了が宣言されているかどうかを判定する(ステップA7)。
ステップA7の判定の結果、排他対象レコードについて更新完了が宣言されていない場合は、レコード排他制御部303は、排他状態の状況に応じて、排他制御を実行する(ステップA8)。一方、ステップA7の判定の結果、排他対象レコードについて更新完了が宣言されている場合は、レコード排他制御部303は、依存関係制御部304に、依存関係の状況に応じて処理を実行させる(ステップA9)。
ここで、ステップA7〜A9までについて具体的に説明する。まず、ステップA7においては、レコード排他制御部303は、該当テーブル用のレコード排他管理表307から制御レコードを読み込み、排他対象レコードの排他状態を確認する。続いて、レコード排他制御部303は、排他状態が、下記のパターン1〜5のいずれに該当するかを判定する。
パターン1:制御レコードがレコード排他管理表307に存在しない。
パターン2:[排他状態]が“取得中”の制御レコードが存在し、[要求元]が要求元アプリケーション100(“AP001”)である。
パターン3:[排他状態]が“取得中”の制御レコードが存在し、[要求元]が要求元アプリケーション100(“AP001”)とは別のアプリケーション100である。
パターン4:[排他状態]が“更新完了”の制御レコードのみが存在し、排他取得者が要求元アプリケーション100(“AP001”)である。
パターン5:[排他状態]が“更新完了”の制御レコードのみが存在し、排他取得者が要求元アプリケーション100(“AP001”)とは別のアプリケーション100である。
そして、パターン1〜4に該当する場合は、ステップA7においてNoとなり、レコード排他制御部303は、ステップA8を実行する。ステップA8の具体的な内容は以下の通りである。
パターン1に該当する場合は、他のアプリケーション100が該当レコードを排他していないので、要求元のアプリケーション100は排他取得可能である。また、データベース200にあるレコードのデータが、そのレコードの最新データである。従って、レコード排他制御部303は、該当テーブルのレコード排他管理表307に該当レコードの制御レコードを新規に追加し、[要求元]を要求元アプリケーション100のID(“AP001”)に設定し、[排他状態]を“取得中”に設定する。また、レコード排他制御部303は、[直前要求元]を“なし”に設定する。
その後、レコード排他制御部303は、排他あり読み込み処理制御部311に“排他取得者なし”を返却する。これにより、排他あり読み込み処理制御部311は、ストレージ処理部305に該当レコードの読み込みを要求し、取得したデータを要求元アプリケーション100のトランザクション更新管理表306に登録する。このとき、[更新]は“なし”とする。その後、排他あり読み込み処理制御部311は、要求受付部301を通して、要求元アプリケーション100にレコードデータを渡す。
パターン2に該当する場合は、要求元アプリケーション100が該当レコードに対して再度排他あり読み込みを行った場合である。この時は、レコード排他制御部303は、排他あり読み込み処理制御部311に対して、要求元アプリケーション100のトランザクション更新管理表306から該当レコードのデータを取得させる。この後、排他あり読み込み処理制御部311は、要求受付部301を通して、要求元アプリケーション100にレコードデータを渡す。
パターン3に該当する場合は、他のアプリケーション100が排他を取得しているため、排他取得待ちとなる。レコード排他制御部303は、該当レコードに対する要求元アプリケーション100の制御レコードが存在しなければ、レコード排他管理表307に制御レコードを新規に追加する。そして、レコード排他制御部303は、[要求元]を要求元アプリケーション100のID(“AP001”)に設定し、[排他状態]を“取得待ち”に設定する。また、レコード排他制御部303は、[直前要求元]には、[キー]が同一で、最後に追加された制御レコードの[要求元]を設定する。
一方、レコード排他制御部303は、該当レコードに対する要求元アプリケーション100の制御レコードが既に存在する場合は、制御レコードを追加せず、排他あり読み込み処理制御部311に排他中であることを返却する。これにより、排他あり読み込み処理制御部311は、要求受付部301に、待機後に要求をリトライするように指示する。
パターン4に該当する場合は、要求元アプリケーション100が一度更新完了を宣言したレコードに対して、再度排他を取得した場合である。一度更新完了を宣言したレコードに対して排他取得は禁止されている。従って、レコード排他制御部303は、排他取得不可を、排他あり読み込み処理制御部311に返却し、要求受付部301を通して、要求元アプリケーション100に排他取得不可を通知する。
パターン5に該当する場合は、ステップA7においてYesとなり、レコード排他制御部303は、ステップA9を実行する。具体的には、パターン5に該当する場合は、要求元のアプリケーション100が、他のアプリケーション100によって更新完了が宣言されたレコードに対して、排他を取得しようとした場合である。
ここで、更新完了を宣言したアプリケーション100のIDを“AP002”として、以下に具体例を説明する。この場合、レコード排他制御部303は、レコード排他管理表307において、該当レコードに対する要求元アプリケーション100(“AP001”)の制御レコードが存在していた場合は、[排他状態]を“取得待ち”から“取得中”に更新する。一方、該当レコードに対する要求元アプリケーション100(“AP001”)の制御レコードが存在していない場合は、レコード排他制御部303は、同様の制御レコードを新規に追加する。
その後、レコード排他制御部303は、アクセス処理制御部302の排他あり読み込み処理制御部311に対して、排他取得可能を返却し、更に、更新完了を宣言していたアプリケーション100のID(“AP002”)も返却する。
続いて、アクセス処理制御部302において、排他あり読み込み処理制御部311は、親ノードが“AP002”となり、子ノードが“AP001”となる場合の依存関係の登録を、依存関係制御部304に要求する。依存関係制御部304はトランザクション依存管理表308を参照して、排他あり読み込み処理制御部311からの登録要求に対して登録可能かどうかを確認する。
具体的には、依存関係制御部304は、以下のパターン6〜9のいずれかに該当するかを判定し、判定結果に応じた処理を実行する。
パターン6:既に該当する依存関係が登録されている。
パターン7:新規子ノード(“AP001”)に相当するノードが存在しない。
パターン8:新規子ノード(“AP001”)に相当するノードが存在するが、該当する依存関係は登録されていない。また、新規子ノードの子孫ノードとしても、新規親ノード(“AP002”)は存在していない。
パターン9:新規子ノード(“AP001”)に相当するノードが存在するが、該当する依存関係は登録されていない。但し、新規子ノードの子孫ノードとして、新規親ノード(“AP002”)が存在する。
パターン6に該当する場合は、既に別のレコードにおいて、アプリケーション100“AP002”が更新完了したレコードに対してアプリケーション100“AP001”が排他を取得していた状態である。従って、既に該当する依存関係が存在するため、依存関係制御部304による登録処理は不要である。
パターン7及び8に該当する場合は、排他あり読み込み処理制御部311は、要求した依存関係が登録可能な状態であるため、新規に依存関係を登録する。排他あり読み込み処理制御部311は、いずれかのノードが存在しなければノードを追加する。
また、パターン6〜8においては、登録が完了すると、依存関係制御部304は、排他あり読み込み処理制御部311に対して、登録完了を返却する。該当レコードの最新のレコードデータは、更新完了を宣言していたアプリケーション100(“AP002”)の更新したデータである。
このため、排他あり読み込み処理制御部311はアプリケーションIDが“AP002”のトランザクション更新管理表306から該当レコードのデータを取得し、取得したデータを、要求受付部301を通して、要求元アプリケーション100(“AP001”)に渡す。これにより、他アプリケーション100(“AP002”)のトランザクションで更新されたレコードを排他待ちせずに、排他あり読み込みすることが可能になる。
更に、パターン9に該当する場合は、登録要求を受けた依存関係と逆の依存関係が既に登録されている場合である。例えば、既にアプリケーション100(“AP001”)が更新完了したレコードをアプリケーション100(“AP002”)が排他取得していた場合が該当する。この場合、依存関係が循環してしまうため、後述するコミット時の親ノードのトランザクション完了待ちにおいて、デッドロックが発生してしまう。そのため、デッドロックにならないように、次に示す処理によって新規親ノードのトランザクションを無効にすることで、デッドロックを解消する。
具体的には、依存関係制御部304は、新規親ノード(“AP002”)とその子孫ノードとをトランザクション依存管理表308から削除する。その後、排他あり読み込み処理制御部311に対して、“再判定”を返却し、削除したノードにあたるアプリケーション100のID一覧を返却する。
排他あり読み込み処理制御部311は、削除したアプリケーション100全てのトランザクションを無効にするために、該当アプリケーション100のトランザクション更新管理表306のトランザクション状態を“無効”に更新する。
次に、排他あり読み込み処理制御部311は、無効にしたアプリケーション100のID一覧をレコード排他制御部303に渡し、再度排他取得の判定を要求する。レコード排他制御部303は、レコード排他管理表307を確認し、無効になったアプリケーション100のIDが[要求元]に設定されている制御レコードを削除する。
また、レコード排他制御部303は、無効になったアプリケーション100のIDが[直前要求元]に設定されている制御レコードに対して、[直前要求元]の設定値を、削除した制御レコードに設定されていた[直前要求元]の設定値に変更する。つまり、レコード排他制御部303は、排他順を管理している制御レコードのリスト構造から、無効になった要求元アプリケーション100の制御レコードを切り離して、残りの有効な制御レコード同士をつなぎ直す。その後、レコード排他制御部303は、該当レコードの制御レコードで、[要求元]が要求元アプリケーション100であるID(“AP001”)のおける[直前要求元]を確認する。この時、パターンとしては以下の二つがある。
パターン10:[直前要求元]が“なし”である。
パターン11:[直前要求元]に他のアプリケーション100のIDが設定されている。
パターン10の場合は、トランザクションが有効であり、且つ、該当レコードを更新している他のアプリケーション100が存在しないため、データベース200に格納されたレコードデータが最新データになる。これは、上述したパターン1と同じであるため、パターン1の通りの動作を行うことで、要求元アプリケーション100(“AP001”)に対してレコードデータを返却し、排他取得が成立する。
パターン11の場合は、トランザクションが有効であり、且つ、該当レコードを更新している他のアプリケーション100が存在する。このため、要求元アプリケーション100(“AP001”)は、そのアプリケーション100の子ノードとしてトランザクション依存関係を登録する必要がある。これは、上述したパターン5と同じであるので、トランザクション依存関係の登録が再実行される。また、この再登録が繰り返し実行されると、最終的にはパターン6、7、8、10のいずれかのパターンとなって排他取得が完了する。
[レコード更新]
次に、図11を用いて、アプリケーション100が排他あり読み込み中のレコードに対してレコード更新を要求した場合のデータベース管理装置300の動作について説明する。図11は、アプリケーションによる要求がレコード更新である場合の本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。
図11に示すように、最初に、要求受付部301は、アプリケーション100から、レコード更新の要求を受け付ける(ステップB1)。また、要求受付部301は、受付けた要求をアクセス処理制御部302のレコード更新処理制御部312に渡す。
次に、レコード更新処理制御部312は、要求元アプリケーション100のトランザクション更新管理表306を確認し、トランザクション状態が“有効”であるかどうかを判定する(ステップB2)。
ステップB2の判定の結果、トランザクション状態が“無効”である場合は、レコード更新処理制御部312は、要求受付部301を通して、要求元アプリケーション100に更新失敗を通知する(ステップB3)。
一方、ステップB2の判定の結果、トランザクション状態が“有効”である場合は、レコード更新処理制御部312は、トランザクション更新管理表306に格納している該当テーブルにおける該当レコードの値を更新し、[更新]を“あり”に更新する(ステップB4)。
次に、ステップB4の実行後、レコード更新処理制御部312は、要求受付部301を通して、要求元アプリケーション100に更新成功を通知する(ステップB5)。
[更新完了]
次に、図12を用いて、アプリケーション100が排他あり読み込み中のレコードに対してレコードの更新完了を要求した場合のデータベース管理装置300の動作について説明する。図12は、アプリケーションによる要求がレコードの更新完了である場合の本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。
図12に示すように、最初に、要求受付部301は、アプリケーション100から、レコードの更新完了の要求を受け付ける(ステップC1)。また、要求受付部301は、受付けた要求をアクセス処理制御部302の更新完了処理制御部313に渡す。
次に、更新完了処理制御部313は、要求元アプリケーション100のトランザクション更新管理表306を確認し、トランザクション状態が“有効”であるかどうかを判定する(ステップC2)。
ステップC2の判定の結果、トランザクション状態が“無効”である場合は、更新完了処理制御部313は、要求受付部301を通して、要求元アプリケーション100に失敗を通知する(ステップC3)。
一方、ステップC2の判定の結果、トランザクション状態が“有効”である場合は、更新完了制御部313は、レコード排他制御部303に、更新完了を要求する。これにより、レコード排他制御部303は、レコード排他管理表307を確認し、該当する制御レコードの状態を“取得中”から“更新完了”に更新し、処理完了を返却する(ステップC4)。
次に、ステップC4の実行後、更新完了処理制御部313は、要求受付部301を通して、要求元アプリケーション100に処理完了を通知する(ステップC5)。
[コミット]
次に、図13を用いて、アプリケーション100がトランザクションのコミットを要求した場合のデータベース管理装置300の動作について説明する。図13は、アプリケーションによる要求がコミットである場合の本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。
図13に示すように、最初に、要求受付部301は、アプリケーション100から、トランザクションのコミットの要求を受け付ける(ステップD1)。
次に、要求受付部301は、受付けた要求をアクセス処理制御部302のコミット処理制御部314に渡す。これにより、コミット処理制御部314は、要求元アプリケーション100のトランザクション更新管理表306を確認し、トランザクション状態が“有効”であるかどうかを判定する(ステップD2)。
ステップD2の判定の結果、トランザクション状態が“無効”である場合は、コミット処理制御部314は、要求受付部301を通して、要求元アプリケーション100にコミット失敗を通知する(ステップD3)。
一方、ステップD2の判定の結果、トランザクション状態が“有効”である場合は、コミット処理制御部314は、依存関係制御部304に、要求元アプリケーション100がコミット可能かどうかの確認を要求する。これにより、依存関係制御部304は、要求元アプリケーション100がコミット可能かどうかを判定する(ステップD4)。
具体的には、ステップD4では、依存関係制御部304は、トランザクション依存管理表308を参照し、要求元アプリケーション100のノードに親ノードが存在しているかどうかを判定する。これは、要求元アプリケーション100のノードに親ノードが存在する場合は、要求元アプリケーション100が他のアプリケーション100の更新完了レコードを排他していて、他のアプリケーション100がコミット完了していないことを表しているからである。また、要求元アプリケーション100のノードに親ノードが存在していない場合は、要求元トランザクションは既に他のトランザクションに依存していないため、コミット可能な状態であるからである。
ステップD2の判定の結果、コミット可能ではない場合、即ち、親ノードが存在している場合は、依存関係制御部304は、親ノードのアプリケーション100のコミット待ちが必要と判断し、コミット処理制御部314に“コミット待ち”を返却する。これにより、コミット処理制御部314は、要求受付部301に、待機した後で再度ステップD2を実行するよう要求する(ステップD5)。これにより、要求受付部301は、、待機状態となり、設定時間の経過後に、コミット処理制御部314に、再度ステップD2の判定を実行させる。
一方、ステップD2の判定の結果、コミット可能である場合、即ち、親ノードが存在していない場合は、依存関係制御部304は、トランザクション依存管理表308から、要求元アプリケーション100のノードを削除し、コミット処理制御部314に“コミット可能”を返却する。
これにより、コミット処理制御部314は、要求元アプリケーション100のトランザクション更新管理表306を参照し、[更新]が“あり”となっている全てのレコードデータを取り出し、ストレージ処理部305に書き込みを要求する。これにより、データベース200のレコードが更新される(ステップD6)。
次に、ステップD6による書き込みが完了すると、コミット処理制御部314は、要求元アプリケーション100の排他レコードを解除するために、レコード排他制御部303に排他解除を要求する。これにより、レコード排他制御部303は、全てのレコード排他管理表307から、[要求元]が要求元アプリケーション100のアプリケーションIDである制御レコードを全て削除する(ステップD7)。
また、ステップD7では、レコード排他制御部[直前要求元]が要求元アプリケーション100のアプリケーションIDである制御レコードに対して、[直前要求元]を“なし”に設定する。レコード排他制御部303はコミット処理制御部314に完了を通知する。
次に、コミット処理制御部314は、依存関係制御部304に、要求元アプリケーション100のトランザクション依存関係の解除を要求する。依存関係制御部304はトランザクション依存管理表308から、要求元アプリケーション100のノードを削除する(ステップD8)。
次に、ステップD7のレコード排他とステップD8のトランザクション依存関係の削除とが完了すると、コミット処理制御部314は、要求元アプリケーション100のトランザクション更新管理表306を削除する(ステップD9)。
そして、コミット処理制御部314は、要求受付部301を通して、要求元アプリケーション100にコミット完了を通知する(ステップD10)。
[ロールバック]
最後に、図14を用いて、ロールバック時におけるデータベース管理装置300の動作について、説明する。図14は、アプリケーションによる要求がロールバックである場合の本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。
図14に示すように、最初に、要求受付部301は、アプリケーション100からロールバック要求を受け付ける(ステップE1)。また、要求受付部301は、受付けた要求をアクセス処理制御部302のロールバック処理制御部315に渡す。
次に、ロールバック処理制御部315は、依存関係制御部304にロールバック処理を要求する。依存関係制御部304は、ロールバック要求を受け取ると、トランザクション依存管理表308を確認し、要求元アプリケーション100のノードとその子孫のノード全てを削除する(ステップE2)。また、ステップE2では、依存関係制御部304は、削除した子孫のノードにあたるアプリケーション100のID一覧をトランザクション無効一覧として、ロールバック処理制御部315に返却する。
次に、ロールバック処理制御部315は、要求元アプリケーション100のIDと、依存関係制御部304から返却されたトランザクションが無効になったアプリケーション100のID一覧とを、レコード排他制御部303に渡す。そして、ロールバック処理制御部315は、レコード排他制御部303に、これらのアプリケーション100のレコード排他の解除を要求する。
これにより、レコード排他制御部303は、レコード排他管理表307から、渡されたアプリケーションIDが[要求元]に設定されている制御レコードを全て削除する(ステップE3)。また、渡されたアプリケーションIDが[直前要求元]に設定されている制御レコードが存在すれば、レコード排他制御部303は、[直前要求元]の値を更新し、レコード排他要求順番のリストをつなぎ直す。
最後に、ロールバック処理制御部315は、要求元アプリケーション100のトランザクション更新管理表306を削除する(ステップE4)。また、ロールバック処理制御部315は、依存関係制御部304から受け取ったトランザクション無効一覧にあるアプリケーション100全てに対して、トランザクション更新管理表306の[状態]を“無効”に更新する。これにより、要求元アプリケーション100が更新完了したレコードに対して排他を取得した別のアプリケーション100のトランザクションが無効になる。
[実施の形態による効果]
以上のように、本実施の形態では、排他ありレコード読み込み時に、パターン5、及びパターン6〜8の条件が満たされた場合、同一のレコードを排他する複数のアプリケーション100において、排他取得中のアプリケーション100のトランザクションがコミットされる前に、別のアプリケーション100が排他を取得できるようになる。このため、本実施の形態によれば、排他待ち時間が短縮され、データベースシステムにおいて並列して処理を実行する複数のアプリケーション100の処理性能の低下が抑制される。
[変形例]
続いて、本実施の形態における変形例について説明する。本変形例によれば、同一レコードを排他する2つのトランザクションに対して、グループコミット機能を適用することが可能となる。
ここで、グループコミット機能について説明する。一般に、Oracle(登録商標)又はMySQL(登録商標)などに代表される従来からのデータベースシステムは、複数の完了済みトランザクションをまとめてストレージにコミットするといったグループコミット機能を有している。コミットはストレージへの書き込み等を必要とするコストのかかる処理であるが、グループコミット機能によれば、複数トランザクションのコミット処理を一度に行うことができるので、コミット処理のオーバーヘッドを抑えることが可能となる。よって、グループコミット機能により、トランザクションのスループットの向上が期待できる。
但し、同一レコードを排他するトランザクション同士は、コミット処理がシリアライズされてしまうため、グループコミット機能を用いて、これらのトランザクションを同時に完了させることは不可能である。上述の図16を用いて説明すると、アプリケーション1のコミットとアプリケーション2のコミットとの間に、共有レコードの排他解除があるため、2つのコミットが同時に起きることはない。
なお、コミットでのストレージ書き込みをバッファリングすれば、同一レコードを排他する2つのトランザクションに対して、グループコミット機能を適用できるようにも考えられる。しかし、この場合は、コミットに対して、ストレージへのデータの永続化が保証されているわけではないため、耐障害性が低下してしまう。
このため、本変形例では、決められた個数のコミット要求が集まった場合に、コミットが行なわれるように、コミット時の制御を行なうことで、グループコミット機能への対応が図られている。以下に具体的に説明する。
本変形例では、コミット処理制御部314は、要求受付部301からコミット要求を受け取ると、トランザクション状態が“有効”であることを確認した後で、決められた個数のコミット要求が届いているかを確認する。届いていなければ、コミット処理制御部314は、他の要求受付部301からのコミット要求を受け付けるまで、コミット処理を保留する。既にコミット要求の個数が達している場合は、コミット処理制御部314は、コミット処理を進める。
また、コミット処理を進める場合、コミット処理制御部314は、依存関係制御部304に、コミット要求中のアプリケーション100のアプリケーションID一覧を渡し、それぞれについてコミット可能かどうかの判定を要求する。これにより、依存関係制御部304は、トランザクション依存管理表308を参照し、各アプリケーション100のノードに親ノードが存在するかを確認する。
親ノードが存在した場合であっても、そのノードがコミット要求中のアプリケーション100のノードである場合は、依存関係制御部304は、コミット可能と判定する。依存関係制御部304は、コミット可能なアプリケーション100とコミット待ちのアプリケーション100とを判別して、コミット処理制御部314に判定結果を返却する。
コミット処理制御部314は、コミット可能と判断されたアプリケーション100について、該当するトランザクション更新管理表306に格納された全ての更新データを取得する。そして、取得された更新データの中に、テーブル名とレコードのキー値とが一致する複数の更新データが存在するとする。この場合、コミット処理制御部314は、依存関係制御部304に対して、その更新レコードを更新していた複数のアプリケーション100のうち、トランザクション依存関係において最も下層の子ノードとなるものがいずれであるかを確認するよう要求する。
最も下層の子ノードに該当するアプリケーション100を確認できると、コミット処理制御部314は、該当するアプリケーション100のレコードデータのみを残し、親ノードのアプリケーション100が更新していた同一レコードデータについては破棄する。これは、データベース200において、同一レコードを更新する場合は、最も新しいレコードのみを更新する必要があるためである。また、最も下層の子ノードであるアプリケーション100のトランザクション更新管理表306が、最も新しいレコードデータを保持している。
そして、コミット処理制御部314は、全ての更新後のレコードデータが揃うと、ストレージ処理部305にデータベース200への書き込みを要求する。また、コミット処理制御部314は、データベース200への書き込みが完了すると、レコード排他制御部303にコミットを実行したアプリケーション100の排他解除を要求し、更に、依存関係制御部304に依存関係削除を要求する。
また、コミット処理制御部314は、それぞれの制御レコードが削除できたら、要求受付部301を通して、コミット完了した全てのアプリケーション100に対し、コミット完了を通知する。
これにより、同一レコードを排他する複数のアプリケーション100がグループコミットによってまとめてコミットすることが可能になる。
[デッドロックとその回避策]
ここで、本実施の形態で発生する可能生のあるデッドロックとその回避策とについて説明する。上述した排他ありレコード読み込みにおけるパターン9は、トランザクション依存関係によるデッドロックが発生している状態である。
一般的にデッドロックは、2つのトランザクションが2つのレコード(例えば、レコードAとレコードBとする)を排他する際に、一方のトランザクションがレコードA→レコードBの順に排他取得し、もう一方のトランザクションがレコードB→レコードAの順に排他取得するような場合に発生する。
そして、このような場合においては、全てのトランザクションにおいて、レコードの排他取得順を統一することで、デッドロックが発生しないようにできる。しかしながら、本実施の形態では、レコードの排他取得順を統一したとしてもデッドロックが発生する可能性がある。例えば、2つのトランザクション(例えば、トランザクション1とトランザクション2とする)が、レコードA→レコードBという順番で排他を取得する場合を考える。
トランザクション1が、レコードAを排他して更新した直後に更新完了を宣言する。別のトランザクション2が、トランザクション1の更新完了後にレコードAを排他して更新し、更新完了を宣言する。その後、トランザクション2がトランザクション1よりも先にレコードBの排他を取得して更新し、更新完了を宣言する。その後、トランザクション1がレコードBの排他を取得する。この時、トランザクション1とトランザクション2との依存関係が循環するため、本実施の形態では、片方または両方のトランザクションが無効となる。
このようなトランザクションの異常が発生しないようにするには、レコードAの排他を取得して更新した後すぐには、レコードAを更新完了をせず、レコードBの排他を取得した後でレコードAの更新完了を宣言すればいい。つまり、トランザクション1がレコードBを排他した後でレコードAの更新完了をすることで、トランザクション2は、トランザクション1よりも先にレコードBを排他することを防ぐことができる。このため、本実施の形態では、上述の処理が行なわれる。
[プログラム]
本実施の形態におけるプログラムは、コンピュータに、図10に示すステップA1〜A9、図11に示すステップB1〜B5、図12に示すステップC1〜C5、図13に示すステップD1〜D10、図14に示すステップE1〜E4を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態におけるデータベース管理装置300とデータベース管理方法とを実現することができる。この場合、コンピュータのCPU(Central Processing Unit)は、要求受付部301、アクセス処理制御部302、レコード排他制御部303、依存関係制御部304、及びストレージ処理部305として機能し、処理を行なう。
また、本実施の形態におけるプログラムは、複数のコンピュータによって構築されたコンピュータシステムによって実行されても良い。この場合は、例えば、各コンピュータが、それぞれ、要求受付部301、アクセス処理制御部302、レコード排他制御部303、依存関係制御部304、及びストレージ処理部305のいずれかとして機能しても良い。また、記憶部50は、本実施の形態におけるプログラムを実行するコンピュータとは別のコンピュータ上に構築されていても良い。
[物理構成]
ここで、本実施の形態におけるプログラムを実行することによって、データベース管理装置300を実現するコンピュータについて図15を用いて説明する。図15は、本発明の実施の形態におけるデータベース管理装置を実現するコンピュータの一例を示すブロック図である。
図15に示すように、コンピュータ110は、CPU111と、メインメモリ112と、記憶装置113と、入力インターフェイス114と、表示コントローラ115と、データリーダ/ライタ116と、通信インターフェイス117とを備える。これらの各部は、バス121を介して、互いにデータ通信可能に接続される。
CPU111は、記憶装置113に格納された、本実施の形態におけるプログラム(コード)をメインメモリ112に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ112は、典型的には、DRAM(Dynamic Random Access Memory)等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体120に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス117を介して接続されたインターネット上で流通するものであっても良い。
また、記憶装置113の具体例としては、ハードディスクドライブの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス114は、CPU111と、キーボード及びマウスといった入力機器118との間のデータ伝送を仲介する。表示コントローラ115は、ディスプレイ装置119と接続され、ディスプレイ装置119での表示を制御する。
データリーダ/ライタ116は、CPU111と記録媒体120との間のデータ伝送を仲介し、記録媒体120からのプログラムの読み出し、及びコンピュータ110における処理結果の記録媒体120への書き込みを実行する。通信インターフェイス117は、CPU111と、他のコンピュータとの間のデータ伝送を仲介する。
また、記録媒体120の具体例としては、CF(CompactFlash(登録商標))及びSD(Secure Digital)等の汎用的な半導体記憶デバイス、フレキシブルディスク(Flexible Disk)等の磁気記録媒体、又はCD−ROM(Compact DiskRead Only Memory)などの光学記録媒体が挙げられる。
なお、本実施の形態におけるデータベース管理装置300は、プログラムがインストールされたコンピュータではなく、各部に対応したハードウェアを用いることによっても実現可能である。更に、データベース管理装置300は、一部がプログラムで実現され、残りの部分がハードウェアで実現されていてもよい。
上述した実施の形態の一部又は全部は、以下に記載する(付記1)〜(付記12)によって表現することができるが、以下の記載に限定されるものではない。
(付記1)
複数のアプリケーションプログラムによってアクセスされるデータベースを管理するための装置であって、
前記データベースに格納されているレコードに対する前記アプリケーションプログラムからの要求を受け付ける、要求受付部と、
前記要求が特定のレコードに対する排他的使用である場合に、一定条件を満たすことを条件に、排他的使用を要求している前記アプリケーションプログラムに対して、排他的使用を許可する、アクセス処理制御部と、
を備え、
前記アクセス処理制御部は、使用を許可された前記アプリケーションプログラムが前記特定のレコードの更新を完了する旨を宣言した場合に、前記特定のレコードに対する排他的な使用を解除して、使用を許可した前記アプリケーションプログラム以外のアプリケーションプログラムに、前記特定のレコードの使用を許可する、
ことを特徴とするデータベース管理装置。
(付記2)
前記アクセス処理制御部は、使用を許可された前記アプリケーションプログラムが、トランザクションの途中で、前記特定のレコードの更新を完了する旨を宣言した場合でも、前記特定のレコードに対する排他的な使用を解除する、
付記1に記載のデータベース管理装置。
(付記3)
前記複数のアプリケーションプログラムそれぞれのトランザクションの依存関係を管理する、依存関係制御部を更に備え、
前記依存関係制御部は、前記アクセス処理制御部による処理の結果に応じて、前記依存関係を更新する、
付記2に記載のデータベース管理装置。
(付記4)
前記アクセス処理制御部が、前記要求がトランザクションのコミットである場合に、要求されたコミットの数が設定数以上であることを条件に、要求している前記アプリケーション全てのトランザクションをコミットする、
付記1〜3のいずれかに記載のデータベース管理装置。
(付記5)
複数のアプリケーションプログラムによってアクセスされるデータベースを管理するための方法であって、
(a)前記データベースに格納されているレコードに対する前記アプリケーションプログラムからの要求を受け付ける、ステップと、
(b)前記要求が特定のレコードに対する排他的使用である場合に、一定条件を満たすことを条件に、排他的使用を要求している前記アプリケーションプログラムに対して、排他的使用を許可する、ステップと、
(c)使用を許可された前記アプリケーションプログラムが前記特定のレコードの更新を完了する旨を宣言した場合に、前記特定のレコードに対する排他的な使用を解除して、使用を許可した前記アプリケーションプログラム以外のアプリケーションプログラムに、前記特定のレコードの使用を許可する、ステップと、
を有することを特徴とするデータベース管理方法。
(付記6)
前記(c)のステップにおいて、使用を許可された前記アプリケーションプログラムが、トランザクションの途中で、前記特定のレコードの更新を完了する旨を宣言した場合でも、前記特定のレコードに対する排他的な使用を解除する、
付記5に記載のデータベース管理方法。
(付記7)
(d)前記複数のアプリケーションプログラムそれぞれのトランザクションの依存関係を管理する、ステップを更に有し、
前記(d)のステップにおいて、前記(b)及び(c)のステップによる処理の結果に応じて、前記依存関係を更新する、
付記6に記載のデータベース管理方法。
(付記8)
(e)前記要求がトランザクションのコミットである場合に、要求されたコミットの数が設定数以上であることを条件に、要求している前記アプリケーション全てのトランザクションをコミットする、ステップを更に有する、
付記5〜7のいずれかに記載のデータベース管理方法。
(付記9)
コンピュータによって、複数のアプリケーションプログラムによってアクセスされるデータベースを管理するためのプログラムであって、
前記コンピュータに、
(a)前記データベースに格納されているレコードに対する前記アプリケーションプログラムからの要求を受け付ける、ステップと、
(b)前記要求が特定のレコードに対する排他的使用である場合に、一定条件を満たすことを条件に、排他的使用を要求している前記アプリケーションプログラムに対して、排他的使用を許可する、ステップと、
(c)使用を許可された前記アプリケーションプログラムが前記特定のレコードの更新を完了する旨を宣言した場合に、前記特定のレコードに対する排他的な使用を解除して、使用を許可した前記アプリケーションプログラム以外のアプリケーションプログラムに、前記特定のレコードの使用を許可する、ステップと、
を実行させる、プログラム。
(付記10)
前記(c)のステップにおいて、使用を許可された前記アプリケーションプログラムが、トランザクションの途中で、前記特定のレコードの更新を完了する旨を宣言した場合でも、前記特定のレコードに対する排他的な使用を解除する、
付記9に記載のプログラム
(付記11)
記コンピュータに、
(d)前記複数のアプリケーションプログラムそれぞれのトランザクションの依存関係を管理する、ステップを更に実行させ、
前記(d)のステップにおいて、前記(b)及び(c)のステップによる処理の結果に応じて、前記依存関係を更新する、
付記10に記載のプログラム
(付記12)
記コンピュータに、
(e)前記要求がトランザクションのコミットである場合に、要求されたコミットの数が設定数以上であることを条件に、要求している前記アプリケーション全てのトランザクションをコミットする、ステップを更に実行させる、
付記9〜11のいずれかに記載のプログラム
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、2016年9月20日に出願された日本出願特願2016−183492を基礎とする優先権を主張し、その開示の全てをここに取り込む。
以上のように本発明によれば、データベースシステムにおいて並列して処理を実行する複数のアプリケーションプログラムの処理性能の低下を抑制することができる。本発明は、大量のトランザクションを高速に処理するシステム、例えば、航空管制システムに代表される追跡システム、勘定系システム等に有用である。
100 アプリケーションプログラム
110 コンピュータ
111 CPU
112 メインメモリ
113 記憶装置
114 入力インターフェイス
115 表示コントローラ
116 データリーダ/ライタ
117 通信インターフェイス
118 入力機器
119 ディスプレイ装置
120 記録媒体
121 バス
200 データベース
300 データベース管理装置
301 要求受付部
302 アクセス処理制御部
303 レコード排他制御部
304 依存関係制御部
305 ストレージ処理部
306 トランザクション更新管理表
307 レコード排他管理表
308 トランザクション依存管理表
311 排他あり読み込み処理制御部
312 レコード更新処理制御部
313 更新完了処理制御部
314 コミット処理制御部
315 ロールバック処理制御部

Claims (4)

  1. 複数のアプリケーションプログラムによってアクセスされるデータベースを管理するための装置であって、
    前記データベースに格納されているレコードに対する前記アプリケーションプログラムからの要求を受け付ける、要求受付部と、
    前記要求が特定のレコードに対する排他的使用である場合であって、排他的使用を許可するための前提条件を満たす場合に、排他的使用を要求している前記アプリケーションプログラムに対して、排他的使用を許可する、アクセス処理制御部と、
    前記複数のアプリケーションプログラムそれぞれのトランザクションの依存関係を管理する、依存関係制御部と、
    を備え、
    前記アクセス処理制御部は、使用を許可された前記アプリケーションプログラムが排他的使用によるトランザクションの続行中に、前記特定のレコードの更新を完了する旨を宣言した場合に、使用を許可された前記アプリケーションプログラムと、使用を許可された前記アプリケーションプログラム以外のアプリケーションプログラムとの関係を、新規の依存関係として、前記依存関係制御部に登録させ、そして、前記特定のレコードに対する排他的な使用を解除して、使用を許可した前記アプリケーションプログラム以外のアプリケーションプログラムに、前記特定のレコードの使用を許可する、
    ことを特徴とするデータベース管理装置。
  2. 前記アクセス処理制御部が、前記要求がトランザクションのコミットである場合に、要求されたコミットの数が設定数以上であることを条件に、要求している前記アプリケーション全てのトランザクションをコミットする、
    請求項1に記載のデータベース管理装置。
  3. 複数のアプリケーションプログラムによってアクセスされるデータベースを管理するための方法であって、
    (a)前記データベースに格納されているレコードに対する前記アプリケーションプログラムからの要求を受け付ける、ステップと、
    (b)前記要求が特定のレコードに対する排他的使用である場合に、排他的使用を許可するための前提条件を満たす場合に、排他的使用を要求している前記アプリケーションプログラムに対して、排他的使用を許可する、ステップと、
    (c)前記複数のアプリケーションプログラムそれぞれのトランザクションの依存関係を管理する、ステップと、
    (d)使用を許可された前記アプリケーションプログラムが排他的使用によるトランザクションの続行中に、前記特定のレコードの更新を完了する旨を宣言した場合に、使用を許可された前記アプリケーションプログラムと、使用を許可された前記アプリケーションプログラム以外のアプリケーションプログラムとの関係を、新規の依存関係として登録し、そして、前記特定のレコードに対する排他的な使用を解除して、使用を許可した前記アプリケーションプログラム以外のアプリケーションプログラムに、前記特定のレコードの使用を許可する、ステップと、
    を有することを特徴とするデータベース管理方法。
  4. コンピュータによって、複数のアプリケーションプログラムによってアクセスされるデータベースを管理するためのプログラムであって、
    前記コンピュータに、
    (a)前記データベースに格納されているレコードに対する前記アプリケーションプログラムからの要求を受け付ける、ステップと、
    (b)前記要求が特定のレコードに対する排他的使用である場合に、排他的使用を許可するための前提条件を満たす場合に、排他的使用を要求している前記アプリケーションプログラムに対して、排他的使用を許可する、ステップと、
    (c)前記複数のアプリケーションプログラムそれぞれのトランザクションの依存関係を管理する、ステップと、
    (d)使用を許可された前記アプリケーションプログラムが排他的使用によるトランザクションの続行中に、前記特定のレコードの更新を完了する旨を宣言した場合に、使用を許可された前記アプリケーションプログラムと、使用を許可された前記アプリケーションプログラム以外のアプリケーションプログラムとの関係を、新規の依存関係として登録し、そして、前記特定のレコードに対する排他的な使用を解除して、使用を許可した前記アプリケーションプログラム以外のアプリケーションプログラムに、前記特定のレコードの使用を許可する、ステップと、
    を実行させる、プログラム。
JP2018541071A 2016-09-20 2017-09-19 データベース管理装置、データベース管理方法、及びプログラム Active JP6784296B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2016183492 2016-09-20
JP2016183492 2016-09-20
PCT/JP2017/033758 WO2018056267A1 (ja) 2016-09-20 2017-09-19 データベース管理装置、データベース管理方法、及びコンピュータ読み取り可能な記録媒体

Publications (2)

Publication Number Publication Date
JPWO2018056267A1 JPWO2018056267A1 (ja) 2019-07-04
JP6784296B2 true JP6784296B2 (ja) 2020-11-11

Family

ID=61689982

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018541071A Active JP6784296B2 (ja) 2016-09-20 2017-09-19 データベース管理装置、データベース管理方法、及びプログラム

Country Status (2)

Country Link
JP (1) JP6784296B2 (ja)
WO (1) WO2018056267A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7298145B2 (ja) 2018-12-04 2023-06-27 富士通株式会社 証券取引装置、証券取引方法及び証券取引プログラム

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4295333B2 (ja) * 2007-05-18 2009-07-15 株式会社日立製作所 データベースの制御方法及びプログラム
JP2013200601A (ja) * 2012-03-23 2013-10-03 Nec Corp データベースシステム、データベースシステムにおけるコミット方法、及びプログラム

Also Published As

Publication number Publication date
JPWO2018056267A1 (ja) 2019-07-04
WO2018056267A1 (ja) 2018-03-29

Similar Documents

Publication Publication Date Title
US7912821B2 (en) Apparatus and method for data management
US8473950B2 (en) Parallel nested transactions
JP4833590B2 (ja) 同時トランザクション(concurrenttransactions)とページ同期(pagesynchronization)
KR101203297B1 (ko) 직접 업데이트 소프트웨어 트랜잭션 메모리
US9268810B2 (en) Locking across multiple RID spaces
US8655859B2 (en) Concurrency control for extraction, transform, load processes
US8700585B2 (en) Optimistic locking method and system for committing transactions on a file system
US8627048B2 (en) Mechanism for irrevocable transactions
US20090183159A1 (en) Managing concurrent transactions using bloom filters
US8271739B2 (en) Memory control apparatus, program, and method
US10970273B2 (en) Aiding resolution of a transaction
US7689788B2 (en) System and method for executing transactions
CN109933606B (zh) 一种数据库修改方法、装置、设备及存储介质
US20230140121A1 (en) Local page writes via pre-staging buffers for resilient buffer pool extensions
US20220229691A1 (en) Persistent Multi-Word Compare-and-Swap
US9286111B2 (en) Accessing time stamps during transactions in a processor
US11113251B2 (en) Transaction manager
US11449241B2 (en) Customizable lock management for distributed resources
US7353342B1 (en) Shared lease instruction support for transient blocking synchronization
CN111209093A (zh) 一种分布式数据库系统中分布式事务的处理方法
JP6784296B2 (ja) データベース管理装置、データベース管理方法、及びプログラム
CN110377614B (zh) 一种分布式环境下的订单处理锁系统
JP5976779B2 (ja) キャッシュメモリ構造および方法
US20080082533A1 (en) Persistent locks/resources for concurrency control
US8065489B1 (en) Method and apparatus for managing concurrent access among computers to a bitmap stored on disk storage

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190315

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190315

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200407

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200604

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200707

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200903

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: 20200923

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201006

R150 Certificate of patent or registration of utility model

Ref document number: 6784296

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150