(57)【要約】【課題】他のトランザクションのステートメントが取得したロックを意味なくキャンセルさせることにより同時実行性能が下がるという問題を回避すること。【解決手段】データサーバ１は、自サーバで格納するデータの階層関係を管理し、トランザクションサーバ２からステートメントのロック要求を受けると、階層関係のルートノードから、ロック要求をしてきたステートメントで用いるデータを持つ下位ノードまでを１つのグループとして該グループの各ノードのロックを取得させることとする。もし、該グループにおいて既に他のトランザクションのステートメントがロックを取得している場合、ロック要求をしてきたステートメントのトランザクションに一意に付与される特定値を、グループの他のトランザクションの中の最小の特定値と比較し、最小の特定値よりも小さい場合にグループのロックを取得させる。【選択図】図１
2011248584.tif 000002
【特許請求の範囲】
【請求項１】
トランザクションを発行するトランザクションサーバと、該トランザクションで用いるデータを分散して格納する複数のデータサーバと、を有してなる分散データ管理システムであって、
前記トランザクションサーバは、
トランザクション内のステートメント毎に、該ステートメントで用いるデータに対するロック要求を前記データサーバに伝送する分散ロック状態管理装置を有し、
前記複数のデータサーバの各々は、
自サーバで格納するデータの階層関係を管理し、前記トランザクションサーバからステートメントのロック要求を受けると、階層関係のルートノードから、ロック要求をしてきたステートメントで用いるデータを持つ下位ノードまでを１つのグループとして該グループの各ノードのロックを取得させることとし、該グループにおいて既に他のトランザクションのステートメントがロックを取得している場合、ロック要求をしてきたステートメントのトランザクションに一意に付与される特定値を、グループの他のトランザクションの中の最小の特定値と比較し、最小の特定値よりも小さい場合にグループのロックを取得させるロック管理装置を有する、分散データ管理システム。
【請求項２】
トランザクションサーバにて発行されたトランザクションで用いるデータを分散して格納する複数のデータサーバのうちの１つのデータサーバであって、
自サーバで格納するデータの階層関係を管理し、前記トランザクションサーバから、トランザクション内のステートメントで用いるデータに対するロック要求を受けると、階層関係のルートノードから、ロック要求をしてきたステートメントで用いるデータを持つ下位ノードまでを１つのグループとして該グループの各ノードのロックを取得させることとし、該グループにおいて既に他のトランザクションのステートメントがロックを取得している場合、ロック要求をしてきたステートメントのトランザクションに一意に付与される特定値を、グループの他のトランザクションの中の最小の特定値と比較し、最小の特定値よりも小さい場合にグループのロックを取得させるロック管理装置を有する、データサーバ。
【請求項３】
前記ロック管理装置は、
前記トランザクションサーバから、デッドロックの可能性がないステートメントが通知されると、前記通知を受けたステートメントのロック要求の優先フラグをＴＲＵＥにし、
前記トランザクションサーバから、ステートメントのロック要求を受けると、該ステートメントにロックを取得させるグループにおいて既にロックを取得した他のトランザクションのステートメントの中にロック要求の優先フラグがＴＲＵＥのトランザクションがある場合、ロック要求をしてきたステートメントには、ロックを取得させない、請求項２に記載のデータサーバ。
【請求項４】
データを分散して格納する複数のデータサーバに対し、トランザクションを発行するトランザクションサーバであって、
トランザクション内のステートメント毎に、該ステートメントで用いるデータに対するロック要求を前記データサーバに伝送し、さらに、該ステートメントが、１つのデータサーバにのみロック要求をする場合、および、複数のデータサーバにロック要求をしたロックを全て取得した場合は、該ステートメントにデッドロックの可能性がない旨を、該ステートメントのロック要求の伝送先のデータサーバに通知する分散ロック状態管理装置を有する、トランザクションサーバ。
【請求項５】
トランザクションを発行するトランザクションサーバと、該トランザクションで用いるデータを分散して格納する複数のデータサーバと、を有してなる分散データ管理システムによる分散データ管理方法であって、
前記複数のデータサーバの各々が、自サーバで格納するデータの階層関係を管理し、前記トランザクションサーバからステートメントのロック要求を受けると、階層関係のルートノードから、ロック要求をしてきたステートメントで用いるデータを持つ下位ノードまでを１つのグループとして該グループの各ノードのロックを取得させることとし、
前記トランザクションサーバが、トランザクション内のステートメント毎に、該ステートメントで用いるデータに対するロック要求を前記データサーバに伝送するステップと、
前記トランザクションサーバからステートメントのロック要求を受けたデータサーバが、該ステートメントにロックを取得させるグループにおいて既に他のトランザクションのステートメントがロックを取得している場合、ロック要求をしてきたステートメントのトランザクションに一意に付与される特定値を、グループの他のトランザクションの中の最小の特定値と比較し、最小の特定値よりも小さい場合にグループのロックを取得させるステップと、を有する、分散データ管理方法。
【請求項６】
トランザクションサーバにて発行されたトランザクションで用いるデータを分散して格納する複数のデータサーバのうちの１つのデータサーバによる分散データ管理方法であって、
自サーバで格納するデータの階層関係を管理し、前記トランザクションサーバから、トランザクション内のステートメントで用いるデータに対するロック要求を受けると、階層関係のルートノードから、ロック要求をしてきたステートメントで用いるデータを持つ下位ノードまでを１つのグループとして該グループの各ノードのロックを取得させることとし、
前記トランザクションサーバから、ステートメントのロック要求を受けると、該グループにおいて既に他のトランザクションのステートメントがロックを取得している場合、ロック要求をしてきたステートメントのトランザクションに一意に付与される特定値を、グループの他のトランザクションの中の最小の特定値と比較し、最小の特定値よりも小さい場合にグループのロックを取得させるロック取得ステップを有する、分散データ管理方法。
【請求項７】
前記トランザクションサーバから、デッドロックの可能性がないステートメントが通知されると、前記通知を受けたステートメントのロック要求の優先フラグをＴＲＵＥにするステップをさらに有し、
前記ロック取得ステップでは、前記トランザクションサーバから、ステートメントのロック要求を受けると、該ステートメントにロックを取得させるグループにおいて既にロックを取得した他のトランザクションのステートメントの中にロック要求の優先フラグがＴＲＵＥのトランザクションがある場合、ロック要求をしてきたステートメントには、ロックを取得させない、請求項６に記載の分散データ管理方法。
【請求項８】
データを分散して格納する複数のデータサーバに対し、トランザクションを発行するトランザクションサーバによる分散データ管理方法であって、
トランザクション内のステートメント毎に、該ステートメントで用いるデータに対するロック要求を前記データサーバに伝送するステップと、
ステートメントが、１つのデータサーバにのみロック要求をする場合、および、複数のデータサーバにロック要求をしたロックを全て取得した場合は、該ステートメントにデッドロックの可能性がない旨を、該ステートメントのロック要求の伝送先のデータサーバに通知するステップと、を有する、分散データ管理方法。
【請求項９】
請求項６または７に記載の分散データ管理方法を前記データサーバに実行させるためのプログラム。
【請求項１０】
請求項８に記載の分散データ管理方法を前記トランザクションサーバに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のデータサーバにデータを分散して格納する分散データ管理システムにおいて、デッドロックを回避する技術に関する。
【背景技術】
【０００２】
複数の処理主体（プロセス、クライアント等）が同じデータを同時に更新すると、データの整合性が崩れてしまうという問題がある。この問題を解決するために、一般的にロック手法が用いられている。
【０００３】
ロック手法では、処理主体は、データを参照／更新する前に、そのデータのロックを取得し、そのデータを参照／更新した後にロックを解放する。ある処理主体がロックを取得している場合は、他の処理主体は、ロックが解放されるまでそのデータにアクセスできない。そのため、複数の処理主体が同じデータに同時にアクセスする場合でも、ロックにより、ある瞬間には１つの処理主体のみがそのデータにアクセスすることが保障される。
【０００４】
しかし、複数の処理主体が同じ複数のデータに同時にアクセスする場合、ロックの取得順序によってはデッドロックが起こり得る。例えば、処理主体１と２がともにデータＡ，Ｂにアクセスする必要があり、処理主体１がデータＡ，Ｂの順にアクセスし、処理主体２がデータＢ，Ａの順にアクセスするものとする。最初のアクセスにおいては、処理主体１はデータＡを、処理主体２はデータＢを、それぞれロック可能である。しかし、処理主体１が次にアクセスすることが必要なデータＢは処理主体２にロックされ、処理主体２が次にアクセスすることが必要なデータＡは処理主体１にロックされているため、処理主体１，２は、それぞれ他の処理主体のロックの解放を待つことになる。従って、処理主体１，２は、互いが必要なデータのロックを解放しないまま、無限にロック解放を待っている状態になる。この現象がデッドロックである。
【０００５】
１つのサーバ内では、異なるプロセス同士でロックの取得順序を一致させるという手法によりデッドロックを回避できる。
【０００６】
一方、大量のデータを格納することおよび多数のクライアントからの要求に対して高いスループットを達成することを目的とし、複数のデータサーバにデータを分散して格納する分散データ管理システムでは、上記手法を用いてもデッドロックが起こり得る。
【０００７】
分散データ管理システムのクライアントは、性能向上のために、複数のデータサーバに対し、データのロック要求を並列伝送することがある。ここで、並列伝送とは、あるデータサーバに先に伝送したロック要求に対するロック取得可否の結果を待たずに、他のデータサーバにロック要求を伝送することである。例えば、データＡはデータサーバ１に、データＢはデータサーバ２に、それぞれ存在するものとする。この場合、クライアント１と２が共にロック要求をデータサーバ１，２の順に伝送したとしても、ネットワークの伝送タイミングによっては、データサーバ１に存在するデータＡはクライアント１，２の順にロックが取得され、データサーバ２に存在するデータＢはクライアント２，１の順にロックが取得される可能性がある。そうすると、クライアント１，２のロックの取得順序は同じにならないため、デッドロックが起こり得る。
【０００８】
このような分散環境でのデットロックを回避するために様々な方式が提案されている。その中に資源グラフを用いる方式がある。この方式は、現状の資源と資源を要求しているものとの関係をグラフで表現し、グラフでサイクルを見つけることによりデットロックを検知し、関連プロセスを再実行させる方式である。この方式は、グラフを格納し計算するデータサーバの個数に応じて、ＯＲＡＣＬＥ  ＲＡＣ（非特許文献１）のようなグローバルデッドロックグラフ方式と、分散デッドロックグラフ方式と、に分けることができる。しかし、これらの方式は、データサーバ間の通信と情報の同期とが必要であるため、１つのデータサーバまたは情報同期のための通信がシステム性能のボトルネックになる。
【０００９】
分散環境でのデットロックを回避するその他の方式として、タイムスタンプ方式（非特許文献２）がある。タイムスタンプ方式は、クライアントのトランザクションに対してシステム全体でユニークなトランザクション識別子（以下、ＴｘＩＤ）を与え、ロックが競合した場合には、競合したロックの優先度を評価するロック評価を行い、例えば、ＴｘＩＤが大きいトランザクションにロックをキャンセルさせることにより、データサーバ間の通信なしにデットロックを回避できる方式である。具体的には、トランザクションが発行された時間のタイムスタンプがＴｘＩＤになる。例えば、あるデータＡに対して、ＴｘＩＤが大きいトランザクションが既にロックを取得している時に、ＴｘＩＤが小さいトランザクションが同じデータＡのロックを取得しようとすると、すでにロックを取得しているトランザクションはロックがキャンセルされてロールバックされ、ＴｘＩＤが小さいトランザクションがデータＡのロックを取得する。これにより、複数データサーバへのロック要求の到達順が変わってしまった場合も、各トランザクションのロックの取得順序は同じになり、その結果、デッドロックを回避できる。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】“ORACLE RAC”、[平成22年4月19日検索]、インターネット<URL: http://www.oracle.com/technology/products/database/clustering/index.html>
【非特許文献２】16.6.1 Deadlock Prevention, p615-617, “DATABASE System Concepts”， SilberSchats, Korth, Sudarshan, published by Mc Graw Hill，McGraw-Hill Science, ISBN-13: 978-0072958867
【非特許文献３】16.4 Multiple Granularity（多粒度ロック）, p609~612, “DATABASE System Concepts”, SilberSchats, Korth, Sudarshan, published by Mc Graw Hill，McGraw-Hill Science, ISBN-13: 978-0072958867
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかし、上述のようなタイムスタンプ方式でデットロックを回避する手法には、以下の２つの問題がある。
【００１２】
第１の問題は、トランザクションが広範囲の連続したデータをロックすると、ロック評価の回数が増える。例えば、あるトランザクションが１０００個の連続したデータを操作する場合、１０００個のデータのそれぞれについて個別にロック評価を行う必要があり、システム性能の低下につながる。広範囲のロックを管理するための技術として、多粒度ロック方式（非特許文献３）がある。多粒度ロック方式では、ロックは、他のオブジェクトを含んだオブジェクトに対して設定される。つまり、多粒度ロック方式は、「包含関係」の階層構造の性質を利用する。例えば、データベースにはファイルがあり、ファイルにはページがあり、ページにはレコードがある。これをオブジェクトの木構造と捉え、各ノード下に子ノードが包含されているとする。そして、あるノードをロックするだけで、そのノード下のノード群をまとめてロックする。多粒度ロック方式のより具体的な内容は、非特許文献３を参照すればわかるため、ここでの説明は省略する。しかし、多粒度ロック方式は、タイムスタンプを考慮しておらず、タイムスタンプをそのまま適用すると、後述のように、あるトランザクションが自分でロックを取得できないにも拘らず、自分よりもタイムスタンプが大きいトランザクションが取得済みの既存ロックをキャンセルさせてしまうことがあり、同時実行性能が下がってしまう。これが第１の問題である。
【００１３】
第２の問題は、ＴｘＩＤが大きいトランザクションがデータのロックを取得した後に、ＴｘＩＤが小さいトランザクションのロック要求が到着すると、ＴｘＩＤが大きいトランザクションは、たとえデッドロックの可能性がなくても、ロールバックされてしまうということである。
【００１４】
上記の２つの問題について、図１３および図１４を用いて説明する。
【００１５】
図１３では、４つの異なるトランザクションＴｘ０，Ｔｘ２，Ｔｘ３，Ｔｘ５が、多粒度ロック方式でデータをロックしており、それぞれ０，２，３，５のタイムスタンプを持つとする。また、データの更新および参照の両方をロックする排他ロックはＸで表し、データの更新のみをロックする参照ロックはＳで表す。また、下位ノードのいずれかに排他ロックが存在するロックはＩＸで表し、下位ノードのいずれかに参照ロックが存在するロックはＩＳで表す。また、ノードＮＬはロックなしを表す。また、ＳＩＸは、該当ノードに参照ロックが存在し、該当ノードの下位ノードのいずれかに排他ロックが存在することを表す。同時にロック取得が可能なロックの組み合わせを示すロック表は、図１３の通りであり、Ｙｅｓの場合は、同時にロック取得可能であり、ＮＯの場合は、後からロック要求が到着したロックが待つ。各ロックの右の番号はそのロックを取得しているまたはそのロックを待っているトランザクションの番号である。例えば、Ｘ０は、トランザクションＴｘ０がデータＡに対して取得している排他ロックを意味する。
【００１６】
図１３では、Ｔｘ０，Ｔｘ３，Ｔｘ５が、それぞれデータＡ，Ｄ，ＢをＸロックしている状態で、Ｔｘ２がデータＡ〜ＤをＳロックしようとしている。従って、この状態では、ルートノード（最上位ノード。ノード１）およびノード２はＴｘ０，Ｔｘ３，Ｔｘ５によりＩＸロックされ、ノード４はＴｘ０，Ｔｘ５によりＩＸロックされ、ノード５はＴｘ３によりＩＸロックされ、最終的に、データＡがＴｘ０によりＸロックされ、データＢがＴｘ５によりＸロックされ、データＤがＴｘ３によりＸロックされている。Ｔｘ２はデータＡ〜ＤをＳロックしようとしているため、上位のノード２をＳロックする必要がある。ロック表に従うと、ノード１はＩＳでロック可能だが、ノード２はＩＸとＳが競合する。一般的な多粒度ロック方式であれば、タイムスタンプを適用しないため、Ｔｘ２は、ノード２に対して先にロックを取得しているトランザクションがロックを解除するのを待つ。従って、Ｔｘ２は、Ｔｘ０，Ｔｘ３，Ｔｘ５がＸロックを解除し、結果的にノード２のＩＸ０，ＩＸ３，ＩＸ５が解除されるまで、ノード２のＳロックを取得できない。
【００１７】
次に、図１３のケースで、多粒度ロック方式にタイムスタンプを適用した場合の問題について、図１４を用いて説明する。タイムスタンプ方式では、トランザクションのロックが競合すると、トランザクションのタイムスタンプを比較し、タイムスタンプが大きいトランザクションにロックをキャンセルさせる。そのため、図１３のように、ノード２がＴｘ０，Ｔｘ３，Ｔｘ５によりＩＸロックされている状態で、Ｔｘ２がノード２のＳロックを取得する場合、Ｔｘ３，Ｔｘ５はＴｘ２よりもタイムスタンプが小さいため、ＩＸ３とＩＸ５がＳ２によりキャンセルされる。これにより、ノード２の下位のデータＢ，ＤにかかっていたＸロックもキャンセルされる。しかし、Ｔｘ２よりもタイムスタンプが小さいＴｘ０によりノード２がＩＸロックされているため、Ｔｘ２は、他のＴｘ３，Ｔｘ５が取得したＩＸ３，ＩＸ５をキャンセルさせながらも自分がロックを取得することができない。その結果、Ｔｘ３，Ｔｘ５を意味もなくロックキャンセルによりロールバックさせてしまうことになり、同時実行性能が下がり、システム性能が低下してしまう（第１の問題）。
【００１８】
また、Ｔｘ０が存在しないとしても、Ｔｘ３，Ｔｘ５が取得したデータＢ，ＤのＸロックがデッドロックの可能性のないロックだった場合も、Ｔｘ３，Ｔｘ５のロックがキャンセルされ、Ｔｘ３，Ｔｘ５がロールバックしてしまう（第２の問題）。
【００１９】
ここで、トランザクションは複数のステートメント（データ参照命令やデータ更新命令）で構成されるのが一般的であり、そのうち１つのステートメントでもロールバックされると、全体のトランザクションがロールバックされてしまう。
【００２０】
従って、トランザクション内のステートメントのうちの１つにも、上記の２つの問題に示したようなロールバックをさせないことが、システム性能向上の観点で重要である。
【００２１】
そこで、本発明の目的は、トランザクション内のステートメントに対し、上記の２つの問題のいずれかに示したロールバックをさせないことができる分散データ管理システム、データサーバ、トランザクションサーバ、分散データ管理方法、プログラムを提供することにある。
【課題を解決するための手段】
【００２２】
本発明の分散管理システムは、
トランザクションを発行するトランザクションサーバと、該トランザクションで用いるデータを分散して格納する複数のデータサーバと、を有してなる分散データ管理システムであって、
前記トランザクションサーバは、
トランザクション内のステートメント毎に、該ステートメントで用いるデータに対するロック要求を前記データサーバに伝送する分散ロック状態管理装置を有し、
前記複数のデータサーバの各々は、
自サーバで格納するデータの階層関係を管理し、前記トランザクションサーバからステートメントのロック要求を受けると、階層関係のルートノードから、ロック要求をしてきたステートメントで用いるデータを持つ下位ノードまでを１つのグループとして該グループの各ノードのロックを取得させることとし、該グループにおいて既に他のトランザクションのステートメントがロックを取得している場合、ロック要求をしてきたステートメントのトランザクションに一意に付与される特定値を、グループの他のトランザクションの中の最小の特定値と比較し、最小の特定値よりも小さい場合にグループのロックを取得させるロック管理装置を有する。
【００２３】
本発明のデータサーバは、
トランザクションサーバにて発行されたトランザクションで用いるデータを分散して格納する複数のデータサーバのうちの１つのデータサーバであって、
自サーバで格納するデータの階層関係を管理し、前記トランザクションサーバから、トランザクション内のステートメントで用いるデータに対するロック要求を受けると、階層関係のルートノードから、ロック要求をしてきたステートメントで用いるデータを持つ下位ノードまでを１つのグループとして該グループの各ノードのロックを取得させることとし、該グループにおいて既に他のトランザクションのステートメントがロックを取得している場合、ロック要求をしてきたステートメントのトランザクションに一意に付与される特定値を、グループの他のトランザクションの中の最小の特定値と比較し、最小の特定値よりも小さい場合にグループのロックを取得させるロック管理装置を有する。
【００２４】
本発明のトランザクションサーバは、
データを分散して格納する複数のデータサーバに対し、トランザクションを発行するトランザクションサーバであって、
トランザクション内のステートメント毎に、該ステートメントで用いるデータに対するロック要求を前記データサーバに伝送し、さらに、該ステートメントが、１つのデータサーバにのみロック要求をする場合、および、複数のデータサーバにロック要求をしたロックを全て取得した場合は、該ステートメントにデッドロックの可能性がない旨を、該ステートメントのロック要求の伝送先のデータサーバに通知する分散ロック状態管理装置を有する。
【００２５】
本発明の分散データ管理方法の一態様は、
トランザクションを発行するトランザクションサーバと、該トランザクションで用いるデータを分散して格納する複数のデータサーバと、を有してなる分散データ管理システムによる分散データ管理方法であって、
前記複数のデータサーバの各々が、自サーバで格納するデータの階層関係を管理し、前記トランザクションサーバからステートメントのロック要求を受けると、階層関係のルートノードから、ロック要求をしてきたステートメントで用いるデータを持つ下位ノードまでを１つのグループとして該グループの各ノードのロックを取得させることとし、
前記トランザクションサーバが、トランザクション内のステートメント毎に、該ステートメントで用いるデータに対するロック要求を前記データサーバに伝送するステップと、
前記トランザクションサーバからステートメントのロック要求を受けたデータサーバが、該ステートメントにロックを取得させるグループにおいて既に他のトランザクションのステートメントがロックを取得している場合、ロック要求をしてきたステートメントのトランザクションに一意に付与される特定値を、グループの他のトランザクションの中の最小の特定値と比較し、最小の特定値よりも小さい場合にグループのロックを取得させるステップと、を有する。
【００２６】
本発明の分散データ管理方法の他の態様は、
トランザクションサーバにて発行されたトランザクションで用いるデータを分散して格納する複数のデータサーバのうちの１つのデータサーバによる分散データ管理方法であって、
自サーバで格納するデータの階層関係を管理し、前記トランザクションサーバから、トランザクション内のステートメントで用いるデータに対するロック要求を受けると、階層関係のルートノードから、ロック要求をしてきたステートメントで用いるデータを持つ下位ノードまでを１つのグループとして該グループの各ノードのロックを取得させることとし、
前記トランザクションサーバから、ステートメントのロック要求を受けると、該グループにおいて既に他のトランザクションのステートメントがロックを取得している場合、ロック要求をしてきたステートメントのトランザクションに一意に付与される特定値を、グループの他のトランザクションの中の最小の特定値と比較し、最小の特定値よりも小さい場合にグループのロックを取得させるロック取得ステップを有する。
【００２７】
本発明の分散データ管理方法のさらに他の態様は、
データを分散して格納する複数のデータサーバに対し、トランザクションを発行するトランザクションサーバによる分散データ管理方法であって、
トランザクション内のステートメント毎に、該ステートメントで用いるデータに対するロック要求を前記データサーバに伝送するステップと、
ステートメントが、１つのデータサーバにのみロック要求をする場合、および、複数のデータサーバにロック要求をしたロックを全て取得した場合は、該ステートメントにデッドロックの可能性がない旨を、該ステートメントのロック要求の伝送先のデータサーバに通知するステップと、を有する。
【００２８】
本発明のプログラムの一態様は、
前記分散データ管理方法を前記データサーバに実行させる。
【００２９】
本発明のプログラムの他の態様は、前記分散データ管理方法を前記トランザクションサーバに実行させる。
【発明の効果】
【００３０】
本発明によれば、データサーバは、自サーバで格納するデータの階層関係を管理し、トランザクションサーバからステートメントのロック要求を受けると、階層関係のルートノードから、ロック要求をしてきたステートメントで用いるデータを持つ下位ノードまでを１つのグループとして該グループの各ノードのロックを取得させることとする。もし、該グループにおいて既に他のトランザクションのステートメントがロックを取得している場合、ロック要求をしてきたステートメントのトランザクションに一意に付与される特定値（例えば、タイムスタンプ）を、グループの他のトランザクションの中の最小の特定値と比較し、最小の特定値よりも小さい場合にグループのロックを取得させる。
【００３１】
このように、グループのトランザクションの中の最小のタイムスタンプよりも小さい場合に、ステートメントにロックを取得させるため、そのステートメントがロックを取得できないケースで、必要のないロックがキャンセルさせられることを抑止できる。
【００３２】
よって、多粒度ロック方式にタイムスタンプを適用した場合に、他のトランザクションのステートメントが取得したロックを意味なくキャンセルさせることにより同時実行性能が下がるという問題を回避できる。
【図面の簡単な説明】
【００３３】
【図１】本発明の第１の実施形態の分散データ管理システムの構成を示す図である。
【図２】本発明の第２の実施形態の分散データ管理システムの構成を示す図である。
【図３】図２に示したトランザクションサーバで管理するロック状態情報を説明する図である。
【図４】図２に示したデータサーバで管理するロック管理情報を説明する図である。
【図５】図２に示したデータサーバにおけるロック取得の全体動作を説明するフローチャートである。
【図６】図５に示したステップ５０２における個別ノードのロック取得処理を説明するフローチャートである。
【図７】図６に示したステップ６０７における他ロックのキャンセル処理を説明するとともに他ロックの解除処理を説明するフローチャートである。
【図８】図２に示したデータサーバにおけるロック要求情報の優先フラグの変更動作を説明する図である。
【図９】図２に示した分散データ管理システムにおいて、トランザクションサーバからデータサーバへのロック要求の伝送時の具体的な処理の流れを説明する図である。
【図１０】図２に示したデータサーバにおける待ちロックキュー内のロック要求同士のロック評価動作を説明するフローチャートである。
【図１１】図２に示したデータサーバにおける取得ロックキュー内のロック要求同士のロック評価動作を説明するフローチャートである。
【図１２】図２に示したデータサーバにおける待ちロックキュー内のロック要求と取得ロックキュー内のロック要求とのロック評価動作を説明するフローチャートである。
【図１３】タイムスタンプ方式でデットロックを回避する従来手法の問題を説明する図である。
【図１４】タイムスタンプ方式でデットロックを回避する従来手法の問題を説明する図である。
【発明を実施するための形態】
【００３４】
以下に、本発明を実施するための形態について図面を参照して説明する。
（１）第１の実施形態
（１−１）第１の実施形態の構成
図１に、本実施形態の分散データ管理システムの構成を示す。
【００３５】
図１に示すように、本実施形態の分散データ管理システムは、データサーバ１と、トランザクションサーバ２と、を有している。
【００３６】
データサーバ１は、記憶装置１１と、記憶装置１１のデータに識別子を付与して管理し、識別子で指定したデータを参照／更新することが可能なデータ管理機構（不図示）と、を有している。また、このデータ管理機構の一構成要素として、ロック管理装置１２が設けられている。また、データサーバ１は、ネットワークを介してトランザクションサーバ２から伝送されてきたデータを記憶装置１１に格納し、記憶装置１１から読み出したデータをトランザクションサーバ２に伝送することが可能である。本分散データ管理システムでは、データは、複数のデータサーバ１に一定の順序で排他的に分散されて格納される。
【００３７】
トランザクションサーバ２は、データサーバ１と通信可能な計算機であって、あるデータの参照／更新の順列に対して原子性、整合性、隔離性、永続性のＡＣＩＤ特性を保障するトランザクション管理機構（不図示）を有している。また、このトランザクション管理機構の一構成要素として、分散ロック状態管理装置２１が設けられている。なお、このトランザクション管理機構は、データサーバ１とトランザクションサーバ２の両方に分散して配置し、データサーバ１とトランザクションサーバ２が協調してトランザクションを管理することも可能である。
【００３８】
トランザクションサーバ２は、トランザクションで用いるデータが格納されているデータサーバ１にそのデータのロック要求を伝送し、データサーバ１は、トランザクションサーバ２からロック要求されたロックを取得する。ロックが取得されると、以降、トランザクションサーバ２は、ロックを取得したデータにアクセスすることが可能となる。
【００３９】
なお、トランザクションサーバ２は、同時に複数のデータサーバ１に接続し、各データサーバ１にデータのロック要求を伝送することが可能であり、データサーバ１は、複数のトランザクションサーバ２からのロック要求を同時に処理することが可能である。
【００４０】
また、トランザクションサーバ２は、複数のデータサーバ１にロック要求を伝送する時、あるデータサーバ１に先に伝送したロック要求に対するロック取得可否の結果を待たずに、他のデータサーバ１へロック要求を伝送する並列伝送を基本とする。
【００４１】
データサーバ１およびトランザクションサーバ２は、上記機能を備えるものならどのような機器でもよい。また、ネットワーク上の伝送方式は、データサーバ１およびトランザクションサーバ２が相互にデータを送受信可能であれば具体的な伝送方式を問わない。
【００４２】
また、トランザクションサーバ２は、上記機能を備えるものなら、分散データ管理システム内の専用サーバでも、データサーバ１を利用するクライアント（アプリケーション）でもいい。
（１−２）第１の実施形態の動作
ロック管理装置１２は、各データサーバ１に備えられ、各データサーバ１のロック管理装置１２は、タイムスタンプを用いて、次の方式で同じ動作する。
【００４３】
ロック管理装置１２は、データの階層関係を管理し、トランザクションサーバ２からトランザクション内のステートメント毎のロック要求を受け取ると、階層関係のルートノードから、そのステートメントで用いるデータを持つ下位ノードまでを１つのグループとし、そのグループの各ノードのロックを取得させる。
【００４４】
この時、ロック管理装置１２は、ステートメントがロック要求をしたグループにおいて既に他のトランザクションのステートメントがロックを取得している場合（ロックが競合した場合）、ロック要求をしてきたステートメントのトランザクションに一意に付与される特定値を、グループの他のトランザクションの中の最小の特定値と比較し、最小の特定値よりも小さい場合にグループのロックを取得させる。なお、以下では、特定値がタイムスタンプであるものとして説明するが、特定値は、任意の２つの発行された値を比較すれば必ず大小を判断可能な値であれば、必ずしもタイムスタンプである必要はない。
【００４５】
このように、グループのトランザクションの中の最小のタイムスタンプよりも小さい場合に、ステートメントにロックを取得させるため、そのステートメントがロックを取得できないケースで、必要のないロックがキャンセルさせられることを抑止できる。
【００４６】
よって、多粒度ロック方式にタイムスタンプを適用した場合に、他のトランザクションのステートメントが取得したロックを意味なくキャンセルさせることにより同時実行性能が下がるという第１の問題を回避できる。
【００４７】
また、ステートメントが、１つのデータサーバ１にのみロック要求をした場合や、複数のデータサーバ１にロック要求をしたロックを全て取得した場合は、そのステートメントがロックを取得または取得しようとしているデータ範囲ではデッドロックの可能性がないと考えることが可能である。これは、ステートメントでデータ操作処理が可能であるため、いずれロックが解放されデッドロックにならないためである。
【００４８】
そこで、分散ロック状態管理装置２１は、デッドロックの可能性がないステートメントを、ロック要求の伝送先のデータサーバ１に通知し、ロック管理装置１２は、上記の通知を受けたステートメントのロック要求の優先フラグをＴＲＵＥにする。そして、ロック管理装置１２は、グループで既にロックを取得した他のトランザクションのステートメントの中にロック要求の優先フラグがＴＲＵＥのトランザクションがある場合、ロック要求をしてきたステートメントには、タイムスタンプの値によらず、ロックを取得させない。
【００４９】
従って、デッドロックの可能性がないステートメントは、自分よりもタイムスタンプが小さいステートメントによりロックをキャンセルさせられることなくそのまま実行が可能であり、システム全体としてもデッドロックは起こらない。
【００５０】
よって、多粒度ロック方式にタイムスタンプを適用した場合に、デッドロックの可能性がないロックがキャンセルされるという第２の問題を回避できる。
【００５１】
以上の動作を、図１３の例を用いて具体的に説明する。ここでは、図１３のＴｘをステートメントと読み替えて説明を行うものとする。
【００５２】
図１３の例の場合、ロック管理装置１２は、ノード２において、Ｓ２とＩＸ０，ＩＸ３，ＩＸ５のそれぞれとのタイムスタンプ比較を行いＩＸ３，ＩＸ５をキャンセルさせて待ちロックリストに回すのではなく、タイムスタンプが最小のＩＸ０のロックが解除されるまで待った後、Ｓ２とＩＸ３，ＩＸ５とのタイムスタンプ比較を行う。これにより、Ｔｘ０がロックを解除し、ＩＸ０のロックが解除されるまでの間に、Ｔｘ３，Ｔｘ５の実行が終了すれば、Ｔｘ３，Ｔｘ５がＳ２によりキャンセルされずに済む。これにより、Ｔｘ３，Ｔｘ５に意味なくロックキャンセルをさせることにより同時実行性能が下がるという第１の問題を回避できる。
【００５３】
また、図１３の例において、Ｔｘ５にデッドロックの可能性がないとする。この場合、分散ロック状態管理装置２１は、Ｔｘ５にデッドロックの可能性がない旨をデータサーバ１に通知し、ロック管理装置１２は、Ｔｘ５のＩＸ５のロック要求の優先フラグをＴＲＵＥにする。そのため、Ｔｘ０が終了し、ノード２のＩＸ０ロックが解除され、Ｓ２とＩＸ３，ＩＸ５のそれぞれとのタイムスタンプ比較を行いＩＸ３，ＩＸ５がＳ２によりロックをキャンセルされるケースでも、ＩＸ３はキャンセルされるが、ＩＸ５はキャンセルされない。これにより、デッドロックの可能性がないＴｘ５がロックキャンセルされるという第２の問題を回避できる。
（２）第２の実施形態
（２−１）第２の実施形態の構成
（２−１−１）分散データ管理システムの全体構成
図２に、本実施形態の分散データ管理システムの構成を示す。なお、図２において、図１と同様の部分には同一の符号を付す。
【００５４】
本実施形態は、図１に示した第１の実施形態をより具体化した実施形態であり、分散データ管理システムの構成自体は、図２に示すように、位置管理サーバ３を追加した点が異なっている。
【００５５】
位置管理サーバ３は、データとデータを格納しているデータサーバ１とのマップを管理しており、トランザクションサーバ２からのデータの問い合わせに対して、そのデータが格納されているデータサーバ１を通知する。
【００５６】
なお、位置管理サーバ３は、上記機能を備えるものならどのような機器でもよい。また、ネットワーク上の伝送方式は、データサーバ１、トランザクションサーバ２、および位置管理サーバ３が相互にデータを送受信可能であれば具体的な伝送方式を問わない。
（２−１−２）トランザクションサーバ２の構成
次に、トランザクションサーバ２の構成について説明する。
【００５７】
トランザクションサーバ２の分散ロック状態管理装置２１は、トランザクションサーバ２で発行された進行中のトランザクションとそのトランザクション内のステートメントとを、分散データ管理システム全体でユニークなトランザクション識別子（以下、ＴｘＩＤ）とトランザクション内でユニークなステートメント識別子（以下、ＳｔＩＤ）とでそれぞれ管理する。ＳｔＩＤの付与の一例として、トランザクション毎のカウンターを利用する方法がある。カウンターの値はトランザクションの実行が開始された時を０とする。トランザクション内でステートメントが発行される度に、その時のカウンターの値をそのステートメントのＳｔＩＤとし、カウンターの値を１つ増加させる。ＴｘＩＤの詳細な説明は後述する。また、分散ロック状態管理装置２１は、ステートメント単位で、そのステートメントにてロックを取得すべきデータ範囲を示すロック範囲およびそのロック範囲におけるロックの取得状態等を管理する。なお、ステートメントは、データサーバ１で管理している階層木のルートノード（最上位ノード）から、そのステートメントで用いるデータを持つ下位ノードまでを１つのグループと仮定し、そのグループの各ノードのロックを取得することになる。
【００５８】
以下、分散ロック状態管理装置２１で管理するロック状態情報のデータ構造と分散ロック状態管理装置２１の機能を説明する。
【００５９】
図３に、分散ロック状態管理装置２１で管理するロック状態情報のデータ構造を示す。
【００６０】
分散ロック状態管理装置２１は、トランザクション内のステートメント単位でロック状態情報を管理する。具体的には、図３に示すように、ステートメント毎に、そのステートメントのロック範囲およびそのロック範囲におけるロックの取得状態と、そのロック範囲のデータを格納するデータサーバ１の情報と、を示すロック状態情報を管理する。図３の下にロック状態情報の実体を示す。ロック状態情報は、トランザクションのＴｘＩＤと、そのトランザクション内のステートメントのＳｔｍｔＩＤと、そのステートメントのロック範囲のデータを格納するデータサーバ１のＩＤおよび位置を示すデータサーバ情報と、そのロック範囲およびそのロック範囲におけるロックの取得状態を示すロック部分状態情報と、を含む。あるステートメントにてロックを取得すべきデータが複数のデータサーバ１に分散して格納されている場合には（例えば、ＳｔｍｔＩＤ２４）、複数のデータサーバ１毎にロック状態情報が作成される。ロック部分状態情報のロック範囲は、連続したデータ範囲を示すものであり、そのデータ範囲の開始データの範囲開始キーと終了データの範囲終了キーとにより表される。ロック範囲が１つのデータサーバ１内で複数の連続した範囲になっている場合、その範囲毎にロック部分状態情報が作成される。ロック部分状態情報の取得状態は、そのロック部分状態の範囲のロックを取得していることを示す［取得］、そのロックを待っていることを示す［待機］、または、そのロックをキャンセルしたことを示す［キャンセル］のいずれかで表される。なお、ロックの取得、待機、キャンセルなどの状態は、データサーバ１からトランザクションサーバ２に通知され、これにより、分散ロック状態管理装置２１は、ロック取得の状態を管理できるようになっている。
【００６１】
分散ロック状態管理装置２１は、トランザクション情報の追加／削除／検索が可能であり、あるトランザクション情報に対して、ステートメント毎にロック状態情報の追加／削除／更新が可能である。トランザクションサーバ２でトランザクションが発行されたら、そのトランザクションのＴｘＩＤを識別子としてトランザクション情報を追加する。トランザクション情報はステートメント毎のロック状態情報を含む。ただし、トランザクションの実行開始直後は、ステートメント毎のロック状態情報は空である。トランザクション内のステートメントが実行を開始すると、そのステートメントに付与されたＳｔｍｔＩＤとそのステートメントのロック範囲を基に、そのロック範囲のデータを格納しているデータサーバ１毎のロック状態情報を作成する。ロック状態情報のロック部分状態情報は、ユーザが定義したステートメントのロック範囲を基に構成可能である。また、データサーバ情報は、位置管理サーバ３にデータの所在を問い合わせ、その応答としてデータサーバ１のＩＤと位置の通知を受けることで構成可能である。データサーバ１の位置を知ったら、データサーバ１にロック要求を伝送する。この時、ロック部分状態情報の取得状態は［待機］である。あるステートメントのロック範囲のロックを全て取得した場合に（＝全データサーバのロック部分状態情報の取得状態が全て［取得］になった場合）、そのステートメントのロックを取得したこととする。ステートメントが取得したロックをトランザクションが解放したらロック状態情報は削除される。また、トランザクションが成功、失敗で終了したら、トランザクション情報は削除される。
（２−１−３）データサーバ１の構成
次に、データサーバ１の構成について説明する。
【００６２】
データサーバ１のロック管理装置１２は、図４に示すように、［階層木］と、［ノード構造情報］と、［ロック要求情報］と、を含むロック管理情報を持つ。
【００６３】
階層木は、自分の記憶装置１１に格納されているデータの階層関係を木構造で表したものである。上位のノードをロックできれば、そのノードの子孫ノードが持つ全データの範囲をロックしたのと同等の効果（例えば、図１３の例の場合、ノード２をＳロックした場合、下位のノード４，５が持つデータＡ〜ＤをＳロックした効果）を持つ。この階層木は、多粒度ロック方式（非特許文献３）と同じ木構造であり、木の高さ、１つのノードが持つ子ノードの数、リーフノード（最下位ノード）がロックするデータの範囲は実装に応じて異なるが、これらは本発明を制約しない。各ノードは、次に説明するノード構造情報で示されるデータ構造体を持つ。
【００６４】
ノード構造情報は、ノードＩＤと、グラフ管理情報と、取得ロックキューと、待ちロックキューと、を含む。ノードＩＤは、データサーバ内でユニークな識別子である。ノードＩＤの付与の仕方は一意性が保証できれば方法は問わない。例えば、まず、階層木を作成し、その階層木を構成するノードを一列に並べた後、最初のノードから１，２，３，・・・と順番に番号を付与してもいい。グラフ管理情報は、ノードのロック管理範囲（そのノードをロックした時にロックされる子ノードの範囲）、ノードの親ノードや子ノードへのポインタ、ノードの子ノード毎のロック管理範囲等、ノードが階層木の機能（そのノードの子孫ノードが持つデータの全範囲をロックする機能）を実行するために必要な情報を含んでいる。取得ロックキューは、ノードに対して現時点でロックを取得しているロック要求を格納するキュー、待ちロックキューは、ノードに対してロックを要求し、既にロックを取得している既存ロックと競合したため、既存ロックの解放を待っているロック要求を格納するキューである。各キューでは、ロック要求は、そのロック要求をしたトランザクションのタイムスタンプが小さい順に配置されるが、後述のＮＰ−Ｆｌａｇ（以下、優先フラグ）がＴＲＵＥであるロック要求は優先的に先頭方向に配置される。
【００６５】
ロック要求情報は、取得ロックキューおよび待ちロックキューに格納されているロック要求の情報であり、ロック種類と、トランザクション識別と、タイムスタンプと、優先フラグと、を含む。ロック種類は、ノードに対して取得しようとするロックの種類であり、多粒度ロック方式で定義されたロック種類と同じ、Ｓロック、Ｘロック、ＩＳロック、ＩＸロック、ＳＩＸロックのいずれかである。トランザクション識別は、ロックがどのトランザクションのどのステートメントにマッピングされているかを示すための情報であり、「ＴｘＩＤ」と「ＳｔｍｔＩＤ」とのペアで構成される。タイムスタンプは、トランザクションの発行時間を意味するタイムスタンプであり、分散データ管理システム内の全トランザクションサーバ２のトランザクションの順序を一意に区別できるものである。タイムスタンプ付与の一例として、分散データ管理システムの全トランザクションサーバ２に一意のＩＤを付与し、全トランザクションサーバ２の時間をＮＴＰ（Network Time Protocol）などで同期させ、トランザクションが発行される時、トランザクションを発行したトランザクションサーバ２の「発行時間」、「トランザクションサーバＩＤ」のペアをタイムスタンプとするのが一般的である。タイムスタンプはその一意性からＴｘＩＤとしても利用する。本実施形態では、便宜上ＴｘＩＤとタイムスタンプは同値であるが、必ずしも同値である必要はない。優先フラグは、ロックがロック評価によりキャンセル可能であるか否かを示すフラグである。もし、取得ロックキューに格納されているロック要求の優先フラグがＴＲＵＥであれば、そのロックは、タイムスタンプが大きくても、待ちロックキューにロック要求が格納されているロックとのロック評価によりキャンセルされない。
（２−２）第２の実施形態の動作
（２−２−１）ロック取得動作
次に、ロック取得動作について、図５を用いて説明する。
【００６６】
図５に示すように、ロック管理装置１２は、トランザクションサーバ２からトランザクション内のステートメント（ステートメントＳｔｍｔＩＤ１とする）のロック要求が伝送されてくると、まず、階層木のルートノード（最上位ノード）を開始ノードとし（ステップ５０１）、開始ノードのロックを取得する処理を行う（ステップ５０２）。ステートメントＳｔｍｔＩＤ１がロックを取得できると（ステップ５０３のｙｅｓ）、ロックを取得したノードがロックを取得すべき最後のノード（ロック要求されたデータを持つ下位ノード）でなければ（ステップ５０４のｎｏ）、次のノード（子ノードのうち、ロック要求されたデータを持つ子孫ノードを含むノード）に移り（ステップ５０５）、そのロックを取得する処理を行う。以上の処理を繰り返し、ステートメントＳｔｍｔＩＤ１が、ルートノードから、ロック要求したデータを持つ下位ノードまでのロックを全て取得すると、処理を終了する。この処理の過程において、ステートメントＳｔｍｔＩＤ１が途中のノードでロックが取得できずにロック待ちになった場合（ステップ５０３のｎｏ）や、ステートメントＳｔｍｔＩＤ１が既に取得したロックが他のトランザクションのステートメントとのロック評価によりキャンセルされてロック待ちになった場合は、ロック待ちが解除された後（ステップ５０６のｙｅｓ）、ルートノードからステートメントＳｔｍｔＩＤ１のロック取得をやり直す。なお、ロック待ちは、該当ノードにおいて、既存ロックのいずれかが解除／キャンセルされた時点で解除される。ロックの目的に従いノード別に取得するロックの種類は、多粒度ロック方式（非特許文献３）と同じである。
【００６７】
次に、図５のステップ５０２における個別ノードのロック取得処理について、図６を用いて説明する。
【００６８】
図６に示すように、ロック管理装置１２は、ステートメントＳｔｍｔＩＤ１がロックを取得していないノードであれば（ステップ６０１のｎｏ）、そのノードの待ちロックキューにロックの解放を待っているロック要求が格納されているか否かを判断する（ステップ６０２）。待ちロックキューにロック要求が格納されていれば（ステップ６０２のｙｅｓ）、ステートメントＳｔｍｔＩＤ１のロック要求を待ちロックキューに格納し（ステップ６０３）、ロック要求が待ちロックキューの先頭に位置していなければ（ステップ６０４のｎｏ）、ロック待ち状態になり、図５のステップ５０３経由でステップ５０６に移行する。待ちロックキューにロック要求が格納されていない場合（ステップ６０２のｎｏ）や、待ちロックキューの先頭に位置した場合（ステップ６０４のｙｅｓ）、取得ロックキューの先頭に位置するロック要求のロックが、ステートメントＳｔｍｔＩＤ１のロック要求のロックと競合するか否かを、図１３のロック表を利用して判断する（ステップ６０５）。競合するロックであれば（ステップ６０５のｙｅｓ）、ステートメントＳｔｍｔＩＤ１のロック要求と取得ロックキューの先頭のロック要求とでタイムスタンプを比較する（ステップ６０６）。なお、取得ロックキューの先頭のロック要求のタイムスタンプは、取得ロックキューのいずれかのロック要求の優先フラグがＴＲＵＥになっている場合を除き、最小なものとなるが、これについては後述する。ステートメントＳｔｍｔＩＤ１のロック要求のタイムスタンプが取得ロックキューの先頭のロック要求のタイムスタンプよりも小さければ（ステップ６０６のｙｅｓ）、取得ロックキューの他のロック要求を待ちロックキューに移動させ、他ロックをキャンセルさせる処理を行い（ステップ６０７）、ステートメントＳｔｍｔＩＤ１のロック要求を取得ロックキューに格納する（ステップ６０８）。一方、ステートメントＳｔｍｔＩＤ１のロック要求のタイムスタンプが取得ロックキューの先頭のロック要求のタイムスタンプよりも小さくなければ（ステップ６０６のｎｏ）、ロック待ち状態になり、図５のステップ５０３経由でステップ５０６に移行する。これは、ステートメントＳｔｍｔＩＤ１がロックを取得できないケースで、必要のないロックキャンセルを抑止するためである。また、取得ロックキューの先頭のロック要求のロックが競合しないロックであれば（ステップ６０５のｎｏ）、ステートメントＳｔｍｔＩＤ１のロック要求を取得ロックキューに格納し（ステップ６０８）、図５のステップ５０３経由でステップ５０４に移行する。
【００６９】
次に、ロックの解除／キャンセル処理について、図７を用いて説明する。なお、図６のステップ６０７における他ロックのキャンセル処理も、図７のようにして行われる。
【００７０】
ロック管理装置１２は、解除／キャンセル処理において、ロックを解除／キャンセルさせるステートメントが、解除／キャンセルが発生したノードよりも下位ノードで取得したロックも、全て解除／キャンセルさせる。また、あるノードでロックが解除／キャンセルされると、図５のステップ５０６でロック待ちしていたロック要求のロック待ちが解除される。図５によれば、ロック待ちが解除されたロック要求はルートノードからロック取得を再開するようにみえるが、図６に示すように、既にロックを取得している状態ならロック取得処理をせずに、次のノードへ処理を移すため、実際にはロックが解除されたノードに対してのみロック取得処理をする。解除とキャンセルの違いは、図７の処理を開始するきっかけがトランザクションサーバ２からの指示によるものか、ロック評価の結果によるものかで区分する。本実施形態では、解除は、ステートメントの実行が成功しロックを正常に解除することを意味し、キャンセルは、ロック評価の結果、既存ロックがキャンセルされることを意味する。キャンセルの場合は、キャンセルをトランザクションサーバ２に通知し、ステートメント再実行等、例外処理をする必要がある。例外処理の具体的手順は、既存のトランザクションの例外処理手法を用いるためここでは説明しない。
【００７１】
図７に示すように、ロック管理装置１２は、ステートメントが取得した既存ロックの解除／キャンセルが発生したノードを開始ノードとし（ステップ７０１）、そのステートメントがロックを取得しているノードの中で、最下位のノードを探す（ステップ７０２）。そして、探したノードのロックを解除／キャンセルし（ステップ７０３）、ロックを解除／キャンセルしたノードが開始ノードでなければ（ステップ７０４のｎｏ）、そのノードの親ノードを探し（ステップ７０５）、探したノードのロックを解除／キャンセルする処理を行う。以上の処理を繰り返し、開始ノードから最下位ノードまでのロックを全て解除／キャンセルすると、処理を終了する。
（２−２−２）優先フラグの変更動作
次に、ロック要求情報の優先フラグの変更動作について、図８を用いて説明する。
【００７２】
図８に示すように、トランザクションサーバ（＃２）２のステートメントが、データサーバ（＃１、＃２）１に対してしたロック要求（Ａ−Ｃ，Ｅ−Ｇ）が全て成功し、必要なロックを全て取得した場合、そのロックを取得したデータ範囲では、デッドロックの可能性がない状態になる。これは、この場合には、ステートメントでデータ操作処理が可能であるため、いずれロックが解放されデッドロックにならないためである。この場合、分散ロック状態管理装置２１は、デッドロックの可能性がないステートメントをデータサーバ（＃１、＃２）１に通知し、データサーバ（＃１、＃２）１のロック管理装置１２は、上記通知を受けたステートメントのロック要求情報の優先フラグ（ＮＰ−Ｆｌａｇ）をＴＲＵＥにする。この時、分散ロック状態管理装置２１が上記通知を行うタイミングは、ステートメントが必要なロックを全て取得したタイミングとする。
【００７３】
なお、ステートメントが１つのデータサーバ１に対してのみロック要求をする場合も、デッドロックの可能性はない。この場合も、分散ロック状態管理装置２１は、デッドロックの可能性がないステートメントをデータサーバ（＃１、＃２）１に通知し、データサーバ（＃１、＃２）１のロック管理装置１２は、上記通知を受けたステートメントのロック要求情報の優先フラグをＴＲＵＥにする。この時、分散ロック状態管理装置２１が上記通知を行うタイミングは、ステートメントのロック要求を伝送したタイミングとする。
（２−２−３）ロック要求の伝送時の具体的な流れ
次に、トランザクションサーバ２からデータサーバ１へのロック要求の伝送時の処理の具体的な流れについて、図９を用いて説明する。
【００７４】
図９においては、左から右へと時間が経過するとする。トランザクションサーバ２が発行するトランザクションＴｘＩＤ１には、ＳｔｍｔＩＤ１，ＳｔｍｔＩＤ２４の２つのステートメントが含まれている。ＳｔｍｔＩＤ１は、１つのデータサーバ（＃３）１に必要なデータが格納されているステートメント、ＳｔｍｔＩＤ２４は複数のデータサーバ（＃１，＃２）１に必要なデータが格納されているステートメントである。
【００７５】
トランザクションサーバ２は、位置管理サーバ３に問い合わせを行うことで、ＳｔｍｔＩＤ１が１つのデータサーバ（＃３）１にロック要求をする必要があることをわかる。この場合、トランザクションサーバ２は、データサーバ（＃３）１へロック要求をする時に、ＳｔｍｔＩＤ１にデッドロックの可能性がないことを通知する。この時点で、データサーバ（＃３）１は、ＳｔｍｔＩＤ１のロック要求情報の優先フラグ（ＮＰ−Ｆｌａｇ）をＴＲＵＥにした後、図５から図７にかけて説明したロック取得プロセスを実施する。ＳｔｍｔＩＤ１がロックを取得できたらデータサーバ（＃３）１はトランザクションサーバ２にロック取得完了通知を返す。
【００７６】
また、トランザクションサーバ２は、位置管理サーバ３に問い合わせを行うことで、ＳｔｍｔＩＤ２４が複数のデータサーバ（＃１，＃２）１にロック要求をする必要があることをわかる。そのため、トランザクションサーバ２は、データサーバ（＃１，＃２）１へロック要求する時に、ＳｔｍｔＩＤ２４にデッドロックの可能性があることを通知する。この時点で、データサーバ（＃１，＃２）１は、ＳｔｍｔＩＤ２４のロック要求情報の優先フラグをＦＡＬＳＥにした後、図５から図７にかけて説明したロック取得プロセスを実施する。ＳｔｍｔＩＤ２４がロックを取得できたらデータサーバ（＃１，＃２）１はトランザクションサーバ２にロック取得完了通知を返す。トランザクションサーバ２は、ＳｔｍｔＩＤ２４に必要なデータのロックを全て取得したら、必要なデータアクセスを開始する。また、ＳｔｍｔＩＤ２４がロックを取得したデータ範囲ではデッドロックの可能性がなくなるため、ＳｔｍｔＩＤ２４にデッドロックの可能性がないことを、データサーバ（＃１，＃２）１に通知する。この時点で、データサーバ（＃１，＃２）１は、ＳｔｍｔＩＤ２４のロック要求情報の優先フラグをＴＲＵＥにする。優先フラグは、データサーバ１内でのロック評価を行うためのものであり、トランザクションサーバ２の動作とは関係ないので、データサーバ１からトランザクションサーバ２への優先フラグの変更通知は行わない。優先フラグは、図５から図７にかけて説明したロック取得プロセスのロック評価に影響する。基本的に、取得ロックキューに格納されているロック要求の優先フラグがＴＲＵＥであれば、そのロックは、タイムスタンプが小さい扱いになり、待ちロックキューに格納されているロック要求情報と比べてタイムスタンプが大きい場合でもキャンセルされない。
（２−２−４）ロック評価動作
次に、優先フラグを考慮して、ロック要求情報のロック取得の優先度を評価するロック評価動作について、図１０、図１１、および図１２を用いて説明する。
【００７７】
ロック評価方式は、比較対象に応じて３つの方式に分けられる。第１の方式は、待ちロックキュー内のロック要求情報同士の比較であり、第２の方式は、取得ロックキュー内のロック要求情報同士の比較である。第３の方式は、ノードにおける異なるキュー内のロック要求情報同士の比較、つまり取得ロックキュー内のロック要求情報と待ちロックキュー内のロック要求情報との比較である。
【００７８】
図１０に示すように、待ちロックキュー内にロック要求情報Ａ，Ｂが入力されている場合（ステップ１００１）、ＡのタイムスタンプがＢのタイムスタンプよりも小さいか同じで（ステップ１００２のｙｅｓ）、ＡのトランザクションサーバＩＤがＢのトランザクションサーバＩＤよりも小さければ（ステップ１００３のｙｅｓ）、Ａの優先度が高いと判定し（ステップ１００４）、その他の場合はＢの優先度が高いと判定する（ステップ１００５）。
【００７９】
すなわち、まず、トランザクションの発行時間であるタイムスタンプを比較し、タイムスタンプが小さいロック要求情報の優先度を高くする。タイムスタンプが同じ場合は、トランザクションを発行したトランザクションサーバ２のトランザクションサーバＩＤを比較し、トランザクションサーバＩＤが小さいロック要求情報の優先度を高くする。
【００８０】
また、図１１に示すように、取得ロックキュー内にロック要求情報Ａ，Ｂが入力されている場合（ステップ１１０１）、Ａ，Ｂのいずれか一方の優先フラグがＴＲＵＥであれば、優先フラグがＴＲＵＥであるロック要求情報（デッドロック可能性がないロック）を、タイムスタンプの値と関係なく、優先度が高いと判定する（ステップ１１０２〜１１０６）。その他の場合は、図１０のステップ１００２〜１００５と同様のステップ１１０５〜１１０８により、Ａ，Ｂの優先度を判定する。これにより、タイムスタンプが大きくてもデッドロックにならないことが保証されているロックは、ロック取得の優先度が高くなり、取得済みの既存ロックをキャンセルされない。
【００８１】
また、図１２に示すように、取得ロックキュー内にロック要求情報Ａが入力され、待ちロックキュー内にロック要求情報Ｂが入力されている場合（ステップ１２０１）、Ａの優先フラグがＴＲＵＥであれば（ステップ１２０２のｙｅｓ）、Ａを、タイムスタンプの値と関係なく、優先度が高いと判定する（ステップ１２０３）。その他の場合は、図１０のステップ１００２〜１００５と同様のステップ１２０３〜１２０６により、Ａ，Ｂの優先度を判定する。
【００８２】
ただし、取得ロックキュー内のロック要求情報と待ちロックキュー内のロック要求情報との比較は、最初、それぞれのキューの先頭（最小）のロック要求情報同士で行われ、待ちロックキューの先頭のロック要求情報の優先度が高いと、以降、該当ロック要求情報と取得ロックキュー内のロック要求情報全てとの比較が開始される。そのため、取得ロックキューの先頭に位置すべきロック要求情報は、待ちロックキューの先頭に位置するロック要求情報との競合に勝つ確率が高い方がいい。
【００８３】
従って、取得ロックキューの内部のロック評価では、図１１に示すように、優先フラグがＴＲＵＥの方の優先度を高くし、両者がＴＲＵＥの場合は、タイムスタンプが小さい方の優先度を高くしている。
【００８４】
上述したように本実施形態においては、データサーバ１は、データの階層関係を木構造で表した階層木を管理し、トランザクションサーバ２からトランザクション内のステートメント毎のロック要求を受け取ると、階層木のルートノードから、そのステートメントで用いるデータを持つ下位ノードまでを１つのグループとし、そのグループの各ノードのロックを取得させる。
【００８５】
この時、データサーバ１は、ステートメントがロック要求をしたグループにおいて既に他のトランザクションのステートメントがロックを取得している場合、ロック要求をしてきたステートメントのトランザクションのタイムスタンプを、グループの他のトランザクションの中の最小のタイムスタンプと比較し、最小のタイムスタンプよりも小さい場合にグループのロックを取得させる。
【００８６】
このように、グループのトランザクションの中の最小のタイムスタンプよりも小さい場合に、ステートメントにロックを取得させるため、そのステートメントがロックを取得できないケースで、必要のないロックがキャンセルさせられることを抑止できる。
【００８７】
よって、多粒度ロック方式にタイムスタンプを適用した場合に、他のトランザクションのステートメントが取得したロックを意味なくキャンセルさせることにより同時実行性能が下がるという第１の問題を回避できる。
【００８８】
また、トランザクションサーバ２は、ステートメントが、１つのデータサーバ１にのみロック要求をした場合や、複数のデータサーバ１にロック要求をしたロックを全て取得した場合は、そのステートメントにデッドロックの可能性がない旨をデータサーバ１に通知し、データサーバ１は、上記の通知を受けたステートメントのロック要求の優先フラグをＴＲＵＥにする。そして、データサーバ１は、グループで既にロックを取得した他のトランザクションのステートメントの中にロック要求の優先フラグがＴＲＵＥのトランザクションがある場合、ロック要求をしてきたステートメントには、タイムスタンプの値によらず、ロックを取得させない。
【００８９】
従って、デッドロックの可能性がないステートメントは、自分よりもタイムスタンプが小さいステートメントによりロックをキャンセルさせられることなくそのまま実行が可能であり、システム全体としてもデッドロックは起こらない。
【００９０】
よって、多粒度ロック方式にタイムスタンプを適用した場合に、デッドロックの可能性がないロックがキャンセルされるという第２の問題を回避できる。
【００９１】
また、ロックを提供しデータの整合性を維持しつつ、データサーバ１間のデットロック回避のための調停のコストを除去し、データサーバを追加しても、処理性能が増えるだけで、データサーバ間の通信コストを抑えられるため、データサーバ１の追加による高効率な性能向上が可能である。
【００９２】
また、１つのトランザクションに対しても、必要なケースのみ処理を再実行させ、また、データベース検索など範囲のデータアクセスが多い環境でのデータサーバ１のロック管理コストを削減できる手法を提供することにより、任意のトランザクションの応答時間を短縮することが可能である。
【００９３】
その結果、分散データ管理システムのデータ整合性を維持しながら、スループットと処理速度向上に寄与できる。
【００９４】
なお、本発明のデータサーバ１およびトランザクションサーバ２にて行われる方法は、コンピュータに実行させるためのプログラムに適用してもよい。また、そのプログラムを記憶媒体に格納することも可能であり、ネットワークを介して外部に提供することも可能である。
【符号の説明】
【００９５】
１    データサーバ
１１    記憶装置
１２    ロック管理装置
２    トランザクションサーバ
２１    分散ロック状態管理装置
３    位置管理サーバ
【図１】
2011248584.tif 000003
【図２】
2011248584.tif 000004
【図３】
2011248584.tif 000005
【図４】
2011248584.tif 000006
【図５】
2011248584.tif 000007
【図６】
2011248584.tif 000008
【図７】
2011248584.tif 000009
【図８】
2011248584.tif 000010
【図９】
2011248584.tif 000011
【図１０】
2011248584.tif 000012
【図１１】
2011248584.tif 000013
【図１２】
2011248584.tif 000014
【図１３】
2011248584.tif 000015
【図１４】
2011248584.tif 000016