首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Postgresql --准备好的语句与连接池--这是一种权衡吗?

Postgresql --准备好的语句与连接池--这是一种权衡吗?
EN

Stack Overflow用户
提问于 2018-05-08 10:23:56
回答 2查看 2.9K关注 0票数 1

据我的理解,您可以在Postgresql中使用预先准备好的语句或连接池(使用pgPool/pgBouncer等工具),但可以同时使用一个语句或连接池(至少使用.NET的Npgsql驱动程序,加上库作者建议在使用PgBouncer时关闭客户端连接池。)。我说的对吗?

如果是这样的话--对于其他运行时和语言,比如Java、Python、Go,这是正确的吗?或者这是一个具体的实现问题?

EN

Stack Overflow用户

回答已采纳

发布于 2018-05-08 21:35:54

这是一个复杂的问题,但这里有一些答案。

正如@laurenz-albe所写,您可以使用pgb保镖和准备好的语句,但需要使用会话池。这允许您在连接期间使用准备好的语句(即,只要您的NpgsqlConnection实例是打开的)。但是,如果您处于一个短暂的连接场景中(例如,web应用程序为每个HTTP请求打开和关闭一个连接),那么您就倒霉了。从这个意义上说,可以说池和准备好的语句是不兼容的。

但是,如果您使用的是Npgsql的内部池机制(默认情况下),而不是使用pgb强,那么您准备好的语句就会在打开/关闭连接时自动持久化。换句话说,当您调用NpgsqlCommand.Prepare()时,如果物理连接碰巧已经准备好了SQL,则重复使用准备好的语句。这是专门用来为短命连接场景解锁准备语句的速度优势的。这是Npgsql,有关更多信息,请参阅文档。的一个非常独特的行为。

这是进程内连接池的优点之一,而不是进程外池(如pgbouncer )在传递时保留有关物理连接的信息,在这种情况下,需要准备语句的表(name和SQL)。

票数 5
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50231346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档