gpt4 book ai didi

postgresql - 当启用事务池并发出单个语句时,pgbouncer 的行为如何?

转载 作者:行者123 更新时间:2023-11-29 13:02:59 26 4
gpt4 key购买 nike

我在网络应用程序上使用 pgbouncer,大多数线程以 BEGIN 开始,以 COMMIT 或 ROLLBACK 结束,所以我们使用事务池,一切都很好。

但是,我们也有一些不使用事务的进程:相反,它们只是一个接一个地发出命令。

我相信,在事务池下,每个命令本身就是一个事务,就像您直接连接到服务器时一样,也许每个命令都从池中获得不同的连接。但我被告知 pgbouncer 不会那样做,而是永远不会找到最终的 COMMIT/ROLLBACK,因此连接不会返回到池中。

有人知道会发生什么吗?我在文档中找不到任何内容。

最佳答案

https://pgbouncer.github.io/usage.html

https://pgbouncer.github.io/config.html#description

Transaction pooling

A server connection is assigned to client only during a transaction.When PgBouncer notices that transaction is over, the server connectionwill be put back into the pool.

在您的情况下,如果事务永远不会结束(提交、回滚),它将达到 idle_transaction_timeout(默认禁用)并且 idle in transaction 连接将返回池,允许其他人连接。如果你有它的默认值,在某些时候所有的连接池都会被填满,所以新的将被拒绝。从这一点开始,您的单个语句将不起作用 - 它们将等待从未出现的免费连接。

关于单个语句——它们不是“通过 pgbounce 转换为事务”,也不是“在事务池中,每个命令本身就是一个事务”。这由每个 session 的 AUTOCOMMIT 控制。

关于postgresql - 当启用事务池并发出单个语句时,pgbouncer 的行为如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23394272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com