1. なぜPostgreSQLは大量コネクションに弱いのか?
MySQLやOracleと異なり、PostgreSQLはクライアント接続ごとに別個のOSプロセスをforkします。各接続は約10MBのメモリを消費し、接続数が数百を超えるとコンテキストスイッチでCPU使用率が100%に張り付いてしまいます。
2. PgBouncerの3つのプーリングモード
- Session Pooling: クライアントが切断するまで接続を維持。互換性最高。
- Transaction Pooling(推奨): トランザクション実行中のみサーバー接続を割り当て、完了したら即座にプールに返却。数万の接続を数百のDB接続に集約可能!
- Statement Pooling: 単一SQL実行ごとに返却。複数文トランザクション不可。