Skip to content

Commit 8dff70f

Browse files
committed
new doc
1 parent 6cc0ca0 commit 8dff70f

File tree

7 files changed

+83
-0
lines changed

7 files changed

+83
-0
lines changed

201801/20180128_04.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
## Greenplum 连接池实践
2+
3+
### 作者
4+
digoal
5+
6+
### 日期
7+
2018-01-28
8+
9+
### 标签
10+
PostgreSQL , Greenplum , pgbouncer , pgpool-II
11+
12+
----
13+
14+
## 背景
15+
16+
17+
## 小结
18+
虽然空闲连接不干什么,但是由于每个连接有自己的relcache缓存空间,被访问过的对象,都会占用一定的缓存空间(访问的对象越多,内存占用越多)。因此即使连接空闲,实际上依旧占用了SOCKET,以及一定的内存空间。
19+
20+
某个业务长连接的问题(也是relcache的霸占问题):
21+
22+
[《PostgreSQL relcache在长连接应用中的内存霸占"坑"》](../201607/20160709_01.md)
23+
24+
Greenplum是一个数据仓库,通常数据仓库会用到大量的分区表,临时表,通常表也可能很多。而且被访问到的表(包括分区)也可能比较多。因此对于Greenplum来说,会话backend process占用的relcache内存更多。
25+
26+
那么对于Greenplum用户来说,长连接(以及大量的空闲连接)就需要注意了。
27+
28+
使用连接池(事务级连接池),就非常有必要。
29+
30+
## pgbouncer连接池+Greenplum的几种部署模式
31+
### Connection Pooling
32+
连接池部署在客户端与数据库之间,一个连接池,多个客户端连接。
33+
34+
这种模式无法实现pg_hba.conf来识别客户端,进行ACL控制。因为数据库端看到的连接是来自这个pgbouncer的,而pgbouncer与客户端不在一起。所以只能在pgbouncer这里配置ACL。
35+
36+
![pic](20180128_04_pic_001.png)
37+
38+
### Local Pooling
39+
连接池部署在客户端一起,每个客户端服务器都部署一个pgbouncer。
40+
41+
![pic](20180128_04_pic_002.png)
42+
43+
### Local Pooling with extra layer of PgBouncer
44+
多级模式,客户端也有pgbouncer,数据库与客户端之间还有一个集中的pgbouncer。
45+
46+
![pic](20180128_04_pic_003.png)
47+
48+
### 配置例子
49+
![pic](20180128_04_pic_004.png)
50+
51+
## pgbouncer连接复用模式
52+
53+
1、会话模式。不会主动复用连接,只有当占用连接的会话结束后,这个连接才能被其他新建的会话复用。适合短连接业务。
54+
55+
2、事务模式。当事务结束后,连接就可以被其他会话复用。适合长连接业务。但是不能支持绑定变量。
56+
57+
3、语句模式。语句模式复用最宽松,语句结束后,连接就可以被其他会话复用。适合长连接业务,不支持事务,不支持绑定变量。
58+
59+
60+
### 重置连接状态
61+
对于需要复用的连接,需要重置一下会话状态。
62+
63+
例如
64+
65+
```
66+
postgres=# discard all;
67+
DISCARD ALL
68+
69+
postgres=# RESET all;
70+
RESET
71+
```
72+
73+
74+
## 参考
75+
[《PostgreSQL relcache在长连接应用中的内存霸占"坑"》](../201607/20160709_01.md)
76+
77+
https://www.linkedin.com/pulse/scaling-greenplum-pgbouncer-sandeep-katta-/?articleId=6128769027482402816
78+
79+
https://pgbouncer.github.io/
80+
81+
http://pgpool.net/mediawiki/index.php/Main_Page

201801/20180128_04_pic_001.png

35.8 KB
Loading

201801/20180128_04_pic_002.png

57.4 KB
Loading

201801/20180128_04_pic_003.png

60.2 KB
Loading

201801/20180128_04_pic_004.png

220 KB
Loading

201801/readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
### 文章列表
22
----
3+
##### 20180128_04.md [《Greenplum 连接池实践》](20180128_04.md)
34
##### 20180128_03.md [[] java - 过滤ASCII码中的不可见字符, ASCII三部分, 各控制字符详解》](20180128_03.md)
45
##### 20180128_02.md [[] SqlServe到PG迁移错误:无效的编码序列"UTF8": 0x00》](20180128_02.md)
56
##### 20180128_01.md [《PostgreSQL, Greenplum ETL 之 - 非法字符(如0x00)过滤、转换(blob2text, bytea2text)》](20180128_01.md)

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ digoal's|PostgreSQL|文章|归类
2929

3030
### 未归类文档如下
3131
----
32+
##### 201801/20180128_04.md [《Greenplum 连接池实践》](201801/20180128_04.md)
3233
##### 201801/20180128_03.md [[] java - 过滤ASCII码中的不可见字符, ASCII三部分, 各控制字符详解》](201801/20180128_03.md)
3334
##### 201801/20180128_02.md [[] SqlServe到PG迁移错误:无效的编码序列"UTF8": 0x00》](201801/20180128_02.md)
3435
##### 201801/20180128_01.md [《PostgreSQL, Greenplum ETL 之 - 非法字符(如0x00)过滤、转换(blob2text, bytea2text)》](201801/20180128_01.md)

0 commit comments

Comments
 (0)