基本情報技術者試験「同時実行制御」の問題
更新競合がまれな環境で、データ取得時にはロックをかけず、更新時にバージョン番号などで他者の更新有無を検査して競合を検出する同時実行制御の方式はどれか。
ア取得時に即座に専有ロックをかけ他者の参照も更新も待たせる悲観的方式
イ全トランザクションを順番に1件ずつ直列実行し並行性を完全に排除する方式
ウ取得時はロックせず更新直前にバージョンを照合し競合時のみ処理をやり直す楽観的方式
エ更新を一切認めず読取り専用にしてそもそも競合が起きないようにする方式
正解
ウ.取得時はロックせず更新直前にバージョンを照合し競合時のみ処理をやり直す楽観的方式
楽観的同時実行制御(楽観ロック)は競合がまれと想定し、データ取得時はロックせず更新時にバージョン番号やタイムスタンプを照合する。値が変わっていれば競合と判断しやり直すため、設問の説明に一致し正しい。
?選択肢ごとの解説
ア ×取得時に専有ロックして他者を待たせるのは悲観的同時実行制御(悲観ロック)の説明であり、取得時にロックしない楽観方式とは逆である。
イ ×全トランザクションを直列実行するのは直列化(逐次実行)であり、並行性を生かす楽観ロックとは別の極端な方式である。
ウ ○楽観的同時実行制御(楽観ロック)は競合がまれと想定し、データ取得時はロックせず更新時にバージョン番号やタイムスタンプを照合する。値が変わっていれば競合と判断しやり直すため、設問の説明に一致し正しい。
エ ×更新を認めず読取り専用にするのは競合回避の極端策で、更新を許しつつ競合を検出する楽観ロックの説明ではない。
✎くわしく
同時実行制御は楽観的方式と悲観的方式に大別される。悲観ロックは競合が多い前提で先にロックして待たせ、楽観ロックは競合が少ない前提でロックせず更新時に検査する。楽観ロックはロック待ちが少なく並行性が高い反面、競合時の再試行コストが生じる。MVCCも読み取りをブロックせず版を使い分ける関連技術である。
✓本番での押さえどころ
試験のコツ
楽観=『たぶん競合しない→後で確認』、悲観=『競合しそう→先にロック』。検査のタイミングで判定する。
覚え方
楽観は『大丈夫だろうと先に進み、後で答え合わせ』、悲観は『心配だから先に席を確保』とイメージする。
よくある誤り
楽観と悲観を取り違える。『取得時にロック=悲観』『更新時に検査=楽観』とタイミングで区別する。
データベースの他の問題
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-a3-0250