RDBまわりの備忘録

コネクションプーリング

  • DBへの接続処理はオーバーヘッドの大きな処理なため、接続/切断処理を高頻度で繰り返すとCPUなどのリソースが過度に消費される問題がある
  • コネクションプーリングは複数のDB接続を事前に行い、その接続結果(コネクション)を貯めておき(プール)、必要なときにプールからコネクションを取得してDBへの操作を行う
  • プールからコネクションを取得する時点で接続処理が完了しているので処理速度が向上する

プリペアードステートメントキャッシュ

JavaEE環境では、SQL文は以下の順序で実行される。

  1. Connectionオブジェクトをコネクションプールから取得
  2. Connection#prepareStatement() を実行
  3. バインド変数を設定
  4. SQL文を実行 (PreparedStatement#executeQuery()など)
  5. PreparedStatement#close() を実行
  6. Connectionオブジェクトをコネクションプールに返却

パフォーマンス向上の技法

  • 2の段階でprepareとよばれるSQL文の事前解析がRDBMS側で行われ、4で実際にSQL文を実行する
  • アプリケーションは1〜6の同じ処理を何度も実行する
  • プリペアードステートメントキャッシュは、1回目のprepareの結果(PreparedStatementオブジェクト)をアプリケーション側でキャッシュしておいて、2回目以降はRDBMSにアクセスしないことにより処理速度を向上させる

Hibernate APIJPA