MeWrite Docs

AWS RDS: Too many connections

AWS RDSで接続数の上限に達した場合の原因と解決策

概要

AWS RDSインスタンスへの接続数が上限に達した場合のエラーと対処法です。

エラーメッセージ

``` FATAL: too many connections for role “admin” ```

原因

  1. 接続プールの設定ミス: プールサイズが大きすぎる
  2. 接続のリーク: 接続を閉じていない
  3. インスタンスサイズが小さい: max_connectionsが足りない
  4. Lambda等のスケールアウト: 同時実行数が多い

解決策

1. 現在の接続状況を確認

```sql – PostgreSQL SELECT count() FROM pg_stat_activity; SELECT usename, count() FROM pg_stat_activity GROUP BY usename;

– MySQL SHOW STATUS LIKE ‘Threads_connected’; SHOW PROCESSLIST; ```

2. 接続プールのサイズを調整

```javascript // Node.js (pg) const pool = new Pool({ max: 10, // インスタンスサイズに応じて調整 idleTimeoutMillis: 30000, connectionTimeoutMillis: 2000, }); ```

3. RDS Proxyを使用

```typescript // Lambda + RDS Proxy import { Pool } from ‘pg’;

const pool = new Pool({ host: process.env.RDS_PROXY_ENDPOINT, ssl: { rejectUnauthorized: false }, max: 1, // Lambda では少なく });

export const handler = async () => { const client = await pool.connect(); try { const result = await client.query(‘SELECT * FROM users’); return result.rows; } finally { client.release(); } }; ```

4. パラメータグループで上限を変更

```bash

AWS CLI で確認

aws rds describe-db-parameters
–db-parameter-group-name default.postgres15
–query “Parameters[?ParameterName==‘max_connections’]” ```

5. インスタンスサイズ別の接続数目安

インスタンスmax_connections (PostgreSQL)
db.t3.micro87
db.t3.small171
db.t3.medium341
db.r5.large1,705

6. アイドル接続を強制切断

```sql – PostgreSQL SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE state = ‘idle’ AND state_change < NOW() - INTERVAL ‘10 minutes’; ```

よくある間違い

  • Lambdaで接続プールサイズを大きくする
  • コネクションを閉じ忘れる
  • 開発環境と本番環境で同じ設定

関連エラー

関連エラー

AWS の他のエラー

最終更新: 2025-12-11