最終更新日:2026年10月7日
fe fe-technology database
まず結論
ロックの粒度とは、データベースでロックをかける範囲の大きさです。
基本情報技術者試験では、まず次の関係を押さえます。
粒度が大きい
→ ロック範囲が広い
→ 同時実行しにくい
→ 待ちが増えやすい
粒度が細かい
→ ロック範囲が狭い
→ 同時実行しやすい
→ ただしロック管理は複雑
試験中の判断軸は、「粒度↑ → 範囲↑ → 並列性↓」です。
直感的な説明
表のデータを部屋にたとえてみます。
粒度が細かいロックは、必要な場所だけを使えないようにするイメージです。
行A 行B 行C 行D
[LOCK]
行Bだけをロックしているので、ほかの行を別の処理が利用できる余地があります。
一方、粒度が大きいロックでは、表全体のような広い範囲をまとめてロックします。
┌────────────────┐
│ 表全体をLOCK │
└────────────────┘
管理するロックの数は少なくできますが、ほかのトランザクションが利用できる範囲も狭くなります。
つまり、
細かく分けるほど同時に動きやすいが、管理するものが増える
というトレードオフです。
定義・仕組み
ロックの粒度は、ロック対象となる資源の単位を表します。
代表的には、次のような単位があります。
データベース
↓
表
↓
ページ・ブロック
↓
行
上に行くほど広い範囲をまとめてロックし、下に行くほど細かな範囲をロックするイメージです。
| 観点 | 粒度が大きい | 粒度が細かい |
|---|---|---|
| ロック範囲 | 広い | 狭い |
| 並列性 | 低くなりやすい | 高くなりやすい |
| 待ち | 増えやすい | 減りやすい |
| ロック数 | 少なくなりやすい | 多くなりやすい |
| 管理負荷 | 小さくなりやすい | 大きくなりやすい |
重要なのは、粒度が大きいほどロックの個数が増えるわけではないことです。
広い範囲を一つのロックでまとめて制御できるため、一般には管理するロック数を減らせます。
共有ロック・専有ロックとは別の軸
ここは混同しやすいところです。
共有ロック / 専有ロック
→ ロックの種類
ロック粒度
→ ロックする範囲
共有ロックと専有ロックの違いは、共有ロックと専有ロックとは?ロックの両立性の見分け方で整理しています。
科目Aでどう出る?
科目Aでは、「粒度を大きくするとどうなるか」「粒度を細かくするとどうなるか」という形で問われます。
試験中は、まず問題文を次のように置き換えます。
粒度を大きくする
↓
広い範囲をまとめてロックする
その後、選択肢を判断します。
| 選択肢の表現 | 判断 |
|---|---|
| 粒度を大きくすると待ちが増えやすい | ○ |
| 粒度を大きくすると並列性が高くなる | × |
| 粒度を大きくするとロック数が増える | × |
| 粒度を細かくすると同時実行しやすい | ○ |
| 粒度を細かくすると管理負荷が小さくなる | × |
特に強い判断基準は、
粒度 ↑
→ 範囲 ↑
→ 並列性 ↓
です。
「参照できるか」は粒度だけで決めない
粒度が大きいからといって、必ず他のトランザクションが参照できなくなるわけではありません。
参照時には共有ロックが使われることがあり、
共有ロック + 共有ロック
→ 共存できる
からです。
したがって、
粒度が大きい = ほかの処理が何もできない
と判断しないようにします。
どんな場面で使う?
多くのトランザクションが同じデータベースを同時に利用するとき、ロック範囲は処理性能に影響します。
例えば、大きな表の一部だけを複数の利用者が更新するとします。
細かな単位でロックできれば、
T1 → 行Aを更新
T2 → 行Bを更新
のように、別々の場所を同時に処理しやすくなります。
一方、表全体をロックすると、
T1 → 表全体をロック
T2 → 待つ
となりやすく、並列性が低下します。
ただし、細かいロックを大量に管理すると、その管理にも負荷がかかります。
そのため、
大きい粒度
→ 管理は簡単
→ 並列性は下がりやすい
細かい粒度
→ 管理は複雑
→ 並列性は上がりやすい
というトレードオフがあります。
よくある誤解・混同
粒度が大きいほど細かく制御できる
逆です。
粒度が大きいとは、広い範囲をまとめてロックすることです。
大きい粒度 → 広い
細かい粒度 → 狭い
粒度を大きくすると同時実行しやすくなる
逆です。
広い範囲をロックするほど、ほかのトランザクションと競合しやすくなります。
粒度を大きくするとロックの個数も増える
これも逆方向です。
例えば、複数の行を個別にロックするより、表全体を一つのロックで制御した方が、管理するロック数は少なくできます。
粒度が大きければ参照も必ず禁止される
ロックの粒度と、共有・専有というロックの種類を混同しています。
共有ロック同士なら、同じ資源を複数のトランザクションが参照できます。
粒度とデッドロックは同じ話
違います。
ロック粒度
→ どの範囲をロックするか
デッドロック
→ 複数の処理が互いのロック解除を待つ状態
デッドロックについては、デッドロックとは?ロック待ち・排他制御との違いで整理しています。
トランザクション全体の考え方は、トランザクションとは?データベース処理をひとまとまりで扱う考え方もあわせて確認するとつながりやすくなります。
まとめ(試験直前用)
- ロック粒度は「どのくらい広い範囲をロックするか」
- 粒度が大きいほど、ロック範囲は広くなる
- 粒度↑ → 範囲↑ → 並列性↓
- 粒度が細かいほど同時実行しやすいが、ロック管理の負荷は増えやすい
- 粒度が大きいほどロック数は少なくなりやすい
- 共有・専有は「種類」、粒度は「範囲」と切り分ける