正确使用带有pgbouncer的sqlalchemy池



那里!

我使用PgBouncerSqlalchemy来获取连接。

就我的理解而言,我想澄清以下几点:

  1. 我使用sqlalchemy默认池(QueuePool)并从我的pgbouncer获取连接。事务完成后,连接是返回到我这边的"lazy"连接存储器(sqlalchemy)还是直接返回到pgbouncer pool

  2. 如果我使用带有pool_size=5参数的QueuePool并为pgbouncer池创建引擎,那么pgbouncer是一次分配这5个连接,还是按需提供连接?

  3. 如果我删除了连接池(使用NullPool),并为pgbouncer创建了一个引擎,这是否意味着在退出事务上下文后,连接将关闭,并且在下一个请求时将在pgbouncer内创建一个新的连接?

  4. 在使用sqlalchemy + pgbouncer的情况下,以下哪种方法更正确?

通过连接,我的工作方式如下:

async with async_session() as connect:
yield connect
await connect.commit()

我认为如果你使用pgbouncer,你不需要应用内连接池,你可以使用NullPool+QueuePool的pgbouncer+use_lifo=True标志来使用LIFO队列,它应该首先重用旧连接。不过,我不完全确定同时使用pgbouncer+应用内连接池是有益还是有害。

以下是相关文档链接:https://docs.sqlalchemy.org/en/20/core/pooling.html

同样,对于自动事务提交,您可以使用sessionmaker.begin():

async with async_sessinomaker.begin() as session:
...

相关内容

  • 没有找到相关文章

最新更新