Greenplum 连接池实践

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

标签

PostgreSQL , Greenplum , pgbouncer , pgpool-II , 连接池


背景

连接池在数据库应用中是非常重要的一种组件。

虽然空闲连接不干什么,但是由于每个连接有自己的relcache缓存空间,被访问过的对象,都会占用一定的缓存空间(访问的对象越多,内存占用越多)。因此即使连接空闲,实际上依旧占用了SOCKET,以及一定的内存空间。

某个业务长连接的问题(也是relcache的霸占问题):

《PostgreSQL relcache在长连接应用中的内存霸占"坑"》

Greenplum是一个数据仓库,通常数据仓库会用到大量的分区表,临时表,通常表也可能很多。而且被访问到的表(包括分区)也可能比较多。因此对于Greenplum来说,会话backend process占用的relcache内存更多。

那么对于Greenplum用户来说,长连接(以及大量的空闲连接)就需要注意了。

另一个使用连接池的理由,当连接很多时,很有可能把OS的会话跟踪表打满,导致SQL报错(Greenplum Error: "Interconnect Error writing an Outgoing Packet: Operation not Permitted"):

《轻松打爆netfilter conntrack table的Greenplum SQL》

使用连接池(事务级连接池),就非常有必要。

pgbouncer连接池+Greenplum的几种部署模式

Connection Pooling

连接池部署在客户端与数据库之间,一个连接池,多个客户端连接。

这种模式无法实现pg_hba.conf来识别客户端,进行ACL控制。因为数据库端看到的连接是来自这个pgbouncer的,而pgbouncer与客户端不在一起。所以只能在pgbouncer这里配置ACL。

pic

Local Pooling

连接池部署在客户端一起,每个客户端服务器都部署一个pgbouncer。

pic

Local Pooling with extra layer of PgBouncer

多级模式,客户端也有pgbouncer,数据库与客户端之间还有一个集中的pgbouncer。

pic

配置例子

pic

pgbouncer连接复用模式

1、会话模式。不会主动复用连接,只有当占用连接的会话结束后,这个连接才能被其他新建的会话复用。适合短连接业务。

2、事务模式。当事务结束后,连接就可以被其他会话复用。适合长连接业务。但是不能支持绑定变量。

3、语句模式。语句模式复用最宽松,语句结束后,连接就可以被其他会话复用。适合长连接业务,不支持事务,不支持绑定变量。

重置连接状态

对于需要复用的连接,需要重置一下会话状态。

例如

postgres=# discard all;  
DISCARD ALL  
  
postgres=# RESET all;  
RESET  

参考

《PostgreSQL relcache在长连接应用中的内存霸占"坑"》

https://www.linkedin.com/pulse/scaling-greenplum-pgbouncer-sandeep-katta-/?articleId=6128769027482402816

https://pgbouncer.github.io/

http://pgpool.net/mediawiki/index.php/Main_Page

相关文章
|
2月前
|
数据可视化 关系型数据库 MySQL
PolarDB常见问题之无法创建mysql的连接池如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
2月前
|
SQL 资源调度 Java
flink cdc 连接池问题之调整大小如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
2月前
|
SQL 关系型数据库 MySQL
Flink CDC产品常见问题之读分布式mysql报连接超时如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
4月前
|
网络协议 关系型数据库 MySQL
[mysql 基于C++实现数据库连接池 连接池的使用] 持续更新中
[mysql 基于C++实现数据库连接池 连接池的使用] 持续更新中
|
5月前
|
SQL 关系型数据库 中间件
postgresql从入门到精通 - 第35讲:中间件PgBouncer部署
postgresql技术大讲堂,从入门到精通 - 第35讲:中间件PgBouncer部署
183 1
|
9月前
|
SQL 监控 druid
深入了解Druid连接池:高性能数据库连接管理工具
在现代的应用开发中,数据库连接池是优化数据库访问性能的关键。Druid连接池作为一款高性能的数据库连接管理工具,为我们提供了强大的连接池功能和监控能力。本文将深入探讨Druid连接池的基本概念、特点,以及如何在实际应用中使用它进行高效的数据库连接管理。
866 0
|
9月前
|
关系型数据库 测试技术 分布式数据库
PolarDB | PostgreSQL 高并发队列处理业务的数据库性能优化实践
在电商业务中可能涉及这样的场景, 由于有上下游关系的存在, 1、用户下单后, 上下游厂商会在自己系统中生成一笔订单记录并反馈给对方, 2、在收到反馈订单后, 本地会先缓存反馈的订单记录队列, 3、然后后台再从缓存取出订单并进行处理. 如果是高并发的处理, 因为大家都按一个顺序获取, 容易产生热点, 可能遇到取出队列遇到锁冲突瓶颈、IO扫描浪费、CPU计算浪费的瓶颈. 以及在清除已处理订单后, 索引版本未及时清理导致的回表版本判断带来的IO浪费和CPU运算浪费瓶颈等. 本文将给出“队列处理业务的数据库性能优化”优化方法和demo演示. 性能提升10到20倍.
611 4
|
12月前
|
SQL 自然语言处理 并行计算
开源分布式数据库PolarDB-X源码解读——PolarDB-X源码解读(四):SQL的一生
开源分布式数据库PolarDB-X源码解读——PolarDB-X源码解读(四):SQL的一生
6946 0
|
存储 网络协议 Java
PostgreSQL JDBC 开发指导
Java Database Connectivity (JDBC) 是一个应用程序编程接口 (API),用于 编程语言 Java,它定义了客户端如何访问数据库。 它是Java标准版平台的一部分,提供查询和 更新数据库中的数据,并面向关系数据库。 PostgreSQL JDBC驱动程序(简称pgJDBC)允许Java程序连接到PostgreSQL®® 数据库使用标准的、独立于数据库的 Java 代码。是一个开源的JDBC驱动程序 用纯Java(类型4)编写,并使用PostgreSQL®本机网络协议进行通信。 因此,驱动程序独立于平台;编译后,驱动程序 可以在任何系统上使用。
106 0