PgPool-II对不起,已经有太多客户了

时间:2020-10-30 20:07:47

标签: postgresql pgpool

背景
我有一个在3 centos 8机器(虚拟)上运行的PgPool-II集群(版本4.1.4); SQL1,SQL2和SQL3(分别在不同的硬件上)。在SQL1和SQL2上,PostgreSQL-12正在运行(当前SQL1是主数据库,SQL2在流复制备用数据库中)。

在数据库集群中,当前有用于2个不同软件环境的4个数据库。一个拥有大量流量的客户(客户)环境和一个完全没有用户活动的教育(edu)环境。 两种环境均具有一个数据库,并且共享两个数据库(仅用于读取)。

目前,该应用程序是用net core 3.1编写的,并使用npgsql和实体框架core连接到pgpool集群。 除了对具有实体框架的数据库的“常规”应用程序sql请求外,还使用psql进行定期调用以运行“ show pool_nodes”。在pgpool中。使用实体框架无法做到这一点,因此可以使用psql。

每个环境还具有一个处理互联网流量的“主api”和一个运行后台任务的“服务api”。两者都使用实体框架来调用数据库。如上所述,有时有时还会从“服务api”中调用psql。 最重要的是,所有应用程序还具有A和B系统。

所以总结一下: 2个环境(cust,edu)具有A和B系统,每个系统还具有“ main api”和“ service api”,每个=> 8个应用程序(如果算出所有“ service api”也每5分钟调用一次psql,则为12个)。 这些应用程序位于2台不同的计算机(A和B)上,“ main api”和“ service api”在同一计算机上针对一个环境和系统运行。 每个实体框架应用程序还可以根据对api的用户活动进行并行/多个同时请求。

我的问题
pgpool群集偶尔会出错:Sorry, too many clients already。 通常在与psql连接时,但有时这也发生在实体框架中。

我最初的想法是,这是因为数据库必须连接许多客户端,但是在错误显示后的短短几秒钟内运行pg_stat_activity,表明连接的方式更少(大约50个),而psql配置中的max_connections则为150个。我在psql数据目录下“ log”文件夹中的psql日志中根本找不到任何错误。

但是在pgpool.log文件中有一个错误条目: Oct 30 16:34:19 sql1 pgpool[4062984]: [109497-1] 2020-10-30 16:34:19: pid 4062984: ERROR: Sorry, too many clients already

pgpool的num_init_children = 32,max_pool = 4,所以我真的不知道问题可能出在哪里。

更多信息可能需要一些文件:
pg_stat_activity(错误发生11秒后)
pgpool.log
pgpool.conf
postgresql.conf

1 个答案:

答案 0 :(得分:1)

根据pgpool的一名开发人员的说法,此问题可能是由于存在一个错误而导致的,该错误将在2020年11月19日的4.1.5更新中包含其修复程序。

如果取消查询,该错误会使现有连接的计数器不递减计数。

相关问题