前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PgBouncer 原理与深入

PgBouncer 原理与深入

作者头像
AustinDatabases
发布2020-04-24 16:43:02
9890
发布2020-04-24 16:43:02
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

PGBOUNCER 有些问题是需要更深入的理解的,尤其针对于postgresql 来说为什么要推荐使用 连接池,而MYSQL 为什么没有听说过墙裂推荐使用连接池,以及具体怎么操作pgbouncer 都是这次要说的话题。

在使用PostgreSQL 时连接时通过postmaster 来接受外部对postgresql的连接。而这样的方式会造成每个连接都会初始分配不小的内存,而这样的做法遇到大量的高频率的连接,会占用大量的内存,导致系统性能的问题,通用的解决方法当然可以通过程序中所设置的缓冲池来解决,但这样的结构,一般是由开发来控制和设置的,对于运维和DBA来说属于黑盒,和不可控的状态。所以我们才会使用数据库连接池,来进行连接复用节省打开多余连接的系统资源的消耗。

我们从上面的图中来看pgbouncer 大致的工作原理

1 客户连接到Pgbouncer 这里需要去验证你连接的数据库的地址,用户名,密码等信息是否是对的,如果不对直接就会从PgBouncer 中踢出这个连接,首先在安全性上,就可以将一部分攻击性的连接屏蔽到外面而与数据库隔绝。

2 在通过PgBouncer 第一层后,下面就需要对连接池和数据库之间已经存在的连接进行一个检测,首先要确认的问题是,数据库连接还有富余的吗?如果没有,会尝试开新的连接,但大部分稳定的时期中,是可以找到空余的连接。

3 在客户端到Pgbouncer 在到数据库之间的连接打通后,pgbouncer 会根据下面的几种连接的方式来判断这个已经存活的连接在何时被收回到pgbouncer的资源池。

pgbouncer 提供了几种连接的方式

  • Session pooling: pgbouncer中默认的方式 session pooling,连接池中从应用创建连接到SESSION 结束,pgbouncer 会保持你的这个连接在连接池中,在SESSION 结束后,会将这个连接复用给下一个应用连接。
  • Transaction pooling: 这样的方式与上边session pooling的连接方式的区别在于,保持一个连接的基础不是一个session 而是 transaction,事务,一个事务结束后,pgbouncer 就会将这个连接复用给下一个事务
  • Statement pooling:第三种的方式是不常用的,判断一个连接的释放和使用的评判条件是一条SQL语句执行完毕。

4 有一种情况是pgbouncer 的连接池已经满了,同时也不能在去开新的连接了,在这样的情况下,就会产生一个 wait login 的情况,连接进入了等待的list

5 另外还有一种情况,就是连接已经和pgbouncer 进行了连接和交互,但目前pgbouncer 到 数据库的连接不能去开新的连接,同时目前也没有活动的连接可以使用,则这时存在在pgbouncer的 连接也需要等待,等待空闲的连接使用。

OK 大致的原理是这样的(如果有问题可以加微信,一起学习)

下面就回到pgbouncer 的操作和配置上来

在安装完pgbouncer 后,会产生一个虚拟的数据库 pgbouncer ,通过这个数据库可以连接连接池的情况。

举例:我们在目的库建立一个admin的数据库,并且在配置文件中增加连接admin 数据库的标签

并且在 userlist.txt 中添加 用于连接的用户名和密码

在pgbouncer 库中执行 reload 的命令,加载新的配置

连接pgbouncer 并查看日志

输入命令查看当前的连接池状态

在pgbouner 的ini 文件中有一些比较重要的参数是可以调节的,例如

max_client_conn 调节最大的可以接受的连接数

default_pool_size 默认的连接池的可以并发的连接

以及缓冲池的hold connection 的方式

同时也可以为每个数据库或每个用户设置最大的连接等信息

所以postgresql 如果在一个类似 MYSQL 的使用环境中,多连接,短连接,这样的情况下,pgbouncer 将是postgresql 的一个保护层,避免频繁的开启连接造成的资源消耗。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档