您好,登录后才能下订单哦!
PgBouncer原理该怎么理解,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
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 的一个保护层,避免频繁的开启连接造成的资源消耗。
看完上述内容,你们掌握PgBouncer原理该怎么理解的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。