connection
コネクション_
アプリケーションとDBとの間に確立されるセッションのこと
双方向チャネルである
DB 側も各接続のためにメモリや処理スレッドを割り当てる
connectionの確立は高コストである
割といろんなことをやる必要があるので
リクエストごとにconnectionを作るのは効率が悪いので、Connection Poolを使用する
#WIP
gpt-5.icon
2. connection が内部的に表すもの
アプリケーション側
DBドライバが作成したソケット(TCP)
認証済みの通信路
SQL を送信し、レスポンスを受け取るインタフェース
データベース側
セッション ID
ユーザー情報
トランザクション状態
一部のメモリやワーカー(プロセス/スレッド)
運用でよく出るトピック
connection数の上限
https://blog.yuuk.io/entry/architecture-of-database-connection#:~:text=あるだろう%E3%80%82-,コネクションプーリングとはなにか,-コネクション
2種類の制限がある
Linux kernelのポート数やファイルディスクリプタ数の上限
DB層での接続数の上限
その対策
Connection Poolを使う
Connection leak
コネクションを閉じ忘れるとプールが枯渇し、アプリがハングする
Idle connections
アイドル接続が増えるとメモリを食うし、DB によっては負荷増
Connection storm
一斉に大量の接続が開こうとする現象(再起動後など)
DB が落ちやすい
2種類ある?
https://blog.yuuk.io/entry/architecture-of-database-connection#:~:text=とは異なる%E3%80%82-,データベース接続の永続化手法,-これらの接続オーバヘッド
WebApp Serverのreq処理中だけ、DBとの接続を永続化
reqのたびに新しく作るということ?
これのことを永続化って言えるのか
1回のreqの中で、複数個のSQLを打つ場合ってことか
流れ
WebApp Serverがリクエスト処理を開始
最初のDB接続後にDBオブジェクトのようなものをメモリ上に保持
req処理終了前にDBオブジェクトを破棄
接続をclose
常時接続を永続化する
アプリケーションのglobal空間に、DBとの接続したままのDB handler objectを保持しておき、破棄せずに使いまわす
https://dev.mysql.com/doc/internals/en/connection-phase.html
mysqlでconnection確立時にやっていること
Webシステムにおけるデータベース接続アーキテクチャ概論 - ゆううきブログ
わかりやすい。最初に読むと良い
他ページへのリンクもある