このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ
  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • ロック へ行く。

*目次 [#z5e5ede0]

#contents

*ロック [#na6946a9]

-ロックを使うと、[[デッドロック]]((トランザクションがお互いにロック待ちを行うことで、処理が進まなくなること。))が起こる可能性がある。
-ロックを使う場合には、デッドロックに対する処理も必要になる。

*ロックの種類 [#hbd5a95e]

-占有ロック(exclusive lock)
--DBを更新する際にかけるロックのこと。
--原則として他のユーザーはロックをかけたり、データを参照・更新することはできない。
---占有ロックがかかっているときは、どちらのロックもかけることができない。
-共有ロック(share lock)
--DBを参照する際にかけるロックのこと。
--原則として他のユーザーは'''共有ロックをかけたり'''、'''データを参照'''することができる。
---直列可能性を保証するために、共有ロックがかかっているときに共有ロックをかけるのは問題ない。一方、共有ロックがかかっているときに占有ロックはかけられないようにできている。

**ロックの許可の対応 [#l3df0a5f]

||共有ロック|占有ロック|h
|共有ロック|○|×|
|占有ロック|×|×|

*ロックの粒度 [#l431dc4f]

-ロックをかける範囲はDB管理システムによって異なる。
--こうしたロックの範囲の大きさを''ロックの粒度''という。
-行単位でロックをかける場合、ページ単位でロックをかける場合などがある。
--ページはHDDのアクセス単位で、通常表の数行分に相当する。

**ロックの粒度の違い [#ud9477ed]

-行単位のロック
--ロックをかける範囲が狭いと、複数のユーザーが同時にDBを扱うことができる。
--しかし、ロックの回数が増えるため、システムへの負荷が高くなる。
-ページ単位のロック
--ロックをかける範囲が広いと、各ユーザーがロックの解除待ちとなる時間が多くなる。
--しかし、システムへの負荷を抑えることができる。

*参考文献 [#q1055da6]

-『情報処理技術者試験 やさしく学ぶデータベース技術』