使用PgBouncer鏈接池

1.pgbouncer 的介紹

  pgbouncer是一個針對PostgreSQL數據庫的輕量級鏈接池,任何目標應用均可以把 pgbouncer 看成一個 PostgreSQL/Greenplum 服務器來鏈接,而後pgbouncer 會處理與服務器鏈接,或者是重用已存在的鏈接。pgbouncer 的目標是下降由於新建到 PostgreSQL/Greenplum 的鏈接而致使的性能損失。php

  pgbouncer目前支持三種鏈接池模型。分別是session, transaction和statment三個級別。git

  • session. 會話級連接。只有與當客戶端的會話結束時,pgbouncer纔會收回已分配的連接
  • transaction 事務級鏈接。當事務完成後,pgbouncer會回收已分配的連接。也就是說客戶端只是在事務中才能獨佔此連接,非事務的對數據庫的請求是沒有獨享的連接的。
  • statement 語句級連接。任何對數據庫的請求完成後,pgbouncer都會回收連接。此種模式下,客戶端不能使用事務,不然會形成數據的不一致。

2.pgbouncer配置

  因爲pgbouncer是基於libevent開發的;因此須要先安裝libevent的開發包:libevent下載地址github

cd libevent-2.0.21-stable
./configure --prefix=/opt/libevent
make
make install

pgbouncer下載地址sql

cd pgbouncer-1.5.4
./configure --prefix=/opt/pgbouncer --with-libevent=/opt/libevent
make 
make install
chown -R gpadmin:gpadmin /opt/pgbouncer

  配置環境變量:本實驗數據庫對象是greenplum;數據庫

export LD_LIBRARY_PATH=/opt/libevent/lib:$LD_LIBRARY_PATH
export PGB_HOME=/opt/pgbouncer
export PATH=$PGB_HOME/bin:$PATH

  建立一個PgBouncer配置文件pgbouncer.ini服務器

vi /opt/pgbouncer/config/pgbouncer.ini
[databases]
db_lottu = host=localhost port=5432 dbname=lottu user=lottu

[pgbouncer]
listen_port = 6432
listen_addr = *
auth_type = md5
auth_file = /opt/pgbouncer/userlist.txt
logfile = /opt/pgbouncer/pgbouncer.log
pidfile = /opt/pgbouncer/pgbouncer.pid
admin_users = lottu
pool_mode = Transaction
max_client_conn = 100

  建立一個認證文件。該文件的名稱必須匹配pgbouncer.ini文件中的 auth_file參數;這裏是/opt/pgbouncer/userlist.txtsession

vi /opt/pgbouncer/userlist.txt
"lottu" "××××××"

  配置服務器重置查詢;當一個鏈接被返回給鏈接池時,它必須被重置爲剛建立的鏈接的狀態。在把一個鏈接返回給鏈接池以前,PgBouncer經過發出一個查詢來實現這種重置。PostgreSQL 8.3及其後的版本有一個用於此種目的的DISCARD ALL命令,它標準PgBouncer發佈的默認重置查詢。Greenplum數據庫不支持DISCARD ALL。須要配置參數server_reset_query性能

server_reset_query = RESET ALL; SET SESSION AUTHORIZATION DEFAULT;

  Greenplum數據庫 4.7.0及其後版本包括的PgBouncer修改版中的默認服務器重置查詢。儘管它與PgBouncer原生的不一樣,它也能確保鏈接池對於Greenplum數據庫用戶透明而且客戶端應用不須要爲了使用鏈接池而被修改。配置好了; RELOAD命令重載它spa

pgbouncer=# RELOAD;

 3.啓動pgbouncer

pgbouncer -d /opt/pgbouncer/config/pgbouncer.ini

  鏈接pgbouncercode

psql -p 6432 db_lottu lottu
Password for user lottu: 
psql (8.2.15)
Type "help" for help.

4.管理pgbouncer

  pgbouncer有一個管理控制檯,能夠登陸到pgbouncer虛擬數據庫來訪問它。該控制檯接受類SQL命令,這些命令容許用戶監控、從新配置和管理pgbouncer。

  用 psql登陸到pgbouncer虛擬數據庫

psql -p 6432 pgbouncer lottu

  要看可用的命令,可運行show help命令

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

  若是用戶對pgbouncer.ini文件作了修改,用戶能夠用 RELOAD命令重載它:

pgbouncer=# RELOAD;
相關文章
相關標籤/搜索