PgBouncer连接池工具
PgBouncer是为PostgreSQL提供的轻量级连接池工具,作用如下:
1,能够缓存和PostgreSQL的连接,当有连接请求进来的时候,直接分配空闲进程,而不需要PostgreSQL fork出新进程来建立连接,以节省创建新进程,创建连接的资源消耗。
2,能够有效提高连接的利用率,避免过多的无效连接,导致数据库消耗资源过大,CPU占用过高。
3,对客户端连接进行限制,预防过多或恶意的连接请求。
支持三种连接池模型:
1、Session pooling
会话模式,当会话结束时,被会话占用的pgbouncer到PGDB的连接可以被其他会话复用。
适用于短连接,或者其他模式不适用的场景。
不能解决大并发场景连接打满或性能下降的问题(到后端的连接依旧会很多)。
2、Transaction pooling
事务模式,当事务结束时,被会话占用的pgbouncer到PGDB的连接可以被其他会话复用。
适用于大并发、未使用(游标、绑定变量、消息队列、特殊参数)的场景。
3、Statement pooling
语句模式,当SQL执行完成后,被会话占用的pgbouncer到PGDB的连接可以被其他会话复用。
适用于大并发、未使用(游标、绑定变量、消息队列、特殊参数),并且不需要多语句事务的场景(或者说autocommit的场景)。
本例中使用postgresql版本:
postgres=# select version();
version
--------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 9.6.22 on x86_64-pc-linux-gnu (Debian 9.6.22-1.pgdg90+1), compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit
(1 row)
使用
1、需要先安装libevent依赖。
libevent安装
下载地址:https://github.com/libevent/libevent/releases/tag/release-2.1.12-stable
创建解压目录:
mkdir /home/postgres/libevent
解压安装:
tar -zxvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/home/postgres/libevent
make
make install
环境变量.bashrc文件增加下面内容:
export PKG_CONFIG_PATH=/home/postgres/libevent/lib/pkgconfig
2、安装pgbouncer
下载地址:https://github.com/pgbouncer/pgbouncer/tags
创建解压目录:
mkdir /home/postgres/pgbouncer
解压:
tar -xvf pgbouncer-1.15.0.tar.gzcd pgbouncer-1.15.0/
安装:
./configure --prefix=/home/pg13/pgbouncer/
make
make install
3、配置pgbouncer
新建config目录和log目录:
mkdir -p /home/postgres/pgbouncer/etc/ mkdir -p /home/postgres/pgbouncer/log
配置文件修改如下:
#/home/postgres/pgbouncer/etc/pgbouncer.ini [databases] * = host=127.0.0.1 port=5432 pool_size=50 [pgbouncer] reserve_pool_size=14 logfile = /home/postgres/pgbouncer/log/pgbouncer.log pidfile = /home/postgres/pgbouncer/pgbouncer.pid listen_addr = 0.0.0.0 listen_port = 4001 unix_socket_dir = /home/postgres/pgbouncer unix_socket_mode = 0700 auth_type = md5 auth_file = /home/postgres/pgbouncer/etc/userlist.txt auth_user = jinliauth_query = select i_usename,i_passwd from get_shadow($1) admin_users = jinli stats_users = jinli pool_mode = transaction server_reset_query = DISCARD ALL server_check_query = select 1 max_client_conn = 100 default_pool_size = 20
然后将需要用到的用户密码配置到userlist.txt文件中
#userlist.txt "jinli" "jinli"
4、启动pgbouncer
启动前先修改环境变量:
export LD_LIBRARY_PATH="/home/postgres/libevent/lib":$LD_LIBRARY_PATH export PATH="/home/postgres/pgbouncer/bin":$PATH
然后启动:
pgbouncer -d /home/postgres/pgbouncer/etc/pgbouncer.ini
5、停止pgbouncer
cat /home/postgres/pgbouncer/pgbouncer.pid | xargs kill -9
6、连接pgbouncer
pgbouncer对外提供了一个虚拟数据库pgbouncer,我们可以连接到该库中进行 相关的命令操作:
export PGPASSWORD=jinli psql -h 127.0.0.1 -p 4001 -U jinli pgbouncer
常用的命令:
show clients: 用来查看客户端连接信息;
show pools: 用来查看连接池信息;
show databases:查看连接的数据库;
show config:查看相关配置;
被会话占用的pgbouncer到PGDB的连接被复用前,(通过pgbouncer.ini配置文件)可以设置重置命令(重置一些会话状态),使用discard即可(配置,执行计划缓存,序列,临时表等)。
pgbouncer=# \h discard Command: DISCARD Description: discard session state Syntax:DISCARD { ALL | PLANS | SEQUENCES | TEMPORARY | TEMP }
参考:
https://www.postgresql.org/docs/9.6/sql-discard.html
https://github.com/pgbouncer/pgbouncer
https://blog.csdn.net/weixin_39540651/article/details/117289028
https://github.com/digoal/blog/blob/master/201005/20100511_03.md
PgBouncer连接池工具的更多相关文章
- hasura graphql-engine集成pgbouncer 连接池工具
pgbouncer 是一个轻量的pg 连接池工具,我们可以和hasura graphql-engine集成起来,进行连接的一些优化 环境准备 docker-compose 文件 version: '3 ...
- postgres高可用学习篇二:通过pgbouncer连接池工具来管理postgres连接
安装pgbouncer yum install libevent -y yum install libevent-devel -y wget http://www.pgbouncer.org/down ...
- Druid连接池工具类
package cn.zmh.PingCe; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSo ...
- 使用PgBouncer连接池
1.pgbouncer 的介绍 pgbouncer是一个针对PostgreSQL数据库的轻量级连接池,任何目标应用都可以把 pgbouncer 当作一个 PostgreSQL/Greenplum 服务 ...
- C3P0连接池工具类实现步骤及方法
C3P0连接池的工具类 使用C3P0获得连接对象连接池有一个规范接口 javax.sal.DataSourse 接口定义了一个从连接池中获得连接的方法getConnection(); 步骤导入jar包 ...
- 004-C3P0连接池工具类模板
package ${enclosing_package}; import java.sql.Connection; import java.sql.ResultSet; import java.sql ...
- Oracle连接池工具类OJDBCUtils
Oraclejdbc.properties driverClassName=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@127.0.0. ...
- C3P0连接池工具类使用
c3p0的基本连接配置文件 c3p0-config.xml <c3p0-config> <default-config> <property name="dri ...
- jedis 连接池工具类
maven <properties> <jedis.version>3.0.1</jedis.version> <junit.verion>4.12&l ...
- DBCP连接池工具类模板
package ${enclosing_package}; import java.io.InputStream; import java.sql.Connection; import java.sq ...
随机推荐
- 学习笔记-Java面向对象
学习来源: B站[狂神说Java]Java零基础学习视频通俗易懂 static关键字详解 package com.oop.demo07; //static public class Student{ ...
- 第五章:用Python分析商品退单数据并找出异常商品
文章目录 项目背景 获取数据 数据计算 统计次数 异常商品 源码地址 本文可以学习到以下内容: 使用 pandas 中的 read_sql 读取 sqlite 中的数据 获取指定的日期的周一和周日 使 ...
- mysql-canal-kafka-kettle 数据实时同步链部署bug 填坑过程
1,因为 mysql 版本从5.7 提高到 8.0 ,需要更改用户配置. create user 'canal'@'%' identified by 'canal';grant select , r ...
- vue3 门户网站搭建5-图标
奈何 element 自带的图标太少,不够用,故打算使用 vite-plugin-svg-icons 组件来封装 svg-icon . ps: ui 框架选用的 element-ui,为了能跟 vue ...
- ChatGPT 爆火!真有那么神?设计师会失业吗?
人工智能来了,咱们是不是都要失业了呢? 一款AI产品,在科技市场和资本市场掀起了一阵风暴. 一切的源头,来自一个由美国人工智能公司OpenAI开发的一种大型语言模型ChatGPT.它采用了Transf ...
- QT管理网络状态和网络连接
参考:http://www.cleartechfei.com/2020/07/qt%E4%BD%BF%E7%94%A8http%E5%8D%8F%E8%AE%AE/ 1. 用Qt框架进行应用开发的过程 ...
- CSP-S T3函数调用
函数是各种编程语言中一项重要的概念,借助函数,我们总可以将复杂的任务分解成一个个相对简单的子任务,直到细化为十分简单的基础操作,从而使代码的组织更加严密.更加有条理.然而,过多的函数调用也会导致额外的 ...
- macOS NSScrollView简单使用
先看图片 这里是NSScrollView配合其他控件使用,我们这里只讲NSScrollView. 复制以下代码即可以运行 @interface ViewControl () /** 滚动显示 */ @ ...
- servlet和spring框架的关系
1.Servlet是什么? servlet就是一个Java接口,是JavaEE规范的一种,主要是为了扩展Java作为Web服务的功能. 由其他内部厂商如tomcat,JBoss内部实现web的功能. ...
- VM-tools灰色无法安装
VM-tools灰色无法安装 选择"使用物理驱动器-自动检测". 参考链接: [1] https://www.jianshu.com/p/af4313d92fee