みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

共有ロックはどんなときに使うのでしょうか?

表題の通りです。データベースにおいて、共有ロックはどんなときに使うのか教えて下さい。不完全な気がして、事例が思い浮かびません。これこそ、共有ロックならではの~といった事例って、あるのでしょうか?

投稿日時 - 2015-03-16 16:32:33

QNo.8936953

暇なときに回答ください

質問者が選んだベストアンサー

>読み取り専用であれば、そもそもロックをかけない、という選択肢はないのでしょうか?

DBMSによってはそういう読み方も可能です。「ダーティーリード」といいます。
更新頻度の高いシステムの場合、ロックを全く掛けないと、一度読んでその後同じレコードをもう一度読むと値が変わっていることがあるわけですが、そういうのが許容できるならダーティーリードします。
1トランザクション内では同じレコードを何回読んでも同じ値でいて欲しいという場合は、共有ロックを掛けて、更新トランザクションを待たせます。

「レコードを読んでみてその値によっては更新するかも」という場合、ロックを掛けずに読んで、更新しようと思って、再度排他ロックを掛けて読んでみたら値が変わっていたというケース。
(ロックを掛けて読み直さないで更新するとまずいことはわかりますよね?)
最初から、排他ロックを掛けて読めばこういう困ったことは起こらないわけですが、更新しないかもしれない読み取りのために排他ロックを掛けると、トランザクション同士の待ちが発生する可能性が高くなります。ということで、最初の読み取り時に共有ロックを使うわけです。
読み取り同士で待ちが発生しないためのロックが共有ロックです。

というわけで、
>「共有」ロックというからには、なんらかのグループ単位でのロックになるのかな? と解釈しているのですが……。
これは全然違います。
読み取り同士がレコードを共有できるという意味です。排他=共有できない。

参考:
http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%86%E9%9B%A2%E3%83%AC%E3%83%99%E3%83%AB

投稿日時 - 2015-03-19 21:58:36

お礼

ご丁寧な解説、ありがとうございました。
「ダーティーリード」なる言葉をはじめて知りました。

おかげさまで、よく理解できました。

投稿日時 - 2015-03-20 14:02:25

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

どんなときにと言うと、読み取りの時に使います。読み取り同士は同時に行っても良いので。

書き込むときは、排他ロックを使うので、誰かが共有ロックを掛けていると(誰かが読んでいると)、それが解除されるまで書き込みがまたされます。

先に書き込みプロセスが動いたときは排他ロックがかかっているので、読もうとしたプロセスの共有ロックが待たされることになります。

読み取りもすべて排他ロックで行ってもデータの不整合は発生しませんが、読み取りが多いときには非効率なので、共有ロックを使うわけです。

投稿日時 - 2015-03-16 20:28:10

お礼

読み取り専用であれば、そもそもロックをかけない、という選択肢はないのでしょうか?

「共有」ロックというからには、なんらかのグループ単位でのロックになるのかな? と解釈しているのですが……。排他ロックの存在意義は理解できるのですが、共有ロックは何のためにあるのだろう? という疑問をもっています。

投稿日時 - 2015-03-19 09:21:33

ANo.1

共有ロックは、アクセスできないと不便なので、ロックしたくない場合に使います。

「編集を確定させるときに、編集前と今のテーブルの全項目の値が同じなら、他に誰も更新してない(はずだ)から確定させてしまう」というものです。(1項目でも値が異なっていたら、レコード編集を確定させていいか等の選択メッセージが出ます)

共有ロック 【 shared lock 】
データベースシステムなどでデータの整合性を保つために行われる同時アクセス制限(ロック:lock)の一つで、同時に複数の主体が実施できるもの。ある主体によって資源の共有ロックが行われると、他の主体はその資源を共有ロックすることはできるが、排他ロックすることはできなくなり、資源の読み取りはできるが変更ができない状態になる。
これに対し、同時にひとつの主体しか実施できないロックは「排他ロック」(編集開始早い者勝ちロック)(exclusive lock)または「占有ロック」と呼ばれ、他に誰も読み取り・変更ができない状態となる。

投稿日時 - 2015-03-16 17:03:31

お礼

回答ありがとうございます。
共有ロック=非排他ロックということでしょうか?

投稿日時 - 2015-03-19 09:18:05

あなたにオススメの質問