像 PostgreSQL 这样的数据库的连接池到底有什么作用?

问题描述

我知道连接池是一个可重用连接池,可以加快数据库流量,因为它可以重用连接而不是不断创建新连接。

但这是一个非常高级的解释。它没有解释连接的含义以及连接池的工作原理,因为即使使用连接池(例如 client -> PgBouncer -> Postgresql),虽然客户端不必创建到数据库的连接,但它仍然必须连接以创建与代理的连接。

那么从(例如)client -> PgBouncer 创建的连接是什么?为什么创建此连接比创建连接 PgBouncer -> Postgresql 更快?

解决方法

连接池有两种用途:

  • 它一直阻止打开和关闭数据库连接

    与 pgBouncer 建立 TCP 连接肯定会有一定的开销,但这比建立数据库连接便宜。当你启动一个数据库连接时,额外的工作就完成了:

    • 启动了一个服务器进程,这比 TCP 连接更昂贵

    • PostgreSQL 加载缓存的元数据表

  • 它限制了客户端连接的数量,从而防止数据库过载

    限制 max_connections 的优势在于,超出限制的连接不会收到错误消息,但会排队等待连接空闲。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...