python - 如何确定与 Postgres 数据库(heroku)的连接数?
问题描述
我正在尝试确定与 postgres 数据库的连接数。这是在 heroku-postgres 的开发和爱好计划的连接限制的上下文中,限制为 20。我有一个使用数据库的 python django 应用程序。我想了解什么构成了连接。使用应用程序的用户的每个实例都算作一个连接吗?或者从应用程序到数据库的连接算作一个。
为了弄清楚这一点,我尝试了以下方法。
- 从不同的客户端(3 台不同的机器)打开了应用程序的多个实例。
- 使用在线管理员工具连接到数据库(https://adminer.cs50.net/)
- 使用安装在我本地系统中的 pgAdmin 连接到数据库。
- 从 heroku 在数据库上创建并运行数据剪辑(查询报告)。
- 从 adminer 和 pgadmin 运行以下查询以观察记录数:
select * from pg_stat_activity where datname ='db_name';
最初,我打开的应用程序实例的每个实例似乎都有一条新记录,而管理员实例则有 1 条记录。一段时间后,来自管理员的查询显示了 6 条记录(管理员为 2 个连接,pgadmin 为 2 个,web-app 为 2 个)。
不幸的是,我仍然不确定是否将使用我的 Web 应用程序的每个用户实例都算作一个连接,还是将所有从 Web 应用程序到数据库的连接都算作一个?
提前致谢。
此致!
解决方案
使用 PostgreSQL 参数记录连接和断开连接(使用正确的log_line_prefix
参数来获取客户端信息)应该会有所帮助:
log_connections(布尔值)
导致记录到服务器的每个尝试连接,以及成功完成客户端身份验证。只有超级用户可以在会话开始时更改此参数,并且在会话中根本无法更改。默认为关闭。
log_disconnections(布尔值)
导致记录会话终止。日志输出提供类似于 log_connections 的信息,以及会话的持续时间。只有超级用户可以在会话开始时更改此参数,并且在会话中根本无法更改。默认为关闭。
推荐阅读
- azure - Azure Dev Spaces - 没有更多空间可用于文件同步
- escpos - 未记录的 esc/pos 命令,它们有什么作用?
- fortran - OpenACC 循环私有子句和竞争条件
- r - 在使用 rvest 进行网络抓取时向每个表添加一列
- javascript - MongoDB:从用户文档中删除技能
- apache-camel - 默认情况下,每个骆驼上下文都会有一个单独的线程池吗?
- oracle-apex - Oracle APEX 隐藏模式对话框上的 x
- python - 使用 pympler 测量求解器的内存使用情况
- saxon - 断言条件在 Xerces 中为假,但在 Saxon 中为真
- at-command - 使用 AT 命令拒绝来电 (uBlox LARA-R211)