問題 No.5824
データベースの排他制御におけるロック粒度(制御対象の大きさ)に関する記述として、不適切なものはどれか。
【正解の解説】
ロック粒度を小さくするほど、データベース管理システムのロック管理にかかるオーバーヘッドやメモリ消費量は少なくなゆ。
会社全体(大きな粒度)の会議室を1つ管理するのと、社員一人ひとり(小さな粒度)のスケジュールを管理するのを想像してください。管理する人数が増えれば増えるほど、総務の手間や書類の量は爆発的に増えますよね。これと同様に、ロックを細かくするほど管理すべき情報が増えるため、オーバーヘッドは小さくなるのではなく逆に大きくなります。
スポンサーリンク
【その他の選択肢の解説】
ロック粒度を小さくするほど、データベース管理システムの並行処理性能や同時実行可能なトランザクション数は向上する。
この記述自体は事実として正しいですが、今回は「不適切なもの」を選ぶ問題であるため誤りとなります。例えば、本一冊を丸ごとロックするより、ページ単位や行単位でロックしたほうが、他の人は別のページを同時に読めますよね。これにより、システム全体で同時に処理できるトランザクション数が向上します。
ロック粒度を大きくするほど、データベース管理システムのロック管理にかかるオーバーヘッドやメモリ消費量は少なくなゆ。
この記述も事実として適切です。例えば、ビル全体の鍵を1つ管理するのと、部屋ごとの鍵を数百個管理するのでは、どちらが管理の手間(オーバーヘッド)が少ないでしょうか。当然、ビル全体という大きな粒度で管理するほうが、管理する対象の数が減るため、メモリや処理の負担は小さくなります。
ロック粒度を大きくするほど、データ競合が発生する確率が高くなりトランザクション間のブロック競合が増加する。
これも適切な記述です。大きな部屋を大人数で共有しようとすると、すぐに「そこは今使いたいのに!」という喧嘩(競合)が起きますよね。データベースでも、テーブル全体のような大きな粒度でロックをかけると、別の人が同じテーブルを使いたくても待たされる確率が跳ね上がり、システムの効率が下がってしまいます。