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连接池工具的更多相关文章

  1. hasura graphql-engine集成pgbouncer 连接池工具

    pgbouncer 是一个轻量的pg 连接池工具,我们可以和hasura graphql-engine集成起来,进行连接的一些优化 环境准备 docker-compose 文件 version: '3 ...

  2. postgres高可用学习篇二:通过pgbouncer连接池工具来管理postgres连接

    安装pgbouncer yum install libevent -y yum install libevent-devel -y wget http://www.pgbouncer.org/down ...

  3. Druid连接池工具类

    package cn.zmh.PingCe; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSo ...

  4. 使用PgBouncer连接池

    1.pgbouncer 的介绍 pgbouncer是一个针对PostgreSQL数据库的轻量级连接池,任何目标应用都可以把 pgbouncer 当作一个 PostgreSQL/Greenplum 服务 ...

  5. C3P0连接池工具类实现步骤及方法

    C3P0连接池的工具类 使用C3P0获得连接对象连接池有一个规范接口 javax.sal.DataSourse 接口定义了一个从连接池中获得连接的方法getConnection(); 步骤导入jar包 ...

  6. 004-C3P0连接池工具类模板

    package ${enclosing_package}; import java.sql.Connection; import java.sql.ResultSet; import java.sql ...

  7. Oracle连接池工具类OJDBCUtils

    Oraclejdbc.properties driverClassName=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@127.0.0. ...

  8. C3P0连接池工具类使用

    c3p0的基本连接配置文件 c3p0-config.xml <c3p0-config> <default-config> <property name="dri ...

  9. jedis 连接池工具类

    maven <properties> <jedis.version>3.0.1</jedis.version> <junit.verion>4.12&l ...

  10. DBCP连接池工具类模板

    package ${enclosing_package}; import java.io.InputStream; import java.sql.Connection; import java.sq ...

随机推荐

  1. pip 下载换源

    命令:[pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple]

  2. 设计模式,mvc,mvp,mvvm

    mvc model模型-视图view-控制器controller 视图可以直接访问模型,所以视图里面包括模型信息,mvc关注的是模型不变,所以在mvc中,模型不依赖视图,但是view是依赖model的 ...

  3. Java_类与对象

    类与对象 概念 类是抽象的,概念的,代表一类事物,比如人类.猫类--,即它是数据类型. 对象是具体的,实际的,代表一个具体事物,即使实例. 类是对象的模板,对象是类的一个个体,对应一个实例 对象在内存 ...

  4. js获取当天时间,凌晨0点

    凌晨0点 fields['startTime']=new Date(new Date(fields.searchTime2[0]).toLocaleDateString()).getTime() 当天 ...

  5. verilog Signed与赋值形式

    `timescale 1ns/1ps module test; reg signed[3:0] uu; reg signed[3:0] dd; reg [2:0] extract; reg [4:0] ...

  6. zabbix编译安装,安装mysql数据库:configure: error: Not found mysqlclient library

    在编译时,可能会出现题目中所示的错误,可以通过安装mysql-devel这个库解决: # yum install mysql-devel 注:如果出现"configure: error : ...

  7. anaconda新建的虚拟环境更改默认位置

    anaconda虚拟环境默认安装位置 https://blog.csdn.net/weixin_48373309/article/details/127830801 vscode中切换路径问题 在vs ...

  8. JSON操作方法

    一 JSON.stringify JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,如果指定了replacer是一个函数,则可以替换值,或 ...

  9. iOS笔记 - runtime 02:objc_msgSend执行流程

    objc_msgSend 执行流程 1 - 第一步:消息发送 2 - 第二步:动态解析 代码示例:resolveInstanceMethod | resolveClassMethod 存在问题:68 ...

  10. 基于ipset的dns代理

    ###基于源IP的dns白名单 sleep 60s/etc/init.d/firewall restart ###创建ipset集合 命名为src_dns_whitelist#清空原有命名为src_d ...