【问题标题】:How to identify number of connections to a Postgres Database (heroku)?如何确定与 Postgres 数据库(heroku)的连接数?
【发布时间】:2020-09-28 10:31:48
【问题描述】:

我正在尝试确定与 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 应用程序到数据库的连接都计为一个?

提前致谢。

最好的问候!

【问题讨论】:

    标签: python django postgresql heroku


    【解决方案1】:

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

    log_connections(布尔值)

    导致记录到服务器的每个尝试连接,以及成功完成客户端身份验证。仅有的 超级用户可以在会话开始时更改此参数,但不能 在会话中完全改变。默认为关闭。

    log_disconnections(布尔值)

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

    【讨论】:

    • 谢谢@pifor,我会试试这些。根据您的经验,您是否知道此问题的答案:如果使用我的 Web 应用程序的每个用户实例都将被计为一个连接,还是将从 Web 应用程序到数据库的所有连接都计为一个?
    • 一般来说,使用连接池,您应该有许多到 Web 应用程序的连接映射到在数据库中使用单个用户的有限数量的数据库连接(但请注意,我只是 db 专家而不是应用程序服务器专家,我从未与 Heroku 合作过)。
    • 这是有道理的。不幸的是,我无权更改这些,但对未来很有帮助。
    猜你喜欢
    • 2016-01-27
    • 2017-10-07
    • 2017-11-02
    • 1970-01-01
    • 2021-06-21
    • 2016-08-12
    • 2013-02-05
    • 2012-06-08
    • 2018-07-12
    相关资源
    最近更新 更多