分类:
2008-05-21 15:05:24
pgbouncer - PostgreSQL 的轻量连接池。
[databases] db = ...
[pgbouncer] ...
配置文件是 "ini" 格式的。段名称是在 " 和 " 之间的。以 ; 或者 ‘"’开头的行被当作注释并被忽略。在非行首的位置出现的“;”和‘"’都不会被识别。
声明日志文件。日志文件是保持打开状态的,直到 kill -HUP 或者在控制台上 RELOAD; 完成之后。
缺省:没设置。
声明 pid 文件。没有 pidfile 就不允许成为守护进程。
缺省:没有设置。
声明一个用于监听 TCP 连接的 IPv4 地址。或者 * 就是意味着“监听所有地址”。如果不设置,那么只允许 unix socket 连接。
缺省:没有设置
监听哪个端口。适用于 TCP 和 UNIX socket。
缺省:6000
声明 Unix socket 的位置。适用于监听 socket 和服务器连接。如果设置为空串,那么会关闭 Unix socket。
缺省:/tmp
从此文件中装载用户名和口令。使用的文件格式和 PostgreSQL 的 pg_auth/pg_pwd 文件一样,所以可以直接指向后端的文件。
缺省:未设置。
如何认证用户。
md5
crypt
plain
trust
any
声明何时服务器连接会被标记为被其他客户端重用的。
session
transaction
statement
允许的最大的客户端连接数。如果增大这个数值,那么最好也增大文件描述符限制。请注意实际的文件描述符数目总是比 max_client_conn 多。理论上被使用的最大的描述符数是:
max_client_conn + (max_pool_size * total_databases * total_users)
上面是假设每个用户都在用其用户名连接服务器。如果数据库用户在连接串中声明了(所有用户以同一个用户连接),那么理论的最大值是:
max_client_conn + (max_pool_size * total_databases)
理论最大值应该是从不会达到的,除非某人给他有意地设计了特殊的负载。不过,还是意味着你应该给 fd 一些空间。
看看你常用的手册页里头的 ulimit。
缺省:100
每个用户/数据库对允许的服务器连接数。可以在数据库相关的配置中覆盖。
缺省:20
缺省的时候,pgbouncer 以 LIFO 方式复用服务器端的连接,这样,大多数负载被少量的连接承担。这样在你只有一个服务器做数据库服务的时候是性能最好的。但是如果在数据库 IP 背后有一个 TCP 轮转的机制,那么 pbcouncer 最好也使用轮转的方式,这样才能获得一致的负载。
缺省:0
切换 syslog 的开/关
缺省:0
在何种设施下给 syslog 发送日志。可能为:autho,authopriv,daemon,user,local0-7
缺省:daemon
记录成功登陆的日志。
缺省:1
记录断开连接的原因。
缺省:1
记录连接池发送给客户端的错误日志。
缺省:1
列出允许在控制台上运行命令的所有用户。
缺省:空
列出允许在控制台上运行只读查询的用户。这意味着除了 SHOW FDS 之外的所有 SHOW 命令。
缺省:空。
在连接释放的时候,服务器可倍其它客户端使用之前,发给服务器的查询。在那个点上,没有正在处理的事务,所以它不应该包括 ABORT 或 ROLLBACK。
8.2 以及更早版本的比较好的方法是:
server_reset_query = RESET ALL; SET SESSION AUTHORIZATION DEFAULT;
对于 8.3 或者更高的版本,我们这样就可以了:
server_reset_query = DISCARD ALL;
在不执行健康查询的时候,保持已释放的连接诶多久处于立即可用状态。如果为 0 则查询总是运行。
缺省:30
简单地啥也不干的查询,检查服务器连接是否活着。
如果是空字串,那么健康检查被关闭。
缺省:SELECT 1;
连接池尝试关闭那些已连接时间长于这个值的服务器连接。
缺省:3600
如果服务器连接空闲了超过这个时长,那么在连接池里的连接就太多了,因此这个可以关闭了。
缺省:600
如果连接和登陆不会在这段时间内完成,那么连接将被关闭。
缺省:15
如果因为来自 connect() 活着认证的登陆失败,那么连接池等待这段时间之后再重新尝试连接。
缺省:15
如果客户端登陆了,但是无法在这段时间内完成登陆,那么它将被断开。主要是为了避免死掉的连接仍然 SUSPEND 并且因此导致在线重启。
缺省:60
设置下列因未知原因导致的超时。
运行时长超过这段的查询就会被取消。这个应该是和小一些的服务器端的 statement_timeout 一起使用,以便于只对付网络问题。
缺省:0(关闭)
客户端连接空闲超过这段时间就被管理。这个应该比客户端的连接生命期设置长,以便于只处理网络问题。
缺省:0(关闭)
用于网络包的内部缓冲区大小。会影响发出的 TCP 包以及一般的内存使用。实际的 libpq 包可以比这个大,因此没必要设置得太大。
缺省:2048
下面的选项的细节应该从 man 7 tcp 中获取
缺省:在 Linux 里是 45,否则是 0
缺省:未设置
缺省:未设置
缺省:未设置
缺省:未设置
缺省:未设置
这里包含 key=value (键值)对,键会被当做数据库明而值会当做 libpq 连接串风格的键值对列表。因为实际上并未使用 libpq,所以不是所有来自 libpq 的特性可以使用(service=,引号)。
目标数据库名。
缺省:和客户端数据库名同名。
要连接到的 IP 地址。
缺省:未设置,意味着使用 unix socket。
缺省:5432
如果使用了 user=,那么所有连接到目标数据库的连接将会以该用户的身份完成,意味着对这个数据库只有一个连接池。
否则,pgbouncer 会尝试使用客户端用户名登陆目标数据库,意味着每个用户会有一个连接池。
设置这个数据库的最大的连接池大小。如果没设置,则使用 default_pool_size。
这些参数让我们可以在服务器连接上设置缺省的参数。
请注意从 PgBouncer 1.1 开始,pgbouncer 就回跟踪客户端的这些数值的变化,因此在 pgbouncer.ini 里使用这些参数已经是废弃了的。
从服务器端询问特定的 client_encoding。
从服务器询问特定的 datestyle。
从服务器询问特定的 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