如何在PostgreSQL中提交处于空闲状态的事务?
有没有一种方法可以提交Postgres中处于空闲状态的事务 如果我们在事务中使用idle\u\u session\u timeout,它将终止并回滚事务,但是是否有任何方法提交并完成会话,我看不到任何被PID阻止的内容,我使用的是postgre10。 或者我有没有办法找到阻止这些会话的原因?所有这些似乎都是应用程序中孤立进程的结果如何在PostgreSQL中提交处于空闲状态的事务?,postgresql,postgresql-10,database-tuning,Postgresql,Postgresql 10,Database Tuning,有没有一种方法可以提交Postgres中处于空闲状态的事务 如果我们在事务中使用idle\u\u session\u timeout,它将终止并回滚事务,但是是否有任何方法提交并完成会话,我看不到任何被PID阻止的内容,我使用的是postgre10。 或者我有没有办法找到阻止这些会话的原因?所有这些似乎都是应用程序中孤立进程的结果 APPNEW=# SELECT datname APPNEW-# ,pid APPNEW-# , usename APPNEW-# , wait_event_type
APPNEW=# SELECT datname
APPNEW-# ,pid
APPNEW-# , usename
APPNEW-# , wait_event_type
APPNEW-# , wait_event
APPNEW-# ,backend_start
APPNEW-# ,state
APPNEW-# , pg_blocking_pids(pid) AS blocked_by
APPNEW-# ,query
APPNEW-# FROM pg_stat_activity
APPNEW-# WHERE wait_event IS NOT NULL
APPNEW-# order by backend_start;
datname | pid | usename | wait_event_type | wait_event | backend_start | state | blocked_by | query
---------+-------+-------------+-----------------+---------------------+-------------------------------+---------------------+------------+--------------------------------------------------
APPNEW | 4227 | appnew | Client | ClientRead | 2020-07-26 14:28:26.956884+12 | idle | {} | BEGIN;commit
APPNEW | 4305 | appnew | Client | ClientRead | 2020-07-26 14:28:35.955987+12 | idle | {} | BEGIN;commit
APPNEW | 4314 | appnew | Client | ClientRead | 2020-07-26 14:28:36.002783+12 | idle | {} | commit
APPNEW | 4323 | appnew | Client | ClientRead | 2020-07-26 14:28:36.046023+12 | idle | {} | BEGIN;commit
APPNEW | 4332 | appnew | Client | ClientRead | 2020-07-26 14:28:36.088676+12 | idle | {} | commit
APPNEW | 4341 | appnew | Client | ClientRead | 2020-07-26 14:28:36.137323+12 | idle | {} | BEGIN;commit
APPNEW | 4350 | appnew | Client | ClientRead | 2020-07-26 14:28:36.185843+12 | idle | {} | commit
APPNEW | 4359 | appnew | Client | ClientRead | 2020-07-26 14:28:36.227245+12 | idle | {} | BEGIN;commit
APPNEW | 4368 | appnew | Client | ClientRead | 2020-07-26 14:28:36.288329+12 | idle | {} | commit
APPNEW | 4377 | appnew | Client | ClientRead | 2020-07-26 14:28:36.337534+12 | idle | {} | commit
APPNEW | 4386 | appnew | Client | ClientRead | 2020-07-26 14:28:36.402352+12 | idle | {} | commit
APPNEW | 4395 | appnew | Client | ClientRead | 2020-07-26 14:28:36.439634+12 | idle | {} | commit
APPNEW | 4404 | appnew | Client | ClientRead | 2020-07-26 14:28:36.481263+12 | idle | {} | commit
.
.
(240 rows)
这些是“空闲”的会话,而不是事务
空闲会话没有可以(或需要)提交的挂起事务
您无需执行任何操作“clientrad”表示它们在等待客户端发送另一个命令时被阻止。但它没有这样做。如果它们位于事务内部,则状态将被称为“事务中的空闲”,而不仅仅是“空闲”。你不能让他们提交,因为没有什么要提交的。这些是应用程序孤立进程的结果,有没有办法处理此类事务,我不想杀死他们,因为这可能会导致数据丢失?他们已经提交了。这些连接没有可丢失的数据。也许应用程序有从未发送到数据库的数据,但你不能从数据库中对此做任何事情。解决问题的方法是修复应用程序。