开发者社区> 德哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Greenplum 连接池实践

简介:
+关注继续查看

标签

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
针对数据库连接池到DRDS连接探活的优化
针对数据库连接池到DRDS连接探活的优化
0 0
MyCat - 架构剖析 - MyCat 连接池架构实现 | 学习笔记
快速学习 MyCat - 架构剖析 - MyCat 连接池架构实现
0 0
PostgreSQL数据库 OLTP高并发请求性能优化
在多核系统中,一般TPS会随并发数的增加而提升,但是当并发数超过一定的数值(如CPU核数的2到3倍以后),性能开始下降,并发数越高,下降越严重。
978 0
数据库MySQL调优实战经验总结
MySQL 数据库的使用是非常的广泛,稳定性和安全性也非常好,经历了无数大小公司的验证。仅能够安装使用是远远不够的,MySQL 在使用中需要进行不断的调整参数或优化设置,才能够发挥 MySQL 的最大作用。
847 0
基于云原生数据库 PolarDB for PostgreSQL 分布式开源项目实现序列号生成和性能调优赛题解析 | 学习笔记
快速学习基于云原生数据库 PolarDB for PostgreSQL 分布式开源项目实现序列号生成和性能调优赛题解析
0 0
+关注
德哥
公益是一辈子的事, I am digoal, just do it.
文章
问答
来源圈子
更多
让用户数据永远在线,让数据无缝的自由流动
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
PostgresChina2018_权宗亮_基于odyssey连接池实现企业级PostgreSQL数据分布中间件
立即下载
阿里技术专家一挃:MongoDB 优化器 & 执行器介绍
立即下载
PostgreSQL高并发数据库应用数据
立即下载