首页 > 解决方案 > 如何确定与 Postgres 数据库(heroku)的连接数?

问题描述

我正在尝试确定与 postgres 数据库的连接数。这是在 heroku-postgres 的开发和爱好计划的连接限制的上下文中,限制为 20。我有一个使用数据库的 python django 应用程序。我想了解什么构成了连接。使用应用程序的用户的每个实例都算作一个连接吗?或者从应用程序到数据库的连接算作一个。

为了弄清楚这一点,我尝试了以下方法。

  1. 从不同的客户端(3 台不同的机器)打开了应用程序的多个实例。
  2. 使用在线管理员工具连接到数据库(https://adminer.cs50.net/
  3. 使用安装在我本地系统中的 pgAdmin 连接到数据库。
  4. 从 heroku 在数据库上创建并运行数据剪辑(查询报告)。
  5. 从 adminer 和 pgadmin 运行以下查询以观察记录数:

select * from pg_stat_activity where datname ='db_name';

最初,我打开的应用程序实例的每个实例似乎都有一条新记录,而管理员实例则有 1 条记录。一段时间后,来自管理员的查询显示了 6 条记录(管理员为 2 个连接,pgadmin 为 2 个,web-app 为 2 个)。

不幸的是,我仍然不确定是否将使用我的 Web 应用程序的每个用户实例都算作一个连接,还是将所有从 Web 应用程序到数据库的连接都算作一个?

提前致谢。

此致!

标签: pythondjangopostgresqlheroku

解决方案


使用 PostgreSQL 参数记录连接和断开连接(使用正确的log_line_prefix参数来获取客户端信息)应该会有所帮助:

log_connections(布尔值)

导致记录到服务器的每个尝试连接,以及成功完成客户端身份验证。只有超级用户可以在会话开始时更改此参数,并且在会话中根本无法更改。默认为关闭。

log_disconnections(布尔值)

导致记录会话终止。日志输出提供类似于 log_connections 的信息,以及会话的持续时间。只有超级用户可以在会话开始时更改此参数,并且在会话中根本无法更改。默认为关闭。


推荐阅读