分类:
2008-05-21 15:02:40
pgbouncer - PostgreSQL 的轻量的连接池。
pgbouncer [-d][-R][-v]pgbouncer -V|-h
pgbouncer 是一个 PostgreSQL 的连接池。任何目标应用都可以把 pgbouncer 当作一个 PostgreSQL 服务器来连接,然后 pgbouncer 会处理与服务器连接,或者是重用已存在的连接。
pgbouncer 的目标是降低因为新建到 PostgreSQL 的连接而导致的性能损失。
为了协调事务语意和连接池的关系,pgbouncer 支持几种不同粗暴程度的连接轮转方式:
Session pooling/会话连接池
Transaction pooling/事务连接池
Statement pooling/语句连接池
pgbouncer 的管理接口包含一些新的 SHOW 命令,在与特定的虚拟数据库 pgbouncer 连接的时候可以用于观察系统状态。
下面列出了基本的设置步骤。
1. 创建一个配置文件pgbouncer.ini。细节见。最简单的:
[databases] template1 = host=127.0.0.1 port=5432 dbname=template1 [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 = someuser
2. 创建 users.txt 文件:
"someuser" "same_password_as_in_server"
3. 启动 pgbouncer:
$ pgbouncer -d pgbouncer.ini
4. 让你的应用(或者 psql 客户端)连接到 pgbouncer,而不是直接连接到 PostgreSQL 服务器。
$ psql -h 127.0.0.1 -p 6543 -U someuser template1
5. 通过连接到特殊的管理数据库 pgbouncer 并且发出 show help; 命令开始来管理 pgbouncer:
$ psql -h 127.0.0.1 -p 6543 -U someuser pgbouncer pgbouncer=# show help; NOTICE: Console usage DETAIL: SHOW [HELP|CONFIG|DATABASES|FDS|POOLS|CLIENTS|SERVERS|SOCKETS|LISTS|VERSION] SET key = arg RELOAD PAUSE SUSPEND RESUME SHUTDOWN
6. 如果你修改了一些配置文件中可配置的配置参数,那么可以用下面命令重新装载:
pgbouncer=# RELOAD;
-d
-R
-v
-V
-h
通过连接到标准的 listen_addr/listen_port 并且声明 pgbouncer 为连接数据库,那么可以使用管理控制台。
$ psql -h 127.0.0.1 -p 6543 pgbouncer
只有在配置参数 admin_users 或者 stats_users 才允许连接到控制台。
另外,如果连接通过 UNIX socket,并且客户端和正在运行的进程有着一样的 UNIX 用户 uid 的话,允许通过 pgbouncer 用户无密码登录。
SHOW 命令输出一些数据行,所包含的字段在下面描述。
显示统计。
database
total_requests
total_received
total_sent
total_query_time
avg_req
avg_recv
avg_sent
avg_query
type
user
database
state
addr
port
local_addr
local_port
connect_time
request_time
ptr
link
type
user
database
state
addr
port
local_addr
local_port
connect_time
request_time
ptr
link
为每一对(数据库,用户)都会保留一条新的连接池记录。
database
user
cl_active
cl_waiting
sv_active
sv_idle
sv_used
sv_tested
sv_login
maxwait
显示下列内部信息,分字段显示(不是按行显示):
databases
users
pools
free_clients
used_clients
login_clients
free_servers
used_servers
每行显示一个用户,字段明是 name。
name
host
port
database
force_user
pool_size
显示正在使用的 fd 列表。如果连接的用户的用户名是 "pgbouncer",那么通过 unix socket 连接,并且和运行的进程有同样的 UID,实际的 fd 列表是通过这个连接传递的。这个机制用于做在线重启。
fd
task
user
database
addr
port
cancel
link
显示当前配置设置,一个配置一行,字段如下:
key
value
changeable
PgBouncer 尝试从所有服务器断开,首先会等待所有查询结束。这个命令在所有查询完成之前不会返回。
所有 socket 的缓冲区都冲刷出去,然后 PgBouncer 停止在上面的监听。这条命令在所有 socket 冲刷完毕之前不会返回。
从前面的 PAUSE 或者 SUSPEND 命令上头重新开始工作。
PgBouncer 进程将会退出。
PgBouncer 进程将会重载它的配置文件然后更新可修改的设置。
SIGHUP
SIGINT
SIGTERM
来自 libevent 文档:
我们可以关闭 epoll,kqueue,devpoll,poll 或者 select 的支持,方法是设置分别环境变量 EVENT_NOEPOLL,EVENT_NOKQUEUE,EVENT_NODEVPOLL,EVENT_NOPOLL 或者 EVENT_NOSELECT。
通过设置环境变量 EVENT_SHOW_METHOD,libevent 显示它使用的内核通知方法。
PgBouncer 需要它自己的用户数据库。用户从文本文件中装载,格式应该和 PostgreSQL 的 pg_auth/pg_pwd 文件一样。
"username1" "password" ... "username2" "md12342345234" ...
至少需要有两个字段,用双引号包围。首先是用户名,第二个是明文或者是 md5 散列后的口令。PgBouncer 忽略改行剩余的部分。
这样的文件格式允许指引 PgBouncer 直接到 PostgreSQL 数据目录的用户文件。