PgBouncer
Sisukord
Sissejuhatus
PgBouncer https://developer.skype.com/SkypeGarage/DbProjects/PgBouncer on andmebaasiühenduste pooler.
Tööpõhimõte
PgBounceri kasutamise kasu tuleneb sellest, et andmebaasi kliendid teevad suhteliselt palju ühendumisi PgBounceri vastu, kuid PgBouncer teeb ühendumisi andmebaasi enda külge suhteliselt vähe, klientide jaoks kasutatakse olemasolevaid ühendusi. Osutub, et andmebaasiga ühenduse tegemine on arvestatava hinnaga tegevus ja selle pealt on mõtet kokku hoida, nt ühel juhtumil muutus veebirakenduse http päringule vastuse saamine ca 2.5 korda kiiremaks.
PgBouncer kasutab kolme erinevat poolingut
- Session pooling - soovitatakse üldiselt kasutada
- Transaction pooling
- Statement pooling
Ettevalmistused
PgBounceri kasutamine eeldab libevent teegi olemasolu süsteemis. Otseselt on vaja sellega tegeleda, kui otsustatakse PgBouncer süsteemi paigaldada lähtetekstist.
Paigaldamine
Debian Squeeze
Tarkvara paigaldamiseks Debian Squeeze keskkonnas sobib öelda
# apt-get install pgbouncer
Paigaldatakse muu seas sellised failid
/usr/sbin/pgbouncer /etc/default/pgbouncer /etc/pgbouncer/pgbouncer.ini /etc/pgbouncer/userlist.txt /etc/init.d/pgbouncer
Debian Lenny
Tarkvara tuleb Debian Lenny keskkonnas kompileerida lähtetekstis, kusjuures süsteemis peab olema muu nö kompileerimiseks vajaliku hulgas ka pakett libevent-dev
# apt-get install libevent-dev # ./configure --prefix=/usr/local/pgbouncer # make # make install
Paigaldatakse failid kataloogi /usr/local/pgbouncer, /etc alla midagi ei teki, st kasutaja peab ise tekitama käivitusskriptid.
Seadistamine ja käivitamine
Debian Squeeze
Tarvara tööd kontrollivad seadistusfailid
- /etc/pgbouncer/pgbouncer.ini, mille sisu võiks olla nt
# egrep -v "^$|^;" /etc/pgbouncer/pgbouncer.ini [databases] test = host=127.0.0.1 dbname=test [pgbouncer] logfile = /var/log/postgresql/pgbouncer.log pidfile = /var/run/postgresql/pgbouncer.pid listen_addr = * listen_port = 6432 unix_socket_dir = /var/run/postgresql auth_type = trust auth_file = /etc/pgbouncer/userlist.txt admin_users = postgres stats_users = postgres pool_mode = session server_reset_query = server_check_query = select 1 server_check_delay = 10 max_client_conn = 100 default_pool_size = 20 log_connections = 1 log_disconnections = 1 log_pooler_errors = 1
- /etc/pgbouncer/userlist.txt sisaldab nt
"postgres" "parool"
Käivitamiseks peab olema failis /etc/default/pgbouncer rida
START=1
ja tuleb öelda
# /etc/init.d/pgbouncer start
Töötab üks protsess
$ ps aux | grep pgbouncer | grep -v grep postgres 8730 0.0 0.2 17108 1016 ? S 11:46 0:00 /usr/sbin/pgbouncer -d /etc/pgbouncer/pgbouncer.ini
Debian Lenny
- Lisada süsteemi kasutaja:grupp pgbouncer:pgbouncer
- tekitada kataloogid /var/log/pgbouncer ja /var/run/pgbouncer
- Kasutada seadistusfailis
logfile = /var/log/pgbouncer/pgbouncer.log pidfile = /var/run/pgbouncer/pgbouncer.pid
- kasutada seadistusfaili
/usr/local/pgbouncer/etc/userlist.txt
- Kasutada nt sellist kävitusskripti
$ cd /usr/local/pgbouncer/ $ /usr/local/pgbouncer/bin/pgbouncer /etc/pgbouncer/pgbouncer.ini
Kasutamine
PgBouceri kasutamiseks tuleb ühenduda PgBounceri porti, nt 192.168.10.205:6432 ja kasutada seda nagu tavalist andmebaasi.
Haldamine
PgBounceri haldamiseks sobib kasutada andmebaasi pgbouncer, nt
$ psql -h 127.0.0.1 -p 6432 -U postgres pgbouncer -c 'show databases;' name | host | port | database | force_user | pool_size | reserve_pool -----------+-----------+------+-----------+------------+-----------+-------------- pgbouncer | | 6432 | pgbouncer | pgbouncer | 2 | 0 test | 127.0.0.1 | 5432 | test | | 20 | 0
(2 rows)
Märkused
- Otse andmebaasi kasutamisel toimub peale ühenduse loomist päringu esitamine nö puhtalt kohalt, kompileeritakse funktsioonid, koostatakse query plan, plperl kasutamisel algväärtustatake globaalsed muutujad. PgBounceri kasutamisel sooritataskse need tegevused korra ühe PgBoucerist baasi mineva ühenduse jaoks ja edaspidi kasutatakse sama ühendust. Kasutaja peab ise hindama, kas sellest asjaolust võib rakenduse kasutamisel mingit häda tekkida.