专栏首页AustinDatabasesPostgreSQL 与 Pgbouncer We are brotherhood

PostgreSQL 与 Pgbouncer We are brotherhood

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

在给出答案的同时,如果有人问你为什么要连接池,到底连接池起到什么作用,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起到了连接池的作用。

本文分享自微信公众号 - AustinDatabases(AustinDatabases),作者:carol11

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PgBouncer 原理与深入

    PGBOUNCER 有些问题是需要更深入的理解的,尤其针对于postgresql 来说为什么要推荐使用 连接池,而MYSQL 为什么没有听说过墙裂推荐使用连接池...

    AustinDatabases
  • 2020 年祝愿与 wishs

    新年的气氛越来越浓了,朋友圈里面回家的信息SHOW 越来越多,2019年过的的确时不容易,很多都不想再提,都是一把辛酸泪。

    AustinDatabases
  • 数据库简史(二),戏说中国数据库诸侯史

    基本上每周五大部分可能都不是技术,码这样的文字,其实比技术文字要费劲的多,需要查询的信息很多并且还都不再一个维度上,如果有什么做的不周到,或惹到某些“大佬”谢谢...

    AustinDatabases
  • PgBouncer 原理与深入

    PGBOUNCER 有些问题是需要更深入的理解的,尤其针对于postgresql 来说为什么要推荐使用 连接池,而MYSQL 为什么没有听说过墙裂推荐使用连接池...

    AustinDatabases
  • 数据库连接池

    官方:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,...

    Java架构师历程
  • Redis连接数为何会偏高

    本文介绍了ThinkPHP和YII2两个框架中对于redis的典型使用场景,通过连接数偏高的现象引出了长连接与短连接的概念,并且简单描述了几种网络连接状态,包括...

    needrunning
  • 面试java后端面经_1

    (建议提前准备:没准备的可以这样说:来自某学校 姓名 专业 学的啥 为啥学 自己陆陆续续开发的项目 毕业将近 找工作 在哪看到贵公司的招聘 准备了啥 大概这样)

    用户6055494
  • Netty新连接接入(一)-新连接检测1 新连接检测

    JavaEdge
  • 报告发布|新连接经济:为我国经济结构性改革注入新动力

    近年来,随着国家不断加强和普及连接基础设施建设,百度、腾讯、华为和中国移动等龙头企业纷纷提出连接战略,以及亿万消费者把衣食住行都建立在新连接之上,连接终于从不可...

    灯塔大数据
  • 长连接和短连接分析

    1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接 时...

    猿人谷

扫码关注云+社区

领取腾讯云代金券