增加 Django 应用程序的每个 Uvicorn Worker 的 Postgres 池连接数

问题描述 投票:0回答:0

我在我的本地机器上运行一个异步 Django 服务器,使用 django-postgrespool2 作为它的数据库引擎。无论我如何配置池参数,它都只会创建一定数量的池连接。这个数字似乎与我为我的应用程序运行的 Uvicorn Worker 的数量成正比。

在settings.py中配置以下参数

DATABASE_POOL_CLASS = 'sqlalchemy.pool.QueuePool'

DATABASE_POOL_ARGS = {"max_overflow": 500, "pool_size": 1000, "recycle": 300}

我正在使用 SQLAlchemy 的 QueuePool 类进行排队,如 Django-Postgrespool2 的官方文档中所述。此外,我已将池大小显着增加到 1000 并将 max_overflow 增加到 500。在使用负载测试工具同时命中请求后,我观察到的是,池中的数据库连接数只随着我的 Uvicorn 工作人员数量的增加而增加有运行。

即使池大小已设置为 1000,创建的池连接数也是有限的。我的推论,基于已运行的 Uvicorn worker 数量和由此创建的池连接数量,如下所示:

Uvicorn 工人数量 已创建池连接
5 80
6 96
7 112
8 128
9 144
10 160
50 773

pool_size 和 max_overflow 在我的实验中保持不变。此外,这些结果基于 1000 个并发线程命中的 50000 个请求。

可以看出,随着工作人员的增加,请求(始终保持不变)仅生成一定数量的池连接。早些时候,它从未超过 100,但当我将 postgresql.conf 中的 max_connections 从默认值 (100) 更改为 1000 时,情况发生了变化。但是我仍然找不到增加每个工作人员的池连接数的方法。

pool_size 参数仅在请求超出其容量但后端应用程序未完全利用分配给它的池大小时才有助于限制池连接。有什么方法可以实现这一目标而不必产生大量工人?

django postgresql connection-pooling uvicorn django-postgresql
© www.soinside.com 2019 - 2024. All rights reserved.