idle in transaction 怎么处理

idle in transaction 怎么处理
最新回答
吖棒棒糖

2024-03-19 18:52:18

引发 idle in transaction 的原因很多,例如应用代码中忘记关闭已开启的事务,或者系统中存在僵死进程等,曾经看到过某个库中的 idle in transaction 进程存在一年有余,这类进程严重危害了数据库的安全,例如它会阻止 VACUUM 进程回收记录,造成表数据膨胀,同时它有可能引起整个 PostgreSQL 数据库 Transaction ID Wraparound 的风险。
--修改 postgresql.conf 以下参数
idle_in_transaction_session_timeout = 20000
备注:参数单位为毫秒,这里设置 idle in transaction 超时空闲事务时间为 20 秒。

--重载配置文件
[pg96@db1 pg_root]$ pg_ctl reload
server signaled
备注:此参数修改后对当前连接依然生效,应用不需要重连即能生效。

--开启会话一:模拟一个事务
[pg96@db1 ~]$ psql francs francs
psql (9.6beta1)
Type "help" for help.

francs=> begin;
BEGIN

francs=> select 1;
?column?
----------
1
(1 row)
事务中,不提交也不回滚。