DBMSは、データベース管理のためのソフトウェアで、サーバ上に共有データを置き、クライアントから必要なデータを要求して利用するソフトウェアです。
複数の利用者が同時に同じデータを更新しようとすると、データの矛盾が生じてしまうので、先にデータをアクセスした利用者を優先させ、それ以降の利用者はデータにアクセスできないようにする排他制御という機能を持ちます。
「ロック」とは、ある利用者が更新したり参照したりしているデータを、他の利用者が利用できないようにすることでです。
ロックには、更新と参照の両方を許可しない排他(占有)ロックと、更新だけを許可しない共有ロックがあります。
ある処理が実行中の時、その処理が対象としているデータをロックし、他の操作(処理)のアクセスを禁止することによって、データの整合性を確保しようとする仕組みです。
目的のデータをロックして他のトランザクションが使わないようにすることをロック制御といいます。
トランザクションは、データにアクセスするときに共有ロックまたは占有ロックのどちらかをかけることになります。
2つのトランザクションが同じデータに対してロックをかけた場合、自分と相手のロックの組み合わせに応じてお互いのそのデータへのアクセスが制限されます。
先発トランザクションAと後発トランザクションBが同じデータに共有ロックと占有ロックをかけた場合の組合わせを表にすると、下のようになります。
表の中でNGとあるのは、相手のトランザクションが終了するまで待つようにするのが一般的。
基本的にロックは早い者勝ちのルールになっています。
ロック粒度とは、ロックをかける範囲(単位)のことで、ロックが保護するデータの大きさです。
2つ以上のスレッドあるいはプロセスなどの処理単位が互いの処理終了を待ち、結果としてどの処理も先に進めなくなってしまうことを「デッドロック」といいます。