コネクションプーリング(DB)
多数のクライアントのために、リクエストごとに接続を開くのではなく、限られた数のデータベース接続を使い回す手法。接続ごとに独立したプロセスで重いメモリを消費する PostgreSQL では必須である。
問題は、PostgreSQL が接続ごとに OS プロセス(約5〜10 MB)を作ることだ。接続が数千に達するとサーバーが死ぬ。PgBouncer、Pgpool、ドライバ内蔵のプーラーなどが、たとえば20本の物理接続を保持し、数千のクライアントを多重化する。モードは、セッション(クライアントがセッション全体で接続を占有)、トランザクション(トランザクションごとに接続を返却。再利用率は最高だがプリペアドステートメントや一時テーブルが使えない)、ステートメントの3つ。サーバーレスでは各インスタンスが接続を開くため悪名高い落とし穴になり、Supabase や Neon のようなプーラーが必要になる。トランザクションモードの PgBouncer が事実上の標準だ。