(57)【要約】【課題】複数のクライアントからの書き込みが要求される場合における応答性を向上させることができるデータベース管理装置、データベース管理方法、およびデータベース管理プログラムを提供することである。【解決手段】大単位ロックは、大単位ロックを行った実行部以外の実行部による、大単位ロックが行われた領域に含まれる第１単位の領域に対する書き込みに備えた処理を、制限付きで許容する第１モードで実行される。【選択図】図８
2018049394.tif 000002
【特許請求の範囲】
【請求項１】
複数のクライアントにそれぞれ対応して複数のデータベース管理部を起動させるように構成されるデータベース管理装置であって、
前記複数のデータベース管理部は、それぞれ、対応するクライアントから取得されるコマンドに従って、前記複数のデータベース管理部によって共有される共有ストレージに対する処理を実行する実行部を有し、
前記複数の実行部のそれぞれは、前記共有ストレージに書き込み処理を行う前に、前記共有ストレージの領域の一部を第１単位でロックする小単位ロック、または、前記共有ストレージの領域の一部または全部を前記第１単位より大きい第２単位でロックする大単位ロックを実行し、
前記大単位ロックは、前記大単位ロックを行った実行部以外の実行部による、前記大単位ロックが行われた領域に含まれる第１単位の領域に対する書き込みに備えた処理を、制限付きで許容する第１モードで実行される、
データベース管理装置。
【請求項２】
前記複数の実行部は、分散化されたハードウェア資源を用いて、互いに非同期に動作可能である、
請求項１記載のデータベース管理装置。
【請求項３】
前記複数の実行部のうち第１実行部により前記第１モードで前記大単位ロックが実行されている場合において、前記複数の実行部のうち前記第１実行部以外の第２実行部は、所定条件を満たす場合、前記第１単位での前記共有ストレージへの書き込みに備えた差分管理情報を生成してメモリに格納すると共に、前記第１モードでの大単位ロックが解放されたときに前記メモリに格納した前記差分管理情報を前記共有ストレージに反映させる、
請求項１または２記載のデータベース管理装置。
【請求項４】
前記複数の実行部のそれぞれは、前記大単位ロックを実行しているときに、前記大単位ロックの対象である前記第２単位に含まれる前記第１単位に対して前記小単位ロックを実行する場合があり、
前記所定条件は、前記第２実行部が書き込みを行おうとする第１単位に対して、前記第１実行部により小単位ロックが実行されなかったことを含む、
請求項３記載のデータベース管理装置。
【請求項５】
前記所定条件は、前記第２実行部が書き込みを行おうとする第１単位に対して、他の第２実行部により、前記小単位ロックが先に実行されていないことを更に含む、
請求項３または４記載のデータベース管理装置。
【請求項６】
前記複数の実行部により生成された差分管理情報を集約し、前記第１モードでの大単位ロックが解放されたときに、前記集約した差分管理情報を、前記複数の実行部に代わって前記共有ストレージに反映させる差分集約部を更に備え、
前記複数の実行部は、生成した前記差分管理情報を、それぞれ前記差分集約部に出力する、
請求項３から５のうちいずれか１項記載のデータベース管理装置。
【請求項７】
前記第１モードによる前記大単位ロックは、複数の実行部により、先着順に基づく優先度を伴って取得される、
請求項１から６のうちいずれか１項記載のデータベース管理装置。
【請求項８】
前記第１モードにおける前記大単位ロックは、対象とする第２単位の領域について、既に第１単位でのロックが取得されている場合、棄却される、
請求項１から７のうちいずれか１項記載のデータベース管理装置。
【請求項９】
前記大単位ロックのモードを、前記第１モードと他のモードとの間で切り替えるモード切替部を更に備える、
請求項１から８のうちいずれか１項記載のデータベース管理装置。
【請求項１０】
前記第１単位よりも大きい第３単位でコミットが実行され、
前記共有ストレージにおける第３単位のデータは、コミットが実行されるまでは更新前の状態で読み出される、
請求項１から９のうちいずれか１項記載のデータベース管理装置。
【請求項１１】
データベース管理装置が、
複数のクライアントにそれぞれ対応して複数のデータベース管理部を起動させ、
前記複数のデータベース管理部は、それぞれ、対応するクライアントから取得されるコマンドに従って、前記複数のデータベース管理部によって共有される共有ストレージに対する処理を実行する実行部を備え、
前記複数の実行部のそれぞれが、前記共有ストレージに書き込み処理を行う前に、前記共有ストレージの領域の一部を第１単位でロックする小単位ロック、または、前記共有ストレージの領域の一部または全部を前記第１単位より大きい第２単位でロックする大単位ロックを実行し、
前記大単位ロックを、前記大単位ロックを行った実行部以外の実行部による、前記大単位ロックが行われた領域に含まれる第１単位の領域に対する書き込みに備えた処理を、制限付きで許容する第１モードで実行する、
データベース管理方法。
【請求項１２】
データベース管理装置に、
複数のクライアントにそれぞれ対応して複数のデータベース管理部を起動させ、
前記複数のデータベース管理部は、それぞれ、対応するクライアントから取得されるコマンドに従って、前記複数のデータベース管理部によって共有される共有ストレージに対する処理を実行する実行部を備え、
前記複数の実行部のそれぞれが、前記共有ストレージに書き込み処理を行う前に、前記共有ストレージの領域の一部を第１単位でロックする小単位ロック、または、前記共有ストレージの領域の一部または全部を前記第１単位より大きい第２単位でロックする大単位ロックを実行させ、
前記大単位ロックを、前記大単位ロックを行った実行部以外の実行部による、前記大単位ロックが行われた領域に含まれる第１単位の領域に対する書き込みに備えた処理を、制限付きで許容する第１モードで実行させる、
データベース管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データベース管理装置、データベース管理方法、およびデータベース管理プログラムに関する。
【背景技術】
【０００２】
複数のクライアントが利用するデータベース管理装置においては、ある領域への書き込みを行う権利と読み出しを行う権利の一方または双方を専有する、ロックと称される動作が行われる場合がある。ロックの種別が複数存在する場合に、それらの組み合わせによって生じ得るデッドロックを回避する仕組みなどが開示されている。
【０００３】
また、ロックには、レコードなどの小単位で行うものと、ページやテーブル、ブロックといった大単位で行うものとが混在する場合がある。なお、必要に応じてロックの単位を切り替える手法は、ロックエスカレーションと称されている。
【０００４】
従来の技術では、大単位で行われるロックが実行されている場合、その大単位に含まれる小単位への書き込みはロック要求の段階で拒絶されるため、大単位のロックが解放されるまで、小単位への書き込みを行うために必要な処理を行うことができなかった。この結果、複数のクライアントからの書き込みが重複して要求される場合に、データベース管理装置の応答性が悪くなる場合があった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第５６２１９０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、複数のクライアントからの書き込みが要求される場合における応答性を向上させることができるデータベース管理装置、データベース管理方法、およびデータベース管理プログラムを提供することである。
【課題を解決するための手段】
【０００７】
実施形態のデータベース管理装置は、複数のクライアントにそれぞれ対応して複数のデータベース管理部を起動させるように構成される。前記複数のデータベース管理部は、それぞれ、対応するクライアントから取得されるコマンドに従って、前記複数のデータベース管理部によって共有される共有ストレージに対する処理を実行する実行部を有する。前記複数の実行部のそれぞれは、前記共有ストレージに書き込み処理を行う前に、前記共有ストレージの領域の一部を第１単位でロックする小単位ロック、または、前記共有ストレージの領域の一部または全部を前記第１単位より大きい第２単位でロックする大単位ロックを実行する。前記大単位ロックは、前記大単位ロックを行った実行部以外の実行部による、前記大単位ロックが行われた領域に含まれる第１単位の領域に対する書き込みに備えた処理を、制限付きで許容する第１モードで実行される。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態に係るデータベース管理装置１の機能構成と使用環境の一例を示す図。
【図２】データベース管理装置１による共有ストレージ１００の管理区分を示す図。
【図３】ロック表２４の内容の一例を示す図。
【図４】テーブルロックに関する３つのモードの効力を示す図。
【図５】データベース管理装置１のハードウェア構成の一例を示す図。
【図６】テーブルロックの利点について説明するための図。
【図７】共有モードまたは排他モードによってテーブルロックがなされた場面を示す図。
【図８】協調モードによってテーブルロックがなされた場面を示す図。
【図９】ロック制御部２２により実行される処理の流れの一例を示すフローチャート。
【図１０】ロック要求の結果を受けて各スレッド１０により実行される処理の流れの一例を示すフローチャート。
【図１１】第１の実施形態におけるロック表２４の推移などを示す図。
【図１２】第１の実施形態におけるロック表２４の推移などを示す図。
【図１３】第１の実施形態におけるロック表２４の推移などを示す図。
【図１４】変形例に係るデータベース管理装置１Ａの機能成と使用環境の一例を示す図。
【図１５】第２の実施形態において使用されるロック表２４Ｂの内容の一例を示す図。
【図１６】第２の実施形態におけるロック表２４の推移などを示す図。
【図１７】第３の実施形態に係るデータベース管理装置１Ｃの機能構成と使用環境の一例を示す図。
【図１８】第３の実施形態に係るデータベース管理装置１Ｃの動作を模式的に示す図。
【発明を実施するための形態】
【０００９】
以下、実施形態のデータベース管理装置、データベース管理方法、およびデータベース管理プログラムを、図面を参照して説明する。実施形態のデータベース管理装置は、一以上のプロセッサにより実現される。データベース管理装置は、複数のクライアントにそれぞれ対応した複数のスレッド（データベース管理部）を起動させ、複数のクライアントからの共有ストレージへのアクセス要求に対応可能な装置である。各スレッドは、対応するクライアントから取得されるコマンドに従って、共有ストレージに対する処理を実行する。
【００１０】
また、各スレッドは、共有ストレージへの書き込みを行う場合に、共有ストレージの領域の一部を第１単位でロックする小単位ロック、または、共有ストレージの領域の一部または全部を第１単位より大きい第２単位でロックする大単位ロックを実行する。以下の説明では、第１単位が「レコード」であるものとし、小単位ロックを「レコードロック」と称する。また、第２単位が「テーブル」であるものとし、大単位ロックを「テーブルロック」と称する。
【００１１】
また、以下の説明では、ロックを要求しているスレッドを「要求者」、いずれかのロックを要求して認められ、そのロックが実行されている状態を、ロックを「取得している」と称し、ロックを取得しているスレッドを「取得者」と称する。
【００１２】
（第１の実施形態）
［構成］
図１は、第１の実施形態に係るデータベース管理装置１の機能構成と使用環境の一例を示す図である。データベース管理装置１は、複数のクライアントＣＬ−Ａ、ＣＬ−Ｂ、…からのアクセス要求を受け付ける。以下、いずれのクライアントであるかを区別しないときは、単にクライアントＣＬと称する。クライアントＣＬは、データベース管理装置１と通信する他のコンピュータ装置であってもよいし、データベース管理装置１内の仮想的な処理主体であってもよい。前者の場合、クライアントＣＬとデータベース管理装置１とは、ＷＡＮ（Wide Area Network）やＬＡＮ（Local Area Network）、インターネット、専用回線などの通信網を介して通信する。
【００１３】
アクセス要求とは、共有ストレージ１００にデータを書き込んだり、共有ストレージ１００からデータを読み出したりする要求である。共有ストレージ１００は、ＨＤＤ（Hard Disk Drive）などのディスク装置やフラッシュメモリ、その他の記憶装置、或いは複数の記憶装置が組み合わされたハイブリッド型記憶装置である。
【００１４】
データベース管理装置１は、クライアントＣＬごとにスレッド１０−Ａ、１０−Ｂ、…を起動する。以下、スレッド１０−ＡをスレッドＡ、スレッド１０−ＢをスレッドＢ、…というように略記する場合がある。また、いずれのスレッドであるかを区別しないときは、スレッドを区別するハイフン以下の符号を省略する。スレッド１０は、コマンド解析部１２と、実行部１４とを備える。また、各スレッド１０は、自身が利用するメモリ領域をワーキングメモリ（後述）に確保している。
【００１５】
コマンド解析部１２は、対応するクライアントＣＬから受信したコマンドの内容を解析し、実行部１４に提供する。コマンドは、ＳＱＬなどの形式で記述されている。なお、コマンド解析部１２は、スレッド１０に含まれるのではなく、各スレッド１０に対して解析結果を分配するものであってもよい。
【００１６】
実行部１４は、対応するクライアントから取得され、コマンド解析部１２によって内容が解析されたコマンドに従って、共有ストレージ１００に対する処理を実行する。実行部１４は、共有ストレージ１００に書き込み処理を行う前に、レコードロックまたはテーブルロックを実行する。
【００１７】
図２は、データベース管理装置１による共有ストレージ１００の管理区分を示す図である。図示するように、書き込みの単位となるレコードの集まりがページである。ページは、コミットの対象となる単位である。コミットについては後述する。また、ページの集まりがテーブルである。
【００１８】
実行部１４によるロックの要求（以下、ロック要求）は、マスター管理部２０のロック制御部２２に出力される。ロック制御部２２は、要求者であるスレッド１０の実行部１４から入力されたロック要求に基づいてロック表２４を管理する。
【００１９】
図３は、ロック表２４の内容の一例を示す図である。ロック表２４は、例えば、テーブルと、テーブルロックのモードおよび取得者の識別情報、並びに、各テーブルに含まれるレコードと、レコードロックの取得者の識別情報が互いに対応付けられた表である。テーブルロックのモードが異なると、テーブルロックの効力が異なる。
【００２０】
本実施形態において、テーブルロックのモードは、少なくとも「協調モード」を含む。協調モードとはテーブルロックの取得者以外のスレッド１０による、当該テーブル内のレコードに対する書き込みに備えた処理を、制限付きで許容するモードである。また、協調モードにおいて、テーブルロックの取得者以外のスレッド１０による、当該テーブル内のレコードからの読み出しは許可されてよい。詳しくは、後述する。
【００２１】
また、テーブルロックのモードは、図示するように「排他モード」を含んでもよい。排他モードとは、テーブルロックの取得者以外のスレッド１０による、当該テーブル内のレコードに対する書き込みと読み出しの双方を禁止するモードである。また、テーブルロックのモードは、「共有モード」を含んでもよい。共有モードとは、テーブルロックの取得者以外のスレッド１０による、当該テーブル内のレコードに対する書き込みを禁止すると共に読み出しを許可するモードである。図４は、テーブルロックに関する３つのモードの効力を示す図である。
【００２２】
図５は、データベース管理装置１のハードウェア構成の一例を示す図である。ここでは、図１とは異なる符号を用いて説明する。データベース管理装置１は、例えば、クライアントインターフェース５０と、マルチコアプロセッサ６０と、ストレージインターフェース７０と、プログラムメモリ８０と、ワーキングメモリ９０とを備える。なお、マルチコアプロセッサを備える例はあくまで一例であり、処理主体となるプロセッサを複数備えるものであれば好適に使用することができる。
【００２３】
クライアントインターフェース５０は、例えば、ＮＩＣ（Network Interface Card）などのネットワークインターフェースを含む。
【００２４】
マルチコアプロセッサ６０は、ｎ個のプロセッサコア６２（１）〜６２（ｎ）を備える。プロセッサコア６２（１）は、プログラムメモリ８０に格納されたスレッド管理用プログラム８２を実行し、スレッドの実行状況を管理するマスターコアとして機能する。マスターコアは、ワーキングメモリ９０におけるスレッド定義ファイル９２によって、クライアントＣＬとスレッド１０との関係を管理する。また、マスターコアは、図１におけるマスター管理部２０に相当する。なお、スレッドの実行状況を管理する機能と、ロックを管理する機能は、別々のプロセッサコア６２によって実現されてもよい。
【００２５】
プロセッサコア６２（２）〜６２（ｎ）は、プログラムメモリ８０に格納されたスレッド実行用プログラム８４を実行することで、スレーブコアとして機能する。スレーブコアのそれぞれには、ワーキングメモリ９０においてスレッド毎領域（スレーブコア毎領域）９６（２）〜９６（ｎ）が割り当てられている。スレッド毎領域９６（２）〜９６（ｎ）には、それぞれ、差分管理情報９８が格納される。
【００２６】
プログラムメモリ８０は、例えば、ＲＯＭ（Read Only Memory）やＨＤＤ、フラッシュメモリなどの不揮発性メモリによって実現される。また、ワーキングメモリ９０は、例えば、ＲＡＭ（Random Access Memory）やＨＤＤ、フラッシュメモリ、レジスタなどの読み書き可能なメモリによって実現される。プログラムメモリ８０とワーキングメモリ９０の境界は明確である必要はなく、これらは、例えばフラッシュメモリにおける異なる領域を指すものであってもよい。
【００２７】
このような構成によって、データベース管理装置１は、複数のスレッド１０を、互いに非同期に独立して動作させることができる。このことの利点については後述する。
【００２８】
［動作］
以下、データベース管理装置１のロック制御を中心とした動作について説明する。まずはテーブルロックの利点について説明する。図６は、テーブルロックの利点について説明するための図である。図６の左図はレコードロックを行う場合の動作を示し、右図は、テーブルロックを行う場合の動作を示す。また、図中、上から順に、更新処理中、コミット中、コミット後と処理の段階を示している。これらの順に時間が流れるものとする。図６では、スレッド１０が、共有ストレージ１００における、あるページのレコード［００２］に変更データ１、２を書き込む場合を示している。
【００２９】
レコードロックを行う場合、まず、スレッド１０の実行部１４は、差分管理情報９８として変更データ１および２をワーキングメモリ９０に格納し、自身がコミットを行うまで待機する。そして、実行部１４は、コミットの実行と共に、差分管理情報９８として格納しておいた変更データ１および２を共有ストレージ１００に書き込む。変更データは、レコードの一部のみ変更する場合は、変更しようとするデータを既存のデータとを統合したデータである。また、変更データは、レコードの全部を変更する場合は、変更しようとするデータそのものであってよい。
【００３０】
レコードロックを行う場合において、実行部１４が直接的に共有ストレージ１００に書き込まない理由は、もし直接的に共有ストレージ１００に書き込む場合、書き込み中に、書き込み対象のレコードが含まれる同じページに対して、他のスレッドがコミットを行ってしまう可能性があるからである。この場合、（共有モードであれば）書き込み途中のデータが他のスレッド１０によって（すなわち書き込み主体と異なるクライアントＣＬによって）読み出される可能性がある。
【００３１】
この現象が起きると、特にトランザクション処理を実行する場合に不都合が生じる。トランザクション処理とは、複数の命令を含み、それら複数の命令の全てが実行し終えた状態で公開されること（処理の一貫性）が要求される処理である。例えば、銀行における処理を考えると、ユーザＡの口座から出金があり、ユーザＢの口座に入金される場合、いずれか一方のみが、共有ストレージに格納されるのは回避しなければならない。例えば、図６の例では、ユーザＡの出金に係るデータが変更データ１、ユーザＢの入金に係るデータが変更データ２に該当する。処理の一貫性が守られない場合、ユーザＡから出金があり、ユーザＢには入金されていない状態のデータが参照されてしまう可能性がある。このような不都合を避けるため、レコードロックを行う場合には、直ちに共有ストレージ１００に書き込まず、差分管理情報９８として格納しておいたデータをコミットの実行に合わせて共有ストレージ１００に書き込むという処理が行われる。
【００３２】
これに対し、テーブルロックを行う場合、ページよりも大きい単位であるテーブル単位でロックが行われるため、上記のような現象が起きる心配は無い。このため、図６の右図に示すように、変更データをそのまま共有ストレージ１００に書き込むことができる。また、テーブルロックには、ロック表２４の管理を簡易に行うことができるという利点も存在する。
【００３３】
しかしながら、テーブルロックを多用すると、複数ページに亘って他のスレッド１０による書き込みを排除するため、応答性が悪くなるという弊害が生じ得る。図７は、共有モードまたは排他モードによってテーブルロックがなされた場面を示す図である。本図では、スレッドＡによってロックが取得され、ロック中に、スレッドＢ、Ｃ、Ｄに対してそれぞれのクライアントから書き込みコマンドが送信された。この場合、スレッドＢ、Ｃ、Ｄは、スレッドＡによるロック解放を待ってから差分管理情報９８を生成し、更に、同一ページへの書き込みであれば、他のスレッドの共有ストレージ１００への書き込みが終了するのを待って書き込みを行わなければならない。
【００３４】
これに対し、協調モードのテーブルロックでは、テーブルロックの取得者以外のスレッド１０による、テーブルロック中に当該テーブル内のレコードにして差分管理情報９８を生成する処理が許容され、更に、所定条件を満たす場合に、テーブルロック中に生成した差分管理情報９８を、共有ストレージ１００に反映させることが許容される。所定条件については後述する。
【００３５】
図８は、協調モードによってテーブルロックがなされた場面を示す図である。図示するように、協調モードにおいて、テーブルロックの取得者でないスレッドＢ、Ｃ、Ｄは、テーブルロック中であっても任意のタイミングで差分管理情報を生成することができる。この結果、図７に示す場面に比して、全体的な処理時間を短くすることができ、応答性を向上させることができる。
【００３６】
協調モードにおいて、レコード単位でデータを書き込もうとするスレッド１０は、レコードロック要求をロック制御部２２に出力する。ロック制御部２２は、テーブルロックの状況と、レコードロックの状況とをロック表２４に書き込む。なお、共有モードや排他モードでテーブルロックが取得された場合、そのテーブル内のレコードに対するロック要求は、ロック制御部２２により棄却される。
【００３７】
ここで、前述した「所定条件」について説明する。以下では、所定条件が判定されるスレッド１０を、対象スレッド１０＃と称する。所定条件には、テーブルロックの取得者であるスレッド１０の実行部１４（第１実行部）により、テーブルロックの解放までに、対象スレッド１０＃の実行部１４（第２実行部）がデータを書き込もうとしているレコードに対して、レコードロックがなされなかったことが含まれる。
【００３８】
また、所定条件には、対象スレッド１０＃の実行部１４がデータを書き込もうとしているレコードに対して、対象スレッド１０＃よりも前に、他のスレッド１０によるレコードロックがなされなかったことが含まれてもよい。すなわち、テーブルロックの取得者以外のスレッド１０の間では、先着順にレコードロックを取得可能であることが、所定条件によって規定されてもよい。
【００３９】
所定条件は、例えば、ロック制御部２２により判定され、これに基づく制御が行われる。図９は、ロック制御部２２により実行される処理の流れの一例を示す図である。本フローチャートの処理は、いずれかのスレッド１０の実行部１４からのロック要求を、ロック制御部２２が受け付けたときに開始される。また、以下のフローチャートにおいて、ロックの要求が棄却され、またはロックが実行された場合、ロック制御部２２から要求者に対して結果が通知されるものとする。
【００４０】
まず、ロック制御部２２は、ロック対象がテーブルであるか、レコードであるかを判定する（ステップＳ１００）。ロック対象がテーブルである場合、ロック制御部２２は、要求者以外のスレッドによるテーブルロック、または対象テーブルに含まれるレコードのロックが取得済であるか否かを判定する（ステップＳ１０２）。
【００４１】
要求者以外のスレッドによるテーブルロック、または対象テーブルに含まれるレコードのロックが取得済である場合、ロック制御部２２は、テーブルロックの要求を棄却する（ステップＳ１０４）。このように、本実施形態では、テーブルロックの対象テーブルまたは対象テーブルに含まれるレコードに対して既にロックが取得されている場合には、テーブルロックの要求が棄却される。
【００４２】
要求者以外のスレッドによるテーブルロック、または対象テーブルに含まれるレコードのロックが取得済でない場合、ロック制御部２２は、要求者によるテーブルロックを実行する（ステップＳ１０６）。この場合、ロック制御部２２は、ロック表２４における対象テーブルの項目に、テーブルロックのモード、および取得者の識別情報を書き込む。テーブルロックのモードとして、データベース管理装置１全体について現在のモードが設定されてもよいし、テーブルロックの要求者によって要求の度にモードが指定されてもよい。
【００４３】
一方、ロック対象がレコードである場合、ロック制御部２２は、要求者が、対象レコードが含まれるテーブルに対してテーブルロックを取得済であるか否かを判定する（ステップＳ１０８）。要求者がテーブルロックを取得済である場合、ロック制御部２２は、レコードロックの対象レコードについて、要求者以外のスレッド１０によるレコードロックが取得済であるか否かを判定する（ステップＳ１１０）。
【００４４】
要求者以外のスレッド１０によるレコードロックが取得済である場合、ロック制御部２２は、元々ロック表２４に登録されていたスレッド１０に対して競合通知を発行し、ロック表２４における対象レコードの項目を、要求者の識別情報で上書きする（ステップＳ１１２）。これによって、テーブルロックの取得者であるスレッド１０が、元々レコードロックを取得していた他のスレッド１０から、レコードロックの権利を奪うことになる。要求者以外のスレッド１０によるレコードロックが取得済でない場合、ロック制御部２２は、要求者によるレコードロックを実行する（ステップＳ１１４）。なお、ステップＳ１１４に至るのは、テーブルロックの取得者により、テーブルロックの対象テーブルに含まれるレコードに対してのロック要求がなされた場合であり、取得されたテーブルロックのモードが協調モードである場合に限られる。
【００４５】
ステップＳ１０８において、要求者が、対象レコードが含まれるテーブルに対してテーブルロックを取得済でないと判定された場合、ロック制御部２２は、対象レコードの属するテーブルについてテーブルロックが取得済であるか否かを判定する（ステップＳ１１６）。対象レコードの属するテーブルについてテーブルロックが取得済である場合、ロック制御部２２は、協調モードでテーブルロックが取得されているか否かを判定する（ステップＳ１１８）。協調モードでテーブルロックが取得されていない場合、ロック制御部２２は、レコードロックの要求を棄却する（ステップＳ１２２）。
【００４６】
ステップＳ１１６において否定的な判定を得た場合、またはステップＳ１１８において肯定的な判定を得た場合、ロック制御部２２は、対象レコードについて要求者以外によりレコードロックが取得済であるか否かを判定する（ステップＳ１２０）。ロック制御部２２は、要求者以外によりレコードロックが取得済である場合、レコードロックの要求を棄却し（ステップＳ１２２）、要求者以外によりレコードロックが取得済でない場合、要求者によるレコードロックを実行する（ステップＳ１２４）。このとき、ロック制御部２２は、レコードロックを行った対象レコードの属するテーブルについてのテーブルロック状況を要求者に通知する。
【００４７】
なお、ロック制御部２２が一元的に図９に示す処理を行う態様は、あくまで一例であり、各スレッド１０がそれぞれロック表２４を参照して独自で判断を行い、結果として図９に示す処理と同等の処理を実現してもよい。
【００４８】
図１０は、各スレッド１０により実行される処理の流れの一例を示すフローチャートである。本フローチャートの処理は、例えば、スレッド１０が共有ストレージ１００への書き込みを行おうとし、ロック要求を発行したときに開始される。従って、図９に示す処理と、図１０に示す処理は、スレッド１０とロック制御部２２により並行して実行される。
【００４９】
まず、スレッド１０は、ロックの対象レコードが属するテーブル、またはロックの対象テーブルのロック状況をロック制御部２２から取得する（ステップＳ２００）。
【００５０】
次に、スレッド１０は、自身がテーブルロック中であるか否かを判定する（ステップＳ２０２）。自身がテーブルロック中である場合、スレッド１０は、書き込みデータを共有ストレージ１００に反映させ、コミットを行う（ステップＳ２０４）。
【００５１】
自身がテーブルロック中でない場合、スレッド１０は、自身がレコードロック中であるか否かを判定する（ステップＳ２０６）。自身がレコードロック中である場合、スレッド１０は、差分管理情報を生成する（ステップＳ２０８）。次に、スレッド１０は、他のスレッド１０により協調モードでテーブルロックが取得され、解放待ち状態であるか否かを判定する（ステップＳ２１０）。
【００５２】
ステップＳ２１０で否定的な判定を得た場合、スレッド１０は、生成しておいた差分管理情報を共有ストレージ１００に反映させ、コミットを行う（ステップＳ２１２）。一方、ステップＳ２１０で肯定的な判定を得た場合、スレッド１０は、テーブルロックの解放を待って（ステップＳ２１４）、生成しておいた差分管理情報を共有ストレージ１００に反映させる（ステップＳ２１２）。なお、テーブルロックが解放されるまでに、競合通知を受け取った場合（ステップＳ２１６）、スレッド１０は、差分管理情報を破棄し（ステップＳ２１８）、本フローチャートの処理を終了する。また、協調モードで解放待ちを行う時間（或いは、クロック数、サイクル数など）に上限を設け、上限に達したときにステップＳ２１８に進むようにしてもよい。
【００５３】
ステップＳ２０６で、自身がロック中でないと判定した場合、すなわち、他のスレッド１０によってテーブルロック（強調モードでないもの）またはレコードロックが取得されている場合、スレッド１０は、本フローチャートの処理を終了する。ステップＳ２１８で差分管理情報を破棄した場合、および、ステップＳ２０６で自身がロック中でないと判定した場合、スレッド１０は、クライアントＣＬにエラー応答を返し、再度、書き込みコマンドを受信するまで待機する。
【００５４】
以下、図９および図１０に示すフローチャートの処理が行われる結果として生じる場面について説明する。図１１は、レコードロックの要求者がテーブルロックの取得者ではなく、且つレコードロックの対象レコードについてロックが取得されていない場合におけるロック表２４の推移などを示す図である。
【００５５】
図示するように、まず、スレッドＡによって協調モードでテーブルロックが取得される。スレッドＡは、例えば、更にレコード［001］に対してレコードロックを取得してから書き込みを開始する。このとき、スレッドＡはテーブルロックを取得しているため、共有ストレージ１００に直接、書き込みデータを反映させる。
【００５６】
スレッドＡによりテーブルロックが取得されている間にスレッドＢによってレコード［002］に対してレコードロックが取得される。スレッドＢは、差分管理情報を生成し、テーブルロックの解放を待って差分管理情報を共有ストレージ１００に反映させる。
【００５７】
図１２は、レコードロックの要求者がテーブルロックの取得者ではなく、且つレコードロックの対象レコードについてロックが取得されている場合におけるロック表２４の推移などを示す図である。
【００５８】
この場合において、スレッドＡによりテーブルロックが取得されている間にスレッドＣによってレコード［002］に対してレコードロックが取得される。その後、スレッドＢによりレコード［002］に対してロック要求がなされるが、既にスレッドＣによりレコードロックが取得されているため、棄却される。スレッドＣは、自身がレコードロックを取得した後、差分管理情報を生成し、テーブルロックの解放を待って差分管理情報を共有ストレージ１００に反映させる。
【００５９】
図１３は、レコードロックの要求者がテーブルロックの取得者ではなく、且つレコードロックの対象レコードについてロックが取得できたが、テーブルロックの解放までの間に、テーブルロックの取得者によって対象レコードについてレコードロックが要求された場合におけるロック表２４の推移などを示す図である。
【００６０】
この場合において、スレッドＡによりテーブルロックが取得されている間にスレッドＢによってレコード［002］に対してレコードロックが取得される。スレッドＢは、差分管理情報を生成し始めるが、テーブルロックの解放までに、テーブルロックの取得者であるスレッドＡにより、同じレコード［002］に対してロック要求がなされた。この場合、スレッドＡが入れ替わりにレコード［002］の取得者となり、スレッドＢの差分管理情報は破棄される。
【００６１】
このように、第１の実施形態によれば、テーブルロックは、テーブルロックの取得者以外のスレッド１０による、テーブルロックが行われたテーブルに含まれるレコードに対する書き込みに備えた処理を、制限付きで許容する協調モードで実行される。この結果、複数のクライアントＣＬからの書き込みが要求される場合における応答性を向上させることができる。
【００６２】
第１の実施形態において、協調モードや排他モードの切替は、例えば、クライアントＣＬからの指示、或いはオペレータによる操作に基づいて切り替えられるようにすると、好適である。図１４は、変形例に係るデータベース管理装置１Ａの機能成と使用環境の一例を示す図である。図示するように、マスター管理部２０は、モード選択部２６を備える。モード選択部２６は、クライアントＣＬからの指示、或いはオペレータによる操作に基づいて、テーブルロックのモードを、少なくとも協調モードと排他モードの間で切り替える。なお、テーブルロックのモードの切り替えについて、コマンドによらず一定のモードを維持することが指示されてもよいし、コマンドごとに指示されてもよい。なお、係る構成は、後述する第２の実施形態や第３の実施形態に適用されてもよい。
【００６３】
（第２の実施形態）
以下、第２の実施形態について説明する。図１５は、第２の実施形態において使用されるロック表２４Ｂの内容の一例を示す図である。第２の実施形態において、協調モードのテーブルロックは、同じ対象テーブルに対して複数のスレッド１０が取得可能である。但し、テーブルロックには序列があり、序列の高いスレッド１０が優先的に書き込みを行うことができる。図１５では、これを第１テーブルロック、第２テーブルロック、…と表記した。第１テーブルロックの取得者は、他の全てのスレッド１０に対して、第１の実施形態におけるテーブルロックの取得者と同じ効力を有する。第２テーブルロックの取得者は、第１テーブルロックの取得者以外のスレッド１０に対して、第１の実施形態におけるテーブルロックの取得者と同じ効力を有する。第３テーブルロック以下についても同様であってよい。各テーブルロックは、先着順で取得される。また、協調モードであっても、対象テーブルに属するレコードについて既にレコードロックが取得されている場合には、いずれのテーブルロックも取得することができない。
【００６４】
すなわち、第１テーブルロックの取得者は、他の全てのスレッド１０に対して、レコードロックに関する優先度を有する。また、第２テーブルロックの取得者は、第１テーブルロックの取得者以外のスレッド１０に対して、レコードロックに関する優先度を有する。
【００６５】
図１６は、第２の実施形態におけるロック表２４の推移などを示す図である。図示するように、まず、スレッドＢによって協調モードで第１テーブルロックが取得される。スレッドＢは、例えば、更にレコード［001］に対してレコードロックを取得してから書き込みを開始する。このとき、スレッドＢはテーブルロックを取得しているため、共有ストレージ１００に直接、書き込みデータを反映させる。続いて、スレッドＡによって第２テーブルロックが取得される。
【００６６】
スレッドＢにより第１テーブルロックが、スレッドＡにより第２テーブルロックが取得されている間に、スレッドＣによってレコード［002］に対してレコードロックが取得される。スレッドＣは、差分管理情報を生成する。一方、第２テーブルロックの取得者であるスレッドＡによりレコード［001］に対してロック要求がなされるが、既に第１テーブルロックの取得者であるスレッドＢによりレコードロックが取得されているため、棄却される。
【００６７】
その後、第１テーブルロックの解放までに、第２テーブルロックの取得者であるスレッドＡにより、スレッドＣと同じレコード［002］に対してロック要求がなされた。この場合、スレッドＡが入れ替わりにレコード［002］の取得者となり、スレッドＣの差分管理情報は破棄される。スレッドＡは、差分管理情報を生成し、第１テーブルロックの解放と共に差分管理情報を共有ストレージ１００に反映させる。
【００６８】
以上説明した第２の実施形態によれば、第１の実施形態と同様の効果を奏する他、特にテーブルのサイズが大きい場合に、多層的な管理を実現することができる。
【００６９】
（第３の実施形態）
以下、第３の実施形態について説明する。図１７は、第３の実施形態に係るデータベース管理装置１Ｃの機能構成と使用環境の一例を示す図である。図示するように、データベース管理装置１Ｃは、第１の実施形態と比較すると、差分集約部３０を備える点と、それに関連する機能をスレッド１０が有する点で相違する。
【００７０】
図１８は、第３の実施形態に係るデータベース管理装置１Ｃの動作を模式的に示す図である。図示するように、第３の実施形態に係る各スレッド１０は、差分管理情報を生成すると、生成した差分管理情報を差分集約部３０にそれぞれ出力する。差分集約部３０は、各スレッド１０から入力された差分管理情報を集約し、例えば、格納するアドレス順に並べ替えた上で、テーブルロックが解放された時点で、まとめて共有ストレージ１００に書き込む。
【００７１】
これによって、各スレッド１０が独自に共有ストレージ１００に書き込む場合に比して、効率的な処理を行うことができる。仮に、図５に示したストレージインターフェース７０が一つのみ設けられる場合、各スレッド１０の間でストレージインターフェース７０を使用する順序を調停しなければならない。また、ストレージインターフェース７０を複数設けると、コストの上昇となってしまう。これに対し、第３の実施形態に示す構成によれば、差分集約部３０が、共有ストレージ１００に書き込むべきデータを一元的に管理するため、上記の調停処理などが不要となり、またアドレスの参照順を効率の良い順序に決定することも可能であるため、効率的な処理を実現することができる。
【００７２】
以上説明した第３の実施形態によれば、第１の実施形態と同様の効果を奏する他、効率的な共有ストレージ１００への書き込み処理を行うことができる。
【００７３】
上記説明した各実施形態において、第１単位が「レコード」、小単位ロックが「レコードロック」、第２単位が「テーブル」、大単位ロックが「テーブルロック」であるものとして説明したが、これに限られない。第１単位と第２単位は、第１単位よりも第２単位の方が大きい関係を有する限り、「複数のレコードをまとめたレコード群」、「ページ」、「ページ群」、「ブロック」、「ブロック群」、「データベース全体」などの単位の中から任意に選択することができる。また、小単位ロックと大単位ロックは、任意に選択された第１単位と第２単位に対応するものであってよい。
【００７４】
以上説明した少なくともひとつの実施形態によれば、テーブルロックは、テーブルロックの取得者以外のスレッド１０による、テーブルロックが行われたテーブルに含まれるレコードに対する書き込みに備えた処理を、制限付きで許容する協調モードで実行される。この結果、複数のクライアントＣＬからの書き込みが要求される場合における応答性を向上させることができる。
【００７５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００７６】
１…データベース管理装置、１０…スレッド、１２…コマンド解析部、１４…実行部、２０…マスター管理部、２２…ロック制御部、２４…ロック表、２６…モード選択部、３０…差分集約部、６０…マルチコアプロセッサ、６２…プロセッサコア、１００…共有ストレージ
【図１】
2018049394.tif 000003
【図２】
2018049394.tif 000004
【図３】
2018049394.tif 000005
【図４】
2018049394.tif 000006
【図５】
2018049394.tif 000007
【図６】
2018049394.tif 000008
【図７】
2018049394.tif 000009
【図８】
2018049394.tif 000010
【図９】
2018049394.tif 000011
【図１０】
2018049394.tif 000012
【図１１】
2018049394.tif 000013
【図１２】
2018049394.tif 000014
【図１３】
2018049394.tif 000015
【図１４】
2018049394.tif 000016
【図１５】
2018049394.tif 000017
【図１６】
2018049394.tif 000018
【図１７】
2018049394.tif 000019
【図１８】
2018049394.tif 000020