同時実行制御(排他制御)

更新日:

用語解説

同時実行制御(排他制御)は、複数のトランザクションが同じデータを同時に読み書きしても、データの内容に論理的な矛盾が生じないようにするDBMSの仕組みです。代表的な方法は、データにロックをかけて、他のトランザクションのアクセスを一時的に制限することです。

■ 試験で押さえるポイント

  • 制御しないと、2つのトランザクションが同じデータを読んで別々に更新し、先の更新が消える(更新の喪失、ロストアップデート)などの矛盾が起こります。

  • ロックには、読取り用の共有ロック(共有ロックどうしは両立する)と、更新用の専有ロック(他のロックと両立しない)があります。

  • ロックをかける範囲(ロックの粒度)を大きくすると管理は簡単ですが、待ちが増えて同時に実行できる数が減ります。

  • 互いに相手のロックの解放を待ち合うと、デッドロックになります。DBMSはこれを検出して、一方をロールバックします。

時刻

トランザクションA

トランザクションB

在庫の値

1

在庫を読む(10)

10

2

在庫を読む(10)

10

3

10 − 3 = 7 を書く

7

4

10 − 5 = 5 を書く

5(Aの更新が失われる)

排他制御をすると、Aが専有ロックをかけている間はBが待たされるので、BはAの更新後の値7を読み、正しく2になります。

■ 選択肢での判断ポイント

「複数のトランザクションが同時に更新するときに論理的な矛盾を防ぐ」技法は排他制御です。正規化は表の設計で冗長性をなくすこと、整合性制約は主キー・参照制約などでデータの正しさを保つこと、再編成は格納領域の断片化を解消することです。

音声で聞く

同じ分野の用語