LinuCレベル4 システムアーキテクト 性能・拡張性の設計 問24
性能・拡張性の設計/性能の拡張データベースを使うWebアプリで、同じレコードへの更新が集中してロックの待ちが発生し、スループットが低下している。ロックの競合を緩和する設計として適切でないものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「性能・拡張性の設計」に対応。実際の試験問題ではありません)
- A楽観的排他制御(バージョン番号や更新日時による競合検出)は、競合が少ない処理でロック獲得のオーバーヘッドなしに高いスループットを実現できるが、競合が多いと再試行が増えてスループットが低下することがある
- Bトランザクションを短く保ちロックを保持する時間を最小化することで、他のトランザクションが同じリソースを待つ確率を下げられる
- C楽観的排他制御は競合が頻繁に発生する高競合環境でこそ本来の効果を発揮し、競合して再試行が多く発生してもスループットは向上する
- D排他が必要な範囲を行全体ではなくより細かいキー範囲や列に絞ることで、同時に処理できるトランザクション数を増やせる可能性がある
正解:C
解説
楽観的排他制御はロックを取らずに処理を進め、コミット時にバージョン番号や更新日時で競合を検出してリトライする方式です。競合が少ない環境では待ち時間がなく高いスループットを発揮しますが、競合が頻繁に起きる高競合環境では多数のトランザクションがリトライを繰り返し、処理が無駄になってスループットが低下します。高競合環境では悲観的ロックの方がリトライのオーバーヘッドを抑えられる場合があります。ロック保持時間の短縮やロック粒度の細分化はいずれも有効な競合緩和策です。
選択肢ごとの解説
- A誤り(正しい記述)。楽観的排他制御は競合が少ない環境で有効で、競合が多いとリトライが増えてスループットが低下します。
- B誤り(正しい記述)。ロック保持時間を短くすることで、他のトランザクションが待つ確率を下げてスループットを改善できます。
- C正しい(誤っている記述)。楽観的排他制御は高競合環境でリトライが多発するとスループットが低下します。高競合には不向きな場合があります。
- D誤り(正しい記述)。ロック粒度を細分化することで競合する範囲を狭め、同時に処理できるトランザクションを増やせます。