pgbouncer使用快速入门

 pgbouncer是PostgreSQL的一个轻量的连接池软件。任何应用程序都可以把 pgbouncer 当作一个 PostgreSQL 服务器来连接,然后 pgbouncer 会处理与服务器连接,或者是重用已存在的连接。
    使用 pgbouncer 主要目的标是降低因为新建到 PostgreSQL 的连接而导致的性能损失。我们知道,对于每个新的连接,PostgreSQL都会建启动一个进程,连接数有多少,就会启动多少个后台服务进程,即使这些连接什么也不做,也会占用一个后台服务进程,每个服务进程都会占用系统资源,pgbouncer是一个连接池软件,可以实现连接复用的功能,降低实际到数据库的连接数目。
    为了协调事务语意和连接池的关系,pgbouncer 支持几种不同粗暴程度的连接轮转方式:
     Session pooling/会话连接池
    最礼貌的方法。在客户端连接的时候,将会给他分配一个服务器连接,并且在客户端连接的全程都分配给它。在客户端中断连接的时候,这个服务器连接将会放回连接池。这种方式不能降低数据库的连接数。
     Transaction pooling/事务连接池
    服务器连接只是在一个事务的过程里赋予客户端的。在 PgBouncer 注意到事务结束后,服务器就会放回连接池。
     Statement pooling/语句连接池
    最激进的模式。在每个查询结束之后,服务器的连接都会立即放回连接池。在这种模式下将不允许多语句的事务,因为它们的事务语意会被破坏。

    下面我们将简单介绍pgbouncer的使用方法:
    从网站 http://pgfoundry.org/projects/pgbouncer下载,我下载的是pgbouncer-1.3.4.tgz,把这个文件解压到一个目录中,编译安装:
    tar zxvf pgbouncer-1.3.4.tgz
    cd pgbouncer-1.3.4
    ./configure
    make
    make install
    
    pgbouncer运行需要一个配置文件pgbouncer.ini,文件内容如下:

[databases]
osdba = host=127.0.0.1 port=5432 user=osdba dbname=osdba
    
[pgbouncer]
listen_port = 6543
listen_addr = 127.0.0.1
auth_type = md5
auth_file = users.txt
logfile = pgbouncer.log
pidfile = pgbouncer.pid
admin_users = bntest

    其中[databases]小结中的格式为: <database> = xxxxxx,<database>指在pgbouncer中的数据恢复库,后面的"host=127.0.0.1 port=5432 user=osdba dbname=osdba"是pgbouncer连接的后台数据库使用的连接串。我这里的数据库为osdba。
    [pgbouncer]小结中,主要设置pgbouncer的监听IP即端口。
    还需要一个用户验证文件users.txt,users.txt的内容如下:

"bntest" "bnpass"

内容格式为 "username" "password"。后面就可以使用这里面配置的用户名和密码连接pgbouncer。
    这里就可以启动pgbouncer了:

osdba@osdba-laptop:~$ pgbouncer -d pgbouncer.ini 2010-10-01 21:46:24.205 11484 LOG File descriptor limit: 1024 (H:1024), max_client_conn: 100, max fds possible: 130

这里就可以使用psql连接pgbouncer了:

osdba@osdba-laptop:~$ psql -h 127.0.0.1 -p 6543 -U bntest osdba
Password for user osdba: 
psql (9.0.0)
Type "help" for help.

osdba=# \d
                 List of relations
 Schema |          Name          |   Type   | Owner 
--------+------------------------+----------+-------
 public | pg_stat_statements     | view     | osdba
 public | pgstatspack_database   | table    | osdba
 public | pgstatspack_indexes    | table    | osdba
 public | pgstatspack_sequences  | table    | osdba
 public | pgstatspack_settings   | table    | osdba
 public | pgstatspack_snap       | table    | osdba
 public | pgstatspack_statements | table    | osdba
 public | pgstatspack_tables     | table    | osdba
 public | pgstatspack_version    | table    | osdba
 public | pgstatspackid          | sequence | osdba
 public | t                      | table    | osdba
(11 rows)

osdba=# 

这里也可以连接到pgbouncer上的一个特殊的数据库pgbouncer上,这时就可以查看pgbouncer运行状态和关闭pgbouncer了:
osdba@osdba-laptop:~$ psql -h 127.0.0.1 -p 6543 -U bntest pgbouncer
Password for user bntest: 
psql (9.0.0, server 8.0/bouncer)
WARNING: psql version 9.0, server version 8.0.
         Some psql features might not work.
Type "help" for help.

pgbouncer=# show help;
NOTICE:  Console usage
DETAIL:  
SHOW HELP|CONFIG|DATABASES|POOLS|CLIENTS|SERVERS|VERSION
SHOW STATS|FDS|SOCKETS|ACTIVE_SOCKETS|LISTS|MEM
SET key = arg
RELOAD
PAUSE [<db>]
SUSPEND
RESUME [<db>]
SHUTDOWN
SHOW

可以看到命令shutdown可以停止pgbouncer的运行,命令reload可以重新装载新的配置文件。

上面的配置没的指定连接池的模式,如果没有指定,默认是session模式。
我们把连接模式改成statement,pgbouncer.ini配置文件如下:


[databases]
osdba = host=127.0.0.1 port=5432 user=osdba dbname=osdba
    
[pgbouncer]
listen_port = 6543
listen_addr = 127.0.0.1
auth_type = md5
auth_file = users.txt
logfile = pgbouncer.log
pidfile = pgbouncer.pid
admin_users = bntest
pool_mode = statement


这时,如果我们使用"begin;"启动事务时就会报错:
osdba@osdba-laptop:~$ psql -h 127.0.0.1 -p 6543 -U bntest osdba
Password for user bntest: 
psql (9.0.0)
Type "help" for help.
osdba=# begin;
ERROR:  Long transactions not allowed
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
 

其它的一些资料:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值