AWS RDS: Too many connections
AWS RDSで接続数の上限に達した場合の原因と解決策
概要
AWS RDSインスタンスへの接続数が上限に達した場合のエラーと対処法です。
エラーメッセージ
``` FATAL: too many connections for role “admin” ```
原因
- 接続プールの設定ミス: プールサイズが大きすぎる
- 接続のリーク: 接続を閉じていない
- インスタンスサイズが小さい: max_connectionsが足りない
- 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.micro | 87 |
| db.t3.small | 171 |
| db.t3.medium | 341 |
| db.r5.large | 1,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 の他のエラー
この記事は役に立ちましたか?