[ PROMPT_NODE_25094 ]
conn-idle-timeout
[ SKILL_DOCUMENTATION ]
## 配置空闲连接超时
空闲连接会浪费资源。请配置超时时间以自动回收它们。
**错误做法(连接被无限期持有):**
sql
-- 未配置超时
show idle_in_transaction_session_timeout; -- 0 (已禁用)
-- 连接即使在空闲时也会永久保持打开
select pid, state, state_change, query
from pg_stat_activity
where state = 'idle in transaction';
-- 显示事务空闲数小时,并持有锁
**正确做法(自动清理空闲连接):**
sql
-- 在事务空闲 30 秒后终止连接
alter system set idle_in_transaction_session_timeout = '30s';
-- 在完全空闲 10 分钟后终止连接
alter system set idle_session_timeout = '10min';
-- 重载配置
select pg_reload_conf();
对于连接池,请在连接池层面进行配置:
ini
# pgbouncer.ini
server_idle_timeout = 60
client_idle_timeout = 300
参考:[连接超时 (Connection Timeouts)](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-IDLE-IN-TRANSACTION-SESSION-TIMEOUT)