排他制御

同時にデータが更新されるとデータの整合性が取れなくなります。そのためデータを更新している際には他から更新の信号が来てもアクセスを禁止する処理が必要になります。この禁止する処理が排他制御と呼ばれます。

例えばA店舗とB店舗が会社全体の今月の売り上げ合計データを更新していたとします。更新前には100万円でした。A店舗では10万円売り上げが上がったので110万円として更新ボタンを押しました。B店舗では20万円売り上げが上がったので120万円として更新ボタンを押しました。データベースは一つしかなく、同時にこの信号が来た場合、どちらかのみを反映してもデータは正確になりません。またどちらかが上書きされてもデータは間違っていますよね?なのでA店舗からデータ更新が来て更新している最中はB店舗からの信号を一時的に止めるという処理が発生するのです。これを排他処理と呼びます。

共有ロック

共有ロックされたデータは
◯読み出すことができます
X書き込むことができません

専有ロック

専有ロックされたデータは
X読み出すことができません
X書き込むことができません

デッドロック

共有ロックと専有ロックが絡み合い複数のトランザクション(データベースにおける一連の処理)がお互いにロックをかけて固まることがあります。これをデッドロックと呼びます。

共有ロック同士は成立する

トランザクション1とトランザクション2があって1が先に実行されているとします。その中で共有ロックと専有ロックを掛け合った時には以下のような動きになります。

トランザクション1トランザクション2実行結果
共有ロック共有ロック◯成功
共有ロック専有ロックX失敗
専有ロック共有ロックX失敗
専有ロック専有ロックX失敗

これ問題でも出てくるので実際の問題も見てみましょう。

過去問題

前述の表に照らし合わせて考えるとアが正解だとわかります。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)