47 lines
1.3 KiB
Markdown
47 lines
1.3 KiB
Markdown
---
|
|
title: Configure Idle Connection Timeouts
|
|
impact: HIGH
|
|
impactDescription: Reclaim 30-50% of connection slots from idle clients
|
|
tags: connections, timeout, idle, resource-management
|
|
---
|
|
|
|
## Configure Idle Connection Timeouts
|
|
|
|
Idle connections waste resources. Configure timeouts to automatically reclaim them.
|
|
|
|
**Incorrect (connections held indefinitely):**
|
|
|
|
```sql
|
|
-- No timeout configured
|
|
show idle_in_transaction_session_timeout; -- 0 (disabled)
|
|
|
|
-- Connections stay open forever, even when idle
|
|
select pid, state, state_change, query
|
|
from pg_stat_activity
|
|
where state = 'idle in transaction';
|
|
-- Shows transactions idle for hours, holding locks
|
|
```
|
|
|
|
**Correct (automatic cleanup of idle connections):**
|
|
|
|
```sql
|
|
-- Terminate connections idle in transaction after 30 seconds
|
|
alter system set idle_in_transaction_session_timeout = '30s';
|
|
|
|
-- Terminate completely idle connections after 10 minutes
|
|
alter system set idle_session_timeout = '10min';
|
|
|
|
-- Reload configuration
|
|
select pg_reload_conf();
|
|
```
|
|
|
|
For pooled connections, configure at the pooler level:
|
|
|
|
```ini
|
|
# pgbouncer.ini
|
|
server_idle_timeout = 60
|
|
client_idle_timeout = 300
|
|
```
|
|
|
|
Reference: [Connection Timeouts](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-IDLE-IN-TRANSACTION-SESSION-TIMEOUT)
|