コンピュータサイエンスにおいて、多重粒度ロック(MGL)は、データベース管理システム(DBMS)およびリレーショナルデータベースで使用されるロック方式です。
多粒度ロックでは、他のオブジェクトを含むオブジェクトにロックが設定されます。MGL は、包含関係の階層構造を利用します。たとえば、データベースにはファイルがあり、ファイルにはページがあり、ページにはレコードがあります。これは、各ノードが子を含むオブジェクトのツリーと考えることができます。この構造に対するロック (共有ロックや排他ロックなど) は、対象のノードとそのすべての子孫をロックします。[ 1 ]
多重粒度ロックは、通常、非厳密な2相ロックと組み合わせて使用され、直列化可能性を保証します。
MGLは、厳密な2相ロックなどの他のロック方式における共有ロック( S)と排他ロック(X )に加えて、ノードを直接ロックするのではなく、ノード階層の下位で指定されたタイプのロックの存在、または追加する意図を示す意図的な「ロック」も使用します。意図的なロックには、「意図共有」(IS)、「意図排他」(IX)、および「共有かつ意図排他」(SIX)ロックが含まれます。ISロックはXロックと競合し、IXロックはSロックとXロックの両方と競合します。ヌルロック(NL)はすべてのロックと互換性があります。
S(またはX )内のノードをロックするために、MGLはトランザクションロックをIS(またはIX )でそのノードのすべての祖先に保持します。そのため、トランザクションがS(またはX )内のノードをロックすると、他のトランザクションはX(またはSとX )内のそのノードの祖先にアクセスできなくなります。このプロトコルは次の表に示されています。
ロックに使用する粒度レベルを決定するには、可能な限り細かいレベル(つまり、最下位のリーフ)をロックし、必要に応じてファイル階層の上位レベルにロックをエスカレートして、より多くのレコードまたはファイル要素をカバーする「ロックエスカレーション」と呼ばれるプロセスを実行します。MGL のロックモードは、次のマトリックスで定義されているように、互いに互換性があります。
ロックプロトコルと互換性マトリックスに従うと、あるトランザクションがノードをSモードで保持している場合、他のトランザクションはXモードでその祖先をロックすることはできません。