问题描述
我知道连接池是一个可重用连接池,可以加快数据库流量,因为它可以重用连接而不是不断创建新连接。
但这是一个非常高级的解释。它没有解释连接的含义以及连接池的工作原理,因为即使使用连接池(例如 client -> PgBouncer -> Postgresql
),虽然客户端不必创建到数据库的连接,但它仍然必须连接以创建与代理的连接。
那么从(例如)client -> PgBouncer
创建的连接是什么?为什么创建此连接比创建连接 PgBouncer -> Postgresql
更快?
解决方法
连接池有两种用途:
-
它一直阻止打开和关闭数据库连接
与 pgBouncer 建立 TCP 连接肯定会有一定的开销,但这比建立数据库连接便宜。当你启动一个数据库连接时,额外的工作就完成了:
-
启动了一个服务器进程,这比 TCP 连接更昂贵
-
PostgreSQL 加载缓存的元数据表
-
-
它限制了客户端连接的数量,从而防止数据库过载
限制
max_connections
的优势在于,超出限制的连接不会收到错误消息,但会排队等待连接空闲。