共有ロックとは?きょうゆうロック
共有ロックとは、データを読むために掛けるロック。同じ資源に複数のトランザクションが同時に掛けられるが、専有ロックとは両立しないため、更新しようとする側を待たせる。読取りロックとも呼ばれ、読んだ値が読んでいる間に書き換えられないことを保証する。
最終更新:2026-10-06
この語が出る過去問を解く →背景
参照どうしは互いに矛盾を起こさないので、読取りまで一列に並べると並行度が無駄に落ちる。そこでロックを「読むため」と「書くため」の2種類に分け、読み手どうしだけは共存させることにした。この使い分けが、両立表(コンパチビリティ行列)という形で同時実行制御の基本になっている。
具体例
月次の売上集計が受注明細を読んでいる間、別の集計処理も同じ行を読めるので互いに待たない。一方でその時間帯に受注確定処理が同じ行を更新しようとすると、集計が終わるまで待たされる。
試験での引っ掛け
両立表の向きを取り違えないこと。共有どうしは同時に掛けられるが、共有と専有、専有どうしは両立しない。もう一つの的は「読むだけなら安全」という思い込みで、同じ行に共有ロックを掛けた2つのトランザクションが揃って専有ロックへ昇格しようとすると、互いの解放を待ち合ってデッドロックになる(昇格デッドロック)。
関連用語
出た過去問
出典:平成29年度 春期 データベーススペシャリスト試験 午前Ⅱ 問18(IPA)
RDBMSのロックに関する記述のうち、適切なものはどれか。ここで、X, Yはトランザクションとする。
正解:XがA表内の特定行aに対して共有ロックを獲得しているときは、YはA表に対して専有ロックを獲得することができない。
要点:行ロックと表ロックは階層関係にあり範囲が重なると両立しない
行に対するロックと表に対するロックは階層関係にあり、表全体の専有ロックは表内の全行を占有することを意味する。したがって他のトランザクションが表内のいずれかの行を共有ロックしている間は、表全体の専有ロックは獲得できない。
出典:平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10(IPA)
t1〜t10の時刻でスケジュールされたトランザクションT1〜T4がある。時刻t10でT1がcommitを発行する直前の、トランザクションの待ちグラフを作成した。…
正解:T2
要点:専有ロック要求が既存の共有ロックの解放を待つ関係を辺にする
共有ロックのままなら共存できるが、専有ロックを掛けようとすると他者の共有ロックの解放を待つことになる。BへのT4の更新はT2の共有ロックを、CへのT2の更新とAへのT3の更新はいずれもT1の共有ロックを待つ。したがって待ちの向きはT4→T2、T2→T1、T3→T1となり、矢印を1本出しつつ1本受けている位置に入るのはT2である。
出典:令和3年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問14(IPA)
RDBMSのロックに関する記述のうち、適切なものはどれか。ここで、X,Yはトランザクションとする。
正解:XがA表内の特定行aに対して共有ロックを獲得しているときは、YはA表に対して専有ロックを獲得することができない。
要点:行の共有ロック中は上位粒度の表専有ロックを取れない
ロックには表単位と行単位のように粒度の違いがあり、粒度をまたいだ整合も取られる。ある行が共有ロックされている状態でその表全体に専有ロックを許すと、ロック中の行まで書き換えられてしまうので許可されない。よってイが適切である。
出典・参考
高度試験 午前I(高度午前I 相当)のシラバスの3 技術要素 > 4. トランザクション処理 > (1) 同時実行制御(排他制御)に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。