1. 程式人生 > 其它 >PgBouncer連線池工具

PgBouncer連線池工具

PgBouncer是為PostgreSQL提供的輕量級連線池工具,作用如下:
1,能夠快取和PostgreSQL的連線,當有連線請求進來的時候,直接分配空閒程序,而不需要PostgreSQL fork出新程序來建立連線,以節省建立新程序,建立連線的資源消耗。
2,能夠有效提高連線的利用率,避免過多的無效連線,導致資料庫消耗資源過大,CPU佔用過高。
3,對客戶端連線進行限制,預防過多或惡意的連線請求。
支援三種連線池模型:
1、Session pooling
會話模式,當會話結束時,被會話佔用的pgbouncer到PGDB的連線可以被其他會話複用。
適用於短連線,或者其他模式不適用的場景。
不能解決大併發場景連線打滿或效能下降的問題(到後端的連線依舊會很多)。
2、Transaction pooling


事務模式,當事務結束時,被會話佔用的pgbouncer到PGDB的連線可以被其他會話複用。
適用於大併發、未使用(遊標、繫結變數、訊息佇列、特殊引數)的場景。
3、Statement pooling
語句模式,當SQL執行完成後,被會話佔用的pgbouncer到PGDB的連線可以被其他會話複用。
適用於大併發、未使用(遊標、繫結變數、訊息佇列、特殊引數),並且不需要多語句事務的場景(或者說autocommit的場景)。
本例中使用postgresql版本:

postgres=# select version();
                                                               version                                                                
-------------------------------------------------------------------------------------------------------------------------------------- PostgreSQL 9.6.22 on x86_64-pc-linux-gnu (Debian 9.6.22-1.pgdg90+1), compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit (1 row)

使用

1、需要先安裝libevent依賴。
libevent安裝
下載地址:

https://github.com/libevent/libevent/releases/tag/release-2.1.12-stable
建立解壓目錄:

mkdir /home/postgres/libevent

解壓安裝:

tar -zxvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/home/postgres/libevent
make
make install

環境變數.bashrc檔案增加下面內容:

export PKG_CONFIG_PATH=/home/postgres/libevent/lib/pkgconfig

2、安裝pgbouncer
下載地址:https://github.com/pgbouncer/pgbouncer/tags
建立解壓目錄:

mkdir /home/postgres/pgbouncer

解壓:

tar -xvf pgbouncer-1.15.0.tar.gzcd pgbouncer-1.15.0/

安裝:

./configure --prefix=/home/pg13/pgbouncer/
make
make install

3、配置pgbouncer

新建config目錄和log目錄:

mkdir -p /home/postgres/pgbouncer/etc/

mkdir -p /home/postgres/pgbouncer/log

配置檔案修改如下:

#/home/postgres/pgbouncer/etc/pgbouncer.ini

[databases]

* = host=127.0.0.1

port=5432

pool_size=50

[pgbouncer]

reserve_pool_size=14

logfile = /home/postgres/pgbouncer/log/pgbouncer.log

pidfile = /home/postgres/pgbouncer/pgbouncer.pid

listen_addr = 0.0.0.0

listen_port = 4001

unix_socket_dir = /home/postgres/pgbouncer

unix_socket_mode = 0700

auth_type = md5

auth_file = /home/postgres/pgbouncer/etc/userlist.txt

auth_user = jinliauth_query = select i_usename,i_passwd from get_shadow($1)

admin_users = jinli

stats_users = jinli

pool_mode = transaction

server_reset_query = DISCARD ALL

server_check_query = select 1

max_client_conn = 100

default_pool_size = 20

然後將需要用到的使用者密碼配置到userlist.txt檔案中

#userlist.txt

"jinli" "jinli"

4、啟動pgbouncer
啟動前先修改環境變數:

export LD_LIBRARY_PATH="/home/postgres/libevent/lib":$LD_LIBRARY_PATH

export PATH="/home/postgres/pgbouncer/bin":$PATH

然後啟動:

pgbouncer -d /home/postgres/pgbouncer/etc/pgbouncer.ini

5、停止pgbouncer

cat /home/postgres/pgbouncer/pgbouncer.pid | xargs kill -9

6、連線pgbouncer

pgbouncer對外提供了一個虛擬資料庫pgbouncer,我們可以連線到該庫中進行 相關的命令操作:

export PGPASSWORD=jinli

psql -h 127.0.0.1 -p 4001 -U jinli pgbouncer

常用的命令:

show clients: 用來檢視客戶端連線資訊;
show pools: 用來檢視連線池資訊;
show databases:檢視連線的資料庫;
show config:檢視相關配置;
被會話佔用的pgbouncer到PGDB的連線被複用前,(通過pgbouncer.ini配置檔案)可以設定重置命令(重置一些會話狀態),使用discard即可(配置,執行計劃快取,序列,臨時表等)。

pgbouncer=# \h discard

Command: DISCARD

Description: discard session state

Syntax:DISCARD { ALL | PLANS | SEQUENCES | TEMPORARY | TEMP }

參考:

https://www.postgresql.org/docs/9.6/sql-discard.html

https://github.com/pgbouncer/pgbouncer

https://blog.csdn.net/weixin_39540651/article/details/117289028

https://github.com/digoal/blog/blob/master/201005/20100511_03.md