postgresql - 像 PostgreSQL 这样的数据库的连接池究竟是做什么的?
问题描述
我知道连接池是一个可重用连接池,它可以加快数据库的流量,因为它可以重用连接而不是不断创建新连接。
但这是一个非常高级的解释。它没有解释连接的含义以及连接池工作的原因,因为即使使用连接池,例如client -> PgBouncer -> PostgreSQL
,虽然客户端不必创建与数据库的连接,它仍然必须连接才能创建与代理的连接。
那么从(例如)创建的连接是什么client -> PgBouncer
,为什么创建这个连接比创建连接更快PgBouncer -> PostgreSQL
?
解决方案
连接池有两种用途:
它可以防止始终打开和关闭数据库连接
与 pgBouncer 建立 TCP 连接肯定会有一定的开销,但这比建立数据库连接要便宜得多。当您启动数据库连接时,会完成额外的工作:
启动服务器进程,这比 TCP 连接更昂贵
PostgreSQL 加载缓存的元数据表
它限制了客户端连接的数量,从而防止数据库过载
超过限制的优点是超过限制
max_connections
的连接不会收到错误,而是会排队等待连接变为空闲。
推荐阅读
- assembly - 将值加载到 RISC-V 中的寄存器
- reactjs - 使用使用类而不是钩子的 npx 创建反应应用程序
- javascript - JavaScript:如何根据图像和父宽度按比例调整 div 大小?
- node.js - NodeJS 读取 icecast 流元数据
- javascript - 更改其他 div 中的高度后,我的 Fixed SIDEBAR 浮动在页脚上方
- javascript - “响应”类型上不存在属性“json”
- reactjs - 哪个更快、更高效:useState 还是 useReducer?
- asp.net-core - Blazor 在前一个操作完成之前在此上下文上启动了第二个操作
- pandas - 熊猫不适用于 django?
- python-3.x - 如何在 python 终端中使用用户输入进行多个循环?