LinuCレベル4 システムアーキテクト 性能・拡張性の設計 問11
性能・拡張性の設計/性能の改善20台のアプリケーションサーバーが、リクエストごとにデータベースへの接続を新たに確立し、処理が終わると切断している。アクセスのピーク時には接続の確立と認証の処理でデータベースのCPU使用率が高まり、データベースの最大接続数にも達して接続エラーが出ている。データベースサーバーのメモリは増設できない。対策として最も適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「性能・拡張性の設計」に対応。実際の試験問題ではありません)
- Aデータベースの最大接続数を大幅に引き上げ、各アプリケーションサーバーが必要なだけ同時に新しい接続を確立できるようにする
- Bアプリケーションサーバーのエフェメラルポートの範囲を広げ、切断後の接続が残っていても新しい接続を確立できるようにする
- Cアプリケーションサーバーのファイルディスクリプタの上限を引き上げ、1台で同時に開いておける接続の数を増やせるようにする
- D各アプリケーションサーバーに上限付きのコネクションプールを設けて接続を再利用し、全台の上限の合計を最大接続数より小さくする
正解:D
解説
リクエストごとに接続の確立と切断を繰り返すと、そのたびにTCPの接続確立や認証、データベース側のプロセスやセッションの準備が発生し、大きな負荷になります。コネクションプールで確立済みの接続を使い回せばこのオーバーヘッドがなくなり、プールの上限によって同時接続数も制御できます。全台のプールの上限の合計をデータベースの最大接続数より小さく設計すれば、ピーク時も接続エラーを避けられ、上限を超えた要求はプールの空きを待つ形になります。最大接続数を増やすと接続ごとのメモリ消費が増えるため、メモリを増設できない条件では適しません。
選択肢ごとの解説
- A誤り。データベースは接続ごとにメモリなどの資源を使うため、メモリを増やせない状態で接続数だけを増やすと資源が枯渇し、確立の負荷も減りません。
- B誤り。ポートの枯渇はアプリケーションサーバー側の問題で、データベースでの接続確立の負荷や最大接続数の到達は解消しません。
- C誤り。アプリケーションサーバー側で開ける数を増やしても、データベースの最大接続数と接続確立の負荷という原因は変わりません。
- D正しい。接続を再利用して確立の負荷をなくし、全体の同時接続数をデータベースの上限内に収められます。