前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL 与 Pgbouncer We are brotherhood

PostgreSQL 与 Pgbouncer We are brotherhood

作者头像
AustinDatabases
发布2019-09-25 15:34:09
1.2K0
发布2019-09-25 15:34:09
举报

数据库的连接池,众所周知没有不需要的,所以对于数据库的连接池给出答案,一定是需要的。

在给出答案的同时,如果有人问你为什么要连接池,到底连接池起到什么作用,Postgresql 到底那个连接池用的不错? 如果你一时回答不了这些问题,follow me .

首先我们假设,如果我们的数据库没有连接池会怎么样?

数据库在没有任何连接池的情况下,应用程序必须直接访问数据库来建立连接。当然我们可能认为这是连接到数据库快速的方法,可是到底是这样的吗?你在打开一个和数据库直接的连接,说明本身数据库没有给你开启一个连接,而如此的情况下打开的一个连接的消耗,关闭一个连接的消耗,或者你使用加密的连接,还要有其他相关的消耗,而这样的消耗,伴随着你打开的连接越多,则消耗的就越多。尤其是互联网上的一些短连接,可能同时并发的连接多,但占用这个连接的时间很短。这就会引起另一个问题,你设置的连接数和突入起来的连接数不匹配的情况,最后就会造成拒绝连接的问题。

所以这就对数据库的连接提出一个问题,复用,连接的复用对数据库非常重要,这可以降低某些快速连接,快速断开的连接的数据库访问对数据库性能的消耗和产生的一些不必要的麻烦。

说到这里如果你是 developer 估计很快会对我下面的东西失去兴趣,因为你会说,我有连接池,每个程序的框架都有连接池,我不需要你的连接池。

really ? 你们的那些叫 Framework pooling 我今天说的是Persistent 连接与standlone 连接池。

为什么我会提出这个问题,因为一个数据库不可能仅仅接受你一个程序的连接,而一个程序必然应该有自己的连接池,但一个数据库可不仅仅为你一个应用的程序服务,所以当数据库接受多个从程序来的连接,本身对数据库的保护在哪里?

PG 在接受连接的时候,会分配出一些内存已应对连接带来的一些数据的使用的针对这个连接的内存消耗,其实别的数据库也是一样。PGA SGA 这样的概念在 PG 中也是存在的。

所以过多的连接必然会消耗PGA,导致内存出现泄露,导致一些重大的数据库性能和安全的问题。

通过软件的架构的连接池对数据库进行连接(图一)

采用软件连接池的方式对数据库进行连接(图二)

目前的主要的PostgreSQL的连接池主要有PGPOOL-II 和 PgBouncer

两种,PgBouncer. 与 PGPOOL 对比 PgBouncer 的名气要小很多,其实他的功能对比 PGPOOL 也是要精简的,那为什么推荐 PgBouncer 而不是PGPOOL,主要是PgBouncer 在连接池方面做的不比PGPOOL-II 要差,并且安装配置管理都要更为简单,配合 Repmgr 可以进行 PostgreSQL 超级高可用模式,这算是PostgreSQL 的一种高可用的解决方案。

安装是很简单的

$ ./configure --prefix=/usr/local --with-libevent=libevent-prefix
$ make
$ make install

废话不说我们先开始配置先使用起来

我们配置几点 1 2 3

1 建立一个连接当前数据库的账户

2 配置配置文件

3 配置账户文件

PgBouncer 有一个配置文件 pgbouncer.ini 还有一个用户账户文件 userlist.txt

配置的ini 文件有两块,一块是database 一块是 pgbouncer database 是配置一个连接实际数据库的认证,另一个是配置pgbouncer 监听的信息以及一些基本的配置

[databases]
test_database = host=192.168.198.123 port=5432 dbname=postgre user=admin password='password'
[pgbouncer]
listen_port = 1818
listen_addr = 192.168.198.123
auth_type = md5
auth_file = /usr/local/pgbouncer/share/doc/pgbouncer/userlist.txt
logfile = /usr/local/pgbouncer/pgbouncer.log
pidfile =  /usr/local/pgbouncer/pgbouncer.pid
admin_users = admin
pool_mode = Transaction

然后我们在userlist.txt 文件中将用以连接服务器的账户和密码填入

Ok我们可以通过pgbouncer 来连接到 PG

上面启动pgbouncer

然后我们尝试,登录到数据库中

psql -h 192.168.198.123 -p 1818 -U admin test_database

在登录后,我们可以查看pgbouncer 本身的数据库,里面有一些命令是pgbouncer 独有的。

通过一些命令我们可以了解到服务器的一些配置情况

而最终的问题是,使用PGBOUNCER 到底有什么好处

1 pg现在有5个连接通过PG 连入 实体服务器

2 实体服务器现在抛出系统的连接,以及本地的连接,真正外部的连接只有4个

这说明数据库接受的连接和实际连接数据库的客户端是有出入的,实际连接的客户端的数据量要大于数据库体现的连接数据库的量,说明Pgbouncer起到了连接池的作用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档