· theory  · 5 min read

データの衝突を防げ!排他制御とデッドロックの攻略法

複数の人が同時にデータを更新したらどうなる?共有ロック、占有ロックの違いと、システムを停止させる「デッドロック」の回避策を解説。

複数の人が同時にデータを更新したらどうなる?共有ロック、占有ロックの違いと、システムを停止させる「デッドロック」の回避策を解説。

「最後の一席を同時に予約してしまったら?」 「二人の担当者が、同じ顧客情報を同時に書き換えたら?」

データベースの世界では、こうした「同時アクセス」によるデータの衝突が日常的に発生しています。 正しい情報を守るために欠かせないのが、信号機のような役割を果たす排他制御です。


データの衝突:ロストアップデートの恐怖

もし排他制御がなかったら、ロストアップデート という現象が起きます。

Aさんが100円の商品を110円に、Bさんが同時に120円に書き換えようとすると、一人の更新が「無かったこと」になり、整合性が失われます。 これを防ぐのが「鍵をかける」という仕組み、すなわち ロック です。

鍵の種類:共有ロックと占有ロック

IT試験で必ず問われるのが、2種類のロックの使い分けです。

共有ロック(Shared Lock)

データを「参照(読み取り)」するときにかける鍵です。 他の人が「読み取る」のは許可しますが、「書き換える」のは禁止します。 「読むだけなら複数の人が同時に入ってもいいよ」というゆるい制限です。

占有ロック(Exclusive Lock)

データを「更新(書き込み)」するときにかける鍵です。 他の人が「読み取る」ことも「書き換える」ことも、一切禁止します。 「今、私が工事中だから誰も入らないで」という強い制限です。

最悪の相打ち:デッドロック

ロックは便利な仕組みですが、使い方を誤るとシステムが動かなくなる デッドロック が起きます。

  1. Aさんが「机A」に鍵をかけ、「椅子B」の鍵が空くのを待つ
  2. Bさんが「椅子B」に鍵をかけ、「机A」の鍵が空くのを待つ

お互いに相手の持っている鍵を待つ「永久の待ちぼうけ」状態です。 試験では「資源を確保する順番を揃える」といった回避策が問われます。

シラバスハック流:AIを「デッドロック・チェッカー」にする

コードを書くとき、デッドロックの可能性を見抜くのは大変です。 AIに「レビュアー」として参加してもらうのがおすすめ。

「この2つのプログラムが同時に動いたら、デッドロックは起きる? 資源Aと資源Bにアクセスする順番を見て、問題を指摘して。」

このように、具体的なコードの断片を投げて検証させることで、抽象的な理論が「現場の知識」として定着します。

まとめ:同時更新の「秩序」を守る

排他制御は、データの品質を守るためのルール作りです。

  • 共有ロック は「読み取りOK、書き込みNG」
  • 占有ロック は「すべてNG」
  • デッドロック は「互いに譲らない待ち状態」

この仕組みを理解すれば、複雑なデータベースの世界でも迷わずに設計やトラブル対応ができるようになります。


【次に読むべき記事】 バックアップとリカバリ:もしもデータが壊れても『時計の針』を戻す技術

Back to Blog