我们的PostgreSQL 10.1服务器今天耗尽了连接,因为正在调用
的监视器进程select pg_database_size('databasename');
陷入困境。它没有明显的锁定。它永远不会回来。监视器每隔几分钟尽职地登录,一遍又一遍,直到我们用完连接。当我运行其他数据库的查询时,它可以工作,但不适用于我们的主数据库。
杀死调用进程并未清除查询。
select pg_cancel_backend(1234)
不会终止查询。
也没有select pg_terminate_backend(1234)
如果我手动运行查询,则不会在数据库中将其杀死。
我可能必须重新启动数据库服务器才能从中恢复。但是,我想阻止它再次发生。
这个功能是什么阻止信号并且永不返回(如被调用后8小时)?有没有办法在没有重新启动数据库的情况下从流程表中清除它们并打破仍然有少量剩余连接在系统中仍处于活动状态的用户?