connection
DB接続の永続化
DBにアクセスする際、毎回以下のような流れが発生する
DBとのコネクションを新規作成
e.g.
DB層のhandshake
DB層の認証
DBの接続用prosess/thread生成
etc.
この部分の処理が非常に重い
TLSのhandshakeだけでも100msぐらいかかる
クエリを送信
結果を受信
接続を終了
接続を維持し続ける
アプリケーション起動時に、10個くらいのDB接続を作っておく(プール)
各HTTPリクエストやバッチ処理がDBにアクセスするとき、その中から空いている接続を借りて使う
終わったら切断せずに、接続を元のプールに戻す
プール内の接続は アプリケーションが落ちるまでずっとDBとつながった状態である
つまり、TCPソケットもTLSも切断されていない状態で、再利用され続ける
2種類ある?
WebApp Serverのreq処理中だけ、DBとの接続を永続化
reqのたびに新しく作るということ?
これのことを永続化って言えるのか
1回のreqの中で、複数個のSQLを打つ場合ってことか
流れ
WebApp Serverがリクエスト処理を開始
最初のDB接続後にDBオブジェクトのようなものをメモリ上に保持
req処理終了前にDBオブジェクトを破棄
接続をclose
常時接続を永続化する
アプリケーションのglobal空間に、DBとの接続したままのDB handler objectを保持しておき、破棄せずに使いまわす
2種類の制限がある
Linux kernelのポート数やファイルディスクリプタ数の上限
DB層での接続数の上限
その対策
mysqlでconnection確立時にやっていること
どういう概念
誰の責務?
どれぐらいconnection数を持つものなのか
どれぐらいのコストがあるのか
度の本に書いてあるのか
わかりやすい。最初に読むと良い
他ページへのリンクもある