2014-12-11 13 views
9

Sto utilizzando pgbouncer in modalità transazione & cercando di consentire la chiusura di 500 transazioni attive. Lo scopo è semplicemente quello di sottolineare verificare l'installazioneCome aumentare il throughput della connessione per pgbouncer?

configurazione attuale: [ 'n' clienti ---> 1 pgbouncer ----> 1 Postgres]

mi accorgo che il mio transazioni/secondo (tps) diminuisce considerevolmente quando uso pgbouncer invece di una connessione diretta a postgres.

Per lo stesso set di transazione (via pgbench)

  • collegamenti diretti => 10k (tps) appx

  • connessione pgbouncer => 3K (tps) appx

Esiste qualche configurazione in pgbouncer che deve essere ottimizzata per consentire prestazioni migliori?

Capisco che pgbouncer è un'applicazione a thread singolo, ma vorrei ottimizzarla al meglio. seguito è la mia configurazione pgbouncer:

pgbouncer.ini

pool_mode = transaction 
server_reset_query = 

# Time outs 
server_lifetime=6000 
server_idle_timeout=0 
server_connect_timeout=30 


#pool configuration 
max_client_conn=10000 
default_pool_size=500 
pool_size=500 

##other 
pkt_buf=4096 
server_login_retry=2 

L'unica applicazione che posso vedere è quello di utilizzare più pgbouncers per puntare allo stesso server db.

UPDATE

durante l'esecuzione del test:

utilizzo della CPU: 30% appx

utilizzo del disco: il 40% appx

Osservazione: molte transazioni in stato di 'inattività'

DETTAGLI DI PROVA:

10 macchina che funge da client che eseguono la richiesta di accensione pgbench sul server DB.

comando: pgbench -h -p 6541 -c 512 -j 16 -f pgbench_SchemaScript.sql -T 360 U Postgres prova

pgbench_SchemaScript.sql

\setrandom delta 0 100000 
insert into t1.emplog values(nextval('t1.employeeSeq'),:delta); 

1 DB server con pgbouncer installato (16 core, 24 GB di RAM)

+0

Prima di modificare qualsiasi cosa vorrei controllare l'utilizzo della CPU di pgbouncer. 10000 connessioni client sono molte e potrebbero essere troppe per un'applicazione a thread singolo. Anche le 500 connessioni attive sul server PostgreSQL sono molte, è necessario un hardware serio per prestazioni elevate. –

+0

L'utilizzo della CPU per questa casella è di circa il 30% durante l'esecuzione del test. La scatola ha 16 core e 24 GB di RAM. Noto che l'utilizzo del disco è anche intorno al 40%. Durante l'utilizzo di pgbouncer, noto molte transazioni "inattive" e credo che questo stia causando il basso tps, ma non sono sicuro di come evitarli. – jayanth88

+0

Inattivo quando si hanno 10000 client che dovrebbero essere occupati, non va bene. Quali test stai correndo? Tutte le transazioni sono chiuse quando hai finito con un test? In caso contrario, ciò potrebbe causare il ritardo poiché la connessione non è ancora disponibile per un altro client. Sia la cpu che il disco dovrebbero raggiungere il 100% o almeno avvicinarsi al 100%. –

risposta

0

Soluzione (parziale): aumentare la priorità della CPU del processo pgbouncer con renice.

default Linux scheduler è round-robin e affama il pgbouncer perché tratta tutti i processi altrettanto - e centinaia di processi postgres sopraffare unico processo pgbouncer.

0

So che questa è una vecchia domanda ma abbiamo riscontrato un problema simile e semplicemente eseguiamo più pgbouncer in Docker su porte diverse sullo stesso database e funziona correttamente. In questo modo puoi avere code diverse da diverse app su istanze separate di pgbouncer.

Problemi correlati