Greenplum 连接池实践

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介:

标签

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

目录
相关文章
|
SQL 关系型数据库 数据库
PG/Greenplum
PG/Greenplum 是指 PostgreSQL(简称 PG)和 Greenplum(简称 GP)两种关系型数据库管理系统。它们都是基于 SQL(结构化查询语言)的开放源代码数据库系统,具有高性能、可扩展性和高可靠性等特点
420 7
|
存储 缓存 NoSQL
服务搭建篇(五) Redis单机/redis-cluster集群搭建
当客户端向一个错误的节点发出了指令,该节点会发现指令的 key 所在的槽位并不归自己管理,这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告诉客户端去连这个节点去获取数据。客户端收到指令后除了跳转到正确的节点上去操作,还会同步更新纠正本地的槽位映射表缓存,后续所有 key 将使用新的槽位映射表。下面第21步操作会有演示
662 0
|
缓存 关系型数据库 PostgreSQL
PostgreSQL relcache在长连接应用中的内存霸占"坑"
除了常见的执行计划缓存、数据缓存,PostgreSQL为了提高生成执行计划的效率,还提供了catalog, relation等缓存机制。PostgreSQL 9.5支持的缓存如下 ll src/backend/utils/cache/ attoptcache.c catcache.c
7768 0
|
10月前
|
JSON API 开发者
京东店铺所有商品数据接口(JD.item_search_shop)丨京东API接口指南
JD.item_search_shop 是京东开放平台提供的接口,用于获取店铺所有商品数据。请求方法为 GET,主要参数包括 shopId(必填)、page、pageSize 和 sortType。开发者需先注册并获取 API 密钥,确定目标店铺 ID 后构建请求。响应为 JSON 格式,适用于电商应用、价格比较和市场分析等场景。
|
存储 移动开发 JavaScript
【Uniapp 专栏】Uniapp 数据绑定原理的详细解读
【5月更文挑战第12天】Uniapp的数据绑定基于Vue.js,核心是数据驱动视图的双向绑定,简化开发。关键要素包括数据模型(存储应用数据)和模板(定义界面结构,引用绑定数据)。通过观察者模式监听数据变化,优化更新以提高性能。语法如`{{}}`数据插值,`v-bind`属性绑定,`v-on`事件处理。注意数据管理、性能优化和数据安全。理解这一原理能提升应用体验和性能,随着技术发展,数据绑定将带来更多可能性。
344 2
【Uniapp 专栏】Uniapp 数据绑定原理的详细解读
|
12月前
|
小程序 算法 前端开发
微信小程序---授权登录
微信小程序---授权登录
265 0
|
中间件 关系型数据库 MySQL
Windows 安装 Seata 1.6.1 并配置开机自启
Windows 安装 Seata 1.6.1 并配置开机自启
|
前端开发 数据可视化 容器
数据可视化大屏的页面布局以及自适应
数据可视化大屏的页面布局以及自适应
727 0
|
网络安全 开发工具 数据安全/隐私保护
Xshell连接虚拟机失败的解决方法
Xshell连接虚拟机失败的解决方法
1173 0
Xshell连接虚拟机失败的解决方法