データベースにおける『ロックの粒度』についてまとめてみました。
ロックは、データベースにおいて非常に重要な要素の一つであり、その粒度である『ロックの粒度』も設計や実装において非常に重要な要素になります。
また、情報系の資格として有名な基本情報技術者試験でもロックの粒度はしばしば登場する単語となっています。
データベースの『ロック』とは?
データベースでは、データの参照中や更新中などに、他からアクセスできないように制限をかけます。
この制限のことをロックと呼びます。
このロックにより、データを更新しようとしている最中に、対象のデータが削除されてしまった!というような事態を防ぐことができます。
そしてロックの粒度とは、このロックをかける対象範囲を表しています。
ロックの粒度とは?
データベースにおける、ロックをかける範囲のことです。
この範囲は大きい、小さいもしくは荒い、細かいで表されます。
例えば、データベース全体のような広い範囲にロックをかけることは粒度が荒い、
1レコードだけのような狭い範囲にロックをかけることは粒度が細かいと表現されます。
ロックの粒度が荒いと、ロックに伴う処理の負担は小さくなります。
逆に、粒度が細かいとロックに伴う処理の負担は大きくなります。
これだけ見ると粒度は荒い方が良いように見えますが、そう簡単ではありません。
更に重要なポイントとして、ロックの粒度はトランザクションに影響を与え、DBMSの処理速度にも影響を及ぼすのです。
トランザクションとの関係性
ロックの粒度は、データベースの重要な性質であるトランザクションとも関係があります。
ロックの粒度が荒いと、競合状態が起きやすくなるので、同時に実行できるトランザクション数は少なくなります。
反対に、ロック粒度が細かいと、競合が起きにくくなるので、同時に実行できるトランザクション数は多くなります。
トランザクションはデータベースの設計をするうえで切り離せない重要なものですが、とても奥深くここでは語り切れません。
トランザクションや、DBの設計について更に詳しく学びたい方は、以下の書籍をお勧めします。
DB設計のアレコレが良く纏まっている良著であり、この記事を読んで更にDBについて学びたい!と思った方にはドンピシャだと思います。
私も何回も読みましたし、もっと早くに読んでおけば良かったなと思う一冊です。
まとめ
ロックの粒度はロックをかける範囲のことで、
- ロックの粒度が荒い:ロックに伴う処理の負担は小さく、同時に実行できるトランザクション数も少ない。
- ロック粒度が細かい:ロックに伴う処理の負担は大きく、同時に実行できるトランザクション数も多い。
といった性質があります。
適切な範囲にロックをかける必要があることが分かると思います。