ZQPool 1.2 发布,连接池软件
ZQPool 是一个可以替代 pgbouncer 的连接池软件 ,在 1.2 版本中主要做了一下改进:
1. 之前的版本不支持文本大小超过64K的SQL语句,新版本没有此限制了;
2. 连接池上增加了参数msg_buf_size,可以指定接收或发送消息的缓冲区默认大小;
3. 增强了日志的功能;
4. 修复了一些小问题。
ZQPool 主要解决 PostgreSQL 生态中流行的连接池软件 pgbouncer 软件的一些缺点。通常使用数据库连接池的主要目的有两个:
1. 减少到数据库上的连接数。应用程序到连接池软件上有 M 个连接,这 M 个连接不是同时都繁忙的,这 M 个连接上同一个时刻发来的并发 SQL 可能只有 N 个(N 通常大大小于 M),这样连接池软件只需要在后端数据库上建 N 个连接。就可以满足了要求。这个场景通常是 java 应用。 我们可以想象一个场景:一个 java 应用可能部署在 200 台主机上,而每个主机上 java 应用自身会开启一个 java 连接池,这个 java 连接池假设开 20 个连接,这时到数据库上就有 200*20=4000 个连接,这些连接实际上多数时间都是空闲的,少数时间才是活跃的。 4000 个连接,PostgreSQL 数据库就需要启动 4000 个进程,太多连接会降低数据库的效率。
2. 减少短连接应用花在新建数据库连接的时间。PostgreSQL 数据库对每一个连接需要 fork 出一个新的进程来提供服务,而每次 fork 一个进程是需要时间的。而连接池软件可以预先建好到数据库的连接,应用程序连接到连接池软件后,连接池软件可以从池中取一个已经建好的连接马上提供服务,这样就大大减少了新连接的时间。这个场景的典型应用是 php 应用。php 应用到数据库通常是短连接。
而 PostgreSQL 数据库中流行的 pgbouncer 通常解决不了上面的第一个问题(java 应用):即减少到数据库上连接数的目的。 要减少到数据库上的连接数,pgbouncer 连接池的模式只能配置成语句级或事务级,不能配置成会话级,因为 pgbouncer 在会话级下,前面来多少个连接,到数据库也必须建多少连接,根本起不到减少数据库连接的目的。当我们把 pgbouncer 配置成语句级或事务级时,java 应用连接 pgbouncer 会报错:
```
org.postgresql.util.PSQLException: ERROR: prepared statement "S_1" already exists
```
这个原因是 jdbc 执行 SQL 是分两个步骤的:
先使用 Prepare 的 SQL,即:“prepare S_1 as select * from test01 where id=$1;”
然后再 “execute S1 (1);”
报错的原因为:
1. 执行 “prepare S_1 as select * from test01 where id=$1;” 时,从连接池中取一个连接 A,执行后,就释放了此连接;
2. 执行 “execute S_1 (1);”,再从连接池中获得一个连接,这时获得的连接可能已经不是之前的连接,这个新连接中没有 Prepare 语句 “S_1”,所以就报错了;
3. 如果又来了另一个 SQL,可能从连接池中取到的还是之前的连接 A,然后再执行 “prepare S_1 as select * from test02 where id=$1;”,但这个 prepare SQL 的名字 S_1 已经被前面的 SQL 占用,这时就报错了。
4. 当然 jdbc 的实际行为比上面描述的要复杂的多,但原理大致就是上面描述的这个过程。
而ZQPool通过跟踪一个连接上的 Prepare SQL 的名字,并替换成不重复的名字的方式解决了这个问题。
pgbouncer 还有一个缺点,处理 SQL 的转发只能用到 CPU 的一个核,即 pgbouncer 是单线程程序。对于高并发的情况下,超过单核的性能时,就会立即出现瓶颈。而 ZQPool 是使用 golang 的协程技术,可以利用了多核的性能,在一台 2 颗 Intel (R) Xeon (R) Silver 4210R CPU @ 2.40GHz 的物理机:
这是 pgbouncer 的测试情况:
```
[postgres@csyun01 ~]$ pgbench -h 10.197.160.18 -p 6432 -Uu01 -S -P 2 -T 30 -c 32
pgbench (14.3)
starting vacuum...end.
progress: 2.0 s, 30407.5 tps, lat 1.050 ms stddev 0.180
progress: 4.0 s, 30108.6 tps, lat 1.062 ms stddev 0.182
progress: 6.0 s, 30231.5 tps, lat 1.058 ms stddev 0.179
progress: 8.0 s, 31157.9 tps, lat 1.026 ms stddev 0.176
progress: 10.0 s, 30491.7 tps, lat 1.049 ms stddev 0.178
progress: 12.0 s, 30463.0 tps, lat 1.050 ms stddev 0.180
progress: 14.0 s, 30366.2 tps, lat 1.053 ms stddev 0.179
progress: 16.0 s, 30177.5 tps, lat 1.060 ms stddev 0.180
progress: 18.0 s, 30067.1 tps, lat 1.064 ms stddev 0.181
progress: 20.0 s, 30420.1 tps, lat 1.051 ms stddev 0.177
...
...
...
```
这是使用 ZQPool 测试的情况:
```
[postgres@csyun01 ~]$ pgbench -h 10.197.160.18 -p 5436 -Uu01 -S -P 2 -T 30 -c 32
Password:
pgbench (14.3, server 10.5)
starting vacuum...end.
progress: 2.0 s, 111134.7 tps, lat 0.213 ms stddev 0.058
progress: 4.0 s, 112688.1 tps, lat 0.209 ms stddev 0.058
progress: 6.0 s, 114570.8 tps, lat 0.207 ms stddev 0.054
progress: 8.0 s, 107305.3 tps, lat 0.216 ms stddev 0.066
progress: 10.0 s, 108680.1 tps, lat 0.215 ms stddev 0.063
progress: 12.0 s, 108867.6 tps, lat 0.214 ms stddev 0.064
...
...
...
```
可以看到 ZQPool 的 tps 可以到 10 万每秒,而 pgbouncer 最多到 3 万每秒就上不去了。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
白鲸开源发布迁移工具 Airphin 并开源,2 步迁移 Airflow 至 Dolphinscheduler
2022 3 年 2 月 22 日,白鲸开源正式发布调度系统迁移工具 Airphin,并宣布将其开源。借助 Airphin,用户可 2 步将调度系统从 Airflow 迁移至 Apache DolphinScheduler,为有调度系统迁移需要的用户带来极大便利。 Airphin是什么? Airphin 是白鲸开源研发的开源迁移工具, 目的是将 Apache Airflow DAGs 文件转换成 Apache DolphinScheduler Python SDK 定义文件,从而实现用户将调度系统(Workflow orchestration)从 Airflow 迁移到 DolphinScheduler 的目的。它是一个基于多规则的 AST 转换器,使用 LibCST 来解析和转换 Airflow 的 DAG 代码,其全部规则使用 Yaml 文件定义,并提供了一定的自定义规则扩展能力。 近期,Airphin 已经发布了0.0.12 版本,提供了丰富的功能,可以更好地帮助用户完成 Airflow 到 Apache DolphinScheduler 的迁移。 注释:AST 是 Abstra...
- 下一篇
Metabase v0.45.3 发布,团队数据分析工具
Metabase 是一个开源的团队数据分析工具,提供简单快捷的商业智能和分析功能,无论是配置还是使用都非常轻松,让团队的每位成员都能轻松看懂数据细节并参与其中。 Metabase v0.45.3 现已发布,带来如下改动: 增强功能 通过 Prometheus exporte 发送“threads blocked”(#28014) 使 native questions 中的教育信息less distracting (#27797) 修复透明主题部分不可见的“Powered by Metabase”徽章 (#27796) Bug 修复 预先存在的类别过滤器未迁移到新的类别过滤器 (#27393) 从仪表板执行“Zoom in”操作会删除连接表中的字段 (#27380) 当表连接到位时,ID 的链接显示错误的对象 (#27094) 列过滤器不适用于使用自定义列的问题 (#25927) 通过添加列(隐式连接)钻取问题导致未定义过滤 (#23293) 如果直接从尚未加载/api/database的位置进入,则数据选择器无法在 FullApp 嵌入中工作 (#21511) 更多详情可查看:http...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- Linux系统CentOS6、CentOS7手动修改IP地址
- 2048小游戏-低调大师作品
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案