過去問ドリル

LinuCレベル4 システムアーキテクト 性能・拡張性の設計 問24

性能・拡張性の設計/性能の拡張

データベースを使うWebアプリで、同じレコードへの更新が集中してロックの待ちが発生し、スループットが低下している。ロックの競合を緩和する設計として適切でないものはどれか。

当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「性能・拡張性の設計」に対応。実際の試験問題ではありません)

正解:C

解説

楽観的排他制御はロックを取らずに処理を進め、コミット時にバージョン番号や更新日時で競合を検出してリトライする方式です。競合が少ない環境では待ち時間がなく高いスループットを発揮しますが、競合が頻繁に起きる高競合環境では多数のトランザクションがリトライを繰り返し、処理が無駄になってスループットが低下します。高競合環境では悲観的ロックの方がリトライのオーバーヘッドを抑えられる場合があります。ロック保持時間の短縮やロック粒度の細分化はいずれも有効な競合緩和策です。

選択肢ごとの解説

  • A誤り(正しい記述)。楽観的排他制御は競合が少ない環境で有効で、競合が多いとリトライが増えてスループットが低下します。
  • B誤り(正しい記述)。ロック保持時間を短くすることで、他のトランザクションが待つ確率を下げてスループットを改善できます。
  • C正しい(誤っている記述)。楽観的排他制御は高競合環境でリトライが多発するとスループットが低下します。高競合には不向きな場合があります。
  • D誤り(正しい記述)。ロック粒度を細分化することで競合する範囲を狭め、同時に処理できるトランザクションを増やせます。
LinuCレベル4 システムアーキテクトの問題を演習モードで解く