Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90957335
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-21 15:05:24

From PgsqlWiki

Jump to: ,

 pgbouncer(5)

名称

pgbouncer - PostgreSQL 的轻量连接池。

 摘要

[databases] db = ...

[pgbouncer] ...

 描述

配置文件是 "ini" 格式的。段名称是在 " 和 " 之间的。以 ; 或者 ‘"’开头的行被当作注释并被忽略。在非行首的位置出现的“;”和‘"’都不会被识别。

 [pgbouncer]段

 常用设置

 logfile

声明日志文件。日志文件是保持打开状态的,直到 kill -HUP 或者在控制台上 RELOAD; 完成之后。

缺省:没设置。

 pidfile

声明 pid 文件。没有 pidfile 就不允许成为守护进程。

缺省:没有设置。

 listen_addr

声明一个用于监听 TCP 连接的 IPv4 地址。或者 * 就是意味着“监听所有地址”。如果不设置,那么只允许 unix socket 连接。

缺省:没有设置

 listen_port

监听哪个端口。适用于 TCP 和 UNIX socket。

缺省:6000

 unix_socket_dir

声明 Unix socket 的位置。适用于监听 socket 和服务器连接。如果设置为空串,那么会关闭 Unix socket。

缺省:/tmp

 auth_file

从此文件中装载用户名和口令。使用的文件格式和 PostgreSQL 的 pg_auth/pg_pwd 文件一样,所以可以直接指向后端的文件。

缺省:未设置。

auth_type

如何认证用户。

md5

使用 MD5 为基础的口令检查。auth_file 可以包含 md5 加密或者明文的密码。缺省值。

crypt

使用 crypt(3) 为基础的口令检查。auth_file 必须包含明文密码。

plain

在线上发送的是明文密码。

trust

不做认证。用户名必须仍然在 auth_file 中存在。

any

类似 trust,但是给出的用户名被忽略。要求所有数据库配置成以特定用户登录。
 pool_mode

声明何时服务器连接会被标记为被其他客户端重用的。

session

在客户端断开之后,服务器释放回连接池。缺省。

transaction

服务器在事务完成之后释放回连接池。

statement

在查询结束之后,服务器就释放回连接池。在这种模式下不允许跨越多个语句的长事务。
max_client_conn

允许的最大的客户端连接数。如果增大这个数值,那么最好也增大文件描述符限制。请注意实际的文件描述符数目总是比 max_client_conn 多。理论上被使用的最大的描述符数是:

  max_client_conn + (max_pool_size * total_databases * total_users)

上面是假设每个用户都在用其用户名连接服务器。如果数据库用户在连接串中声明了(所有用户以同一个用户连接),那么理论的最大值是:

  max_client_conn + (max_pool_size * total_databases)

理论最大值应该是从不会达到的,除非某人给他有意地设计了特殊的负载。不过,还是意味着你应该给 fd 一些空间。

看看你常用的手册页里头的 ulimit。

缺省:100

 default_pool_size

每个用户/数据库对允许的服务器连接数。可以在数据库相关的配置中覆盖。

缺省:20

 server_round_robin

缺省的时候,pgbouncer 以 LIFO 方式复用服务器端的连接,这样,大多数负载被少量的连接承担。这样在你只有一个服务器做数据库服务的时候是性能最好的。但是如果在数据库 IP 背后有一个 TCP 轮转的机制,那么 pbcouncer 最好也使用轮转的方式,这样才能获得一致的负载。

缺省:0

 日志设置

syslog

切换 syslog 的开/关

缺省:0

syslog_facility

在何种设施下给 syslog 发送日志。可能为:autho,authopriv,daemon,user,local0-7

缺省:daemon

 log_connections

记录成功登陆的日志。

缺省:1

 log_disconnections

记录断开连接的原因。

缺省:1

 log_pooler_errors

记录连接池发送给客户端的错误日志。

缺省:1

 控制台访问控制

 admin_users

列出允许在控制台上运行命令的所有用户。

缺省:空

stats_users

列出允许在控制台上运行只读查询的用户。这意味着除了 SHOW FDS 之外的所有 SHOW 命令。

缺省:空。

 连接健康检查,超时

 server_reset_query

在连接释放的时候,服务器可倍其它客户端使用之前,发给服务器的查询。在那个点上,没有正在处理的事务,所以它不应该包括 ABORT 或 ROLLBACK。

8.2 以及更早版本的比较好的方法是:

server_reset_query = RESET ALL; SET SESSION AUTHORIZATION DEFAULT;

对于 8.3 或者更高的版本,我们这样就可以了:

server_reset_query = DISCARD ALL;

 server_check_delay

在不执行健康查询的时候,保持已释放的连接诶多久处于立即可用状态。如果为 0 则查询总是运行。

缺省:30

server_check_query

简单地啥也不干的查询,检查服务器连接是否活着。

如果是空字串,那么健康检查被关闭。

缺省:SELECT 1;

 server_lifetime

连接池尝试关闭那些已连接时间长于这个值的服务器连接。

缺省:3600

 server_idle_timeout

如果服务器连接空闲了超过这个时长,那么在连接池里的连接就太多了,因此这个可以关闭了。

缺省:600

server_connect_timeout

如果连接和登陆不会在这段时间内完成,那么连接将被关闭。

缺省:15

 server_login_retry

如果因为来自 connect() 活着认证的登陆失败,那么连接池等待这段时间之后再重新尝试连接。

缺省:15

client_login_timeout

如果客户端登陆了,但是无法在这段时间内完成登陆,那么它将被断开。主要是为了避免死掉的连接仍然 SUSPEND 并且因此导致在线重启。

缺省:60

 危险超时

设置下列因未知原因导致的超时。

 query_timeout

运行时长超过这段的查询就会被取消。这个应该是和小一些的服务器端的 statement_timeout 一起使用,以便于只对付网络问题。

缺省:0(关闭)

client_idle_timeout

客户端连接空闲超过这段时间就被管理。这个应该比客户端的连接生命期设置长,以便于只处理网络问题。

缺省:0(关闭)

 底层网络设置

pkt_buf

用于网络包的内部缓冲区大小。会影响发出的 TCP 包以及一般的内存使用。实际的 libpq 包可以比这个大,因此没必要设置得太大。

缺省:2048

 tcp_defer_accept

下面的选项的细节应该从 man 7 tcp 中获取

缺省:在 Linux 里是 45,否则是 0

 tcp_socket_buffer

缺省:未设置

tcp_keepalive

缺省:未设置

tcp_keepcnt

缺省:未设置

 tcp_keepidle

缺省:未设置

tcp_keepintvl

缺省:未设置

 [databases] 段

这里包含 key=value (键值)对,键会被当做数据库明而值会当做 libpq 连接串风格的键值对列表。因为实际上并未使用 libpq,所以不是所有来自 libpq 的特性可以使用(service=,引号)。

 位置参数

 dbname

目标数据库名。

缺省:和客户端数据库名同名。

 host

要连接到的 IP 地址。

缺省:未设置,意味着使用 unix socket。

 port

缺省:5432

 user, password

如果使用了 user=,那么所有连接到目标数据库的连接将会以该用户的身份完成,意味着对这个数据库只有一个连接池。

否则,pgbouncer 会尝试使用客户端用户名登陆目标数据库,意味着每个用户会有一个连接池。

每数据库的连接池大小

pool_size

设置这个数据库的最大的连接池大小。如果没设置,则使用 default_pool_size。

额外的参数

这些参数让我们可以在服务器连接上设置缺省的参数。

请注意从 PgBouncer 1.1 开始,pgbouncer 就回跟踪客户端的这些数值的变化,因此在 pgbouncer.ini 里使用这些参数已经是废弃了的。

 client_encoding

从服务器端询问特定的 client_encoding。

 datestyle

从服务器询问特定的 datestyle。

 timezone

从服务器询问特定的 timezone。

例子

最小配置

[databases]
template1 = host=127.0.0.1 dbname=template1

[pgbouncer]
pool_mode = session
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
stats_users = stat_collector

数据库缺省

[databases]

; foodb over unix socket
foodb =

; redirect bardb to bazdb on localhost
bardb = host=127.0.0.1 dbname=bazdb

; acceess to dest database will go with single user
forcedb = host=127.0.0.1 port=300 user=baz password=foo client_encoding=UNICODE datestyle=ISO
阅读(1500) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~