一、PgBouncer简介
PgBouncer是为PostgreSQL数据库提供的一个轻量级连接池工具。PostgreSQL数据库是基于进程的架构,应用每次连接到PG,PG都会创建一个新的进程来为应用服务,服务完成之后,关闭连接,进程被销毁。频繁地创建、销毁进程开销很大,耗费资源。PgBouncer 连接池把与数据库的连接进行缓存,应用请求到来时,分配一个空闲的连接使用,应用执行完成后,连接不会直接关闭,而是被放入连接池,等待下次被使用,这样降低了资源的消耗,提高了系统性能。
二、PgBouncer支持三种连接池模型
- session,会话级连接,在客户端连接的生命周期内,连接池分配一个连接给它,直到客户端断开连接,分配的连接才会回到连接池中。
- transaction,事务级连接,当客户端的每个事务结束时,数据库连接被释放到连接池中,再次执行一个事务时,需要再从连接池获取一个连接。
- statement,语句级连接,执行完一个SQL语句,数据库连接就会被释放到连接池中,再次执行一个SQL语句,需要再从连接池获取一个连接,这种模式意味着客户端强制autocommit模式。
三、安装PgBouncer
3.1 yum install 安装
yum install -y pgbouncer
3.2 源码编译安装
源码地址:
https://github.com/pgbouncer/pgbouncer
git clone https://github.com/pgbouncer/pgbouncer.git
cd pgbouncer
git submodule init
git submodule update
./autogen.sh
./configure ...
make
make install
四、PgBouncer使用方法
4.1 创建配置文件
useradd pg
mkdir /opt/pgbouncer
chown -R pg:pg /opt/pgbouncer
su – pg
cd /opt/pgbouncer
编辑配置文件:pgbouncer.ini
[databases]
* = host=127.0.0.1 port=5432
[pgbouncer]
listen_port = 6432
listen_addr = *
auth_type = md5
auth_file = userlist.txt
logfile = /opt/pgbouncer/pgbouncer.log
pidfile = /opt/pgbouncer/pgbouncer.pid
admin_users = admin
min_pool_size=10
编辑用户密码配置文件:userlist.txt
"admin" "md5b9d11b3be25f5a1a7dc8ca04cd310b28"
用户密码可以通过连接到PostgreSQL数据库,执行以下SQL获取:
select usename,passwd from pg_shadow;
配置文件所在目录的属主需要与pgbouncer进程的启动用户保持一致。
4.2 启动PgBouncer
pgbouncer -d pgbouncer.ini
pgbouncer必须使用非root用户启动,pgbouncer.ini 配置文件所在目录属主需要与pgbouncer启动用户一致。
4.3 连接PgBouncer
psql -p 6432 -U admin pg
4.4 管理PgBouncer
psql -p 6432 -U admin pgbouncer
指定一个特殊的库名pgbouncer,使用SHOW HELP; 命令即可查看各种管理命令,如下:
$ psql -p 6432 -U admin pgbouncer
Password for user admin:
psql (11.5, server 1.13.0/bouncer)
Type "help" for help.
pgbouncer=# show help;
NOTICE: Console usage
DETAIL:
SHOW HELP|CONFIG|DATABASES|POOLS|CLIENTS|SERVERS|USERS|VERSION
SHOW FDS|SOCKETS|ACTIVE_SOCKETS|LISTS|MEM
SHOW DNS_HOSTS|DNS_ZONES
SHOW STATS|STATS_TOTALS|STATS_AVERAGES|TOTALS
SET key = arg
RELOAD
PAUSE [<db>]
RESUME [<db>]
DISABLE <db>
ENABLE <db>
RECONNECT [<db>]
KILL <db>
SUSPEND
SHUTDOWN
4.5 重载配置文件
如果修改了 pgbouncer.ini 文件,使用reload命令重载配置文件。
pgbouncer=# RELOAD;
五、更多资料
更多的参数介绍,更详细的使用方法,参考官方文档: