像 PostgreSQL 这样的数据库的连接池究竟做了什么?
What exactly does a connection pool for databases like PostgreSQL do?
我知道连接池是一个可重复使用的连接池,可以加快到数据库的流量,因为它可以重复使用连接而不是不断地创建新连接。
但这是一个非常高层次的解释。它没有解释连接的含义以及连接池工作的原因,因为即使使用连接池,例如 client -> PgBouncer -> PostgreSQL
,虽然客户端不必创建到数据库的连接,但它仍然必须连接才能创建到代理的连接。
那么从(例如)client -> PgBouncer
创建的连接是什么?为什么创建此连接比创建连接 PgBouncer -> PostgreSQL
更快?
连接池有两种用途:
它一直阻止打开和关闭数据库连接
与 pgBouncer 建立 TCP 连接肯定会产生一定的开销,但这比建立数据库连接便宜。当您启动数据库连接时,会完成额外的工作:
服务器进程启动,这比 TCP 连接昂贵得多
PostgreSQL 加载缓存的元数据表
它限制了客户端连接数,从而防止数据库过载
与限制 max_connections
相比的优势在于,超过限制的连接不会收到错误,但会排队等待连接空闲。
我知道连接池是一个可重复使用的连接池,可以加快到数据库的流量,因为它可以重复使用连接而不是不断地创建新连接。
但这是一个非常高层次的解释。它没有解释连接的含义以及连接池工作的原因,因为即使使用连接池,例如 client -> PgBouncer -> PostgreSQL
,虽然客户端不必创建到数据库的连接,但它仍然必须连接才能创建到代理的连接。
那么从(例如)client -> PgBouncer
创建的连接是什么?为什么创建此连接比创建连接 PgBouncer -> PostgreSQL
更快?
连接池有两种用途:
它一直阻止打开和关闭数据库连接
与 pgBouncer 建立 TCP 连接肯定会产生一定的开销,但这比建立数据库连接便宜。当您启动数据库连接时,会完成额外的工作:
服务器进程启动,这比 TCP 连接昂贵得多
PostgreSQL 加载缓存的元数据表
它限制了客户端连接数,从而防止数据库过载
与限制
max_connections
相比的优势在于,超过限制的连接不会收到错误,但会排队等待连接空闲。