首页 > 解决方案 > 像 PostgreSQL 这样的数据库的连接池究竟是做什么的?

问题描述

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

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

那么从(例如)创建的连接是什么client -> PgBouncer,为什么创建这个连接比创建连接更快PgBouncer -> PostgreSQL

标签: postgresqlconnection-poolinghaproxypgbouncerpgpool

解决方案


连接池有两种用途:

  • 它可以防止始终打开和关闭数据库连接

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

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

    • PostgreSQL 加载缓存的元数据表

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

    超过限制的优点是超过限制max_connections的连接不会收到错误,而是会排队等待连接变为空闲。


推荐阅读