11

sto lavorando all'applicazione opensource basata su java i.e xwiki. Insie hibernate.cfg.xml posso vedere il valore di parametrs connection.pool_size e statement_cache.siz come 2 (per ciascuno). La mia applicazione avrà il carico massimo di 100 utenti al momento. Ora la mia domanda è cosa dovrebbe essere la dimensione del pool di connessione ideale per questo. Per me la taglia 2 sembra molto meno. Se 100 utenti si connettono alla volta 98 ​​gli utenti devono attendere per la connessione rilasciata? Devo mantenere la dimensione del pool di connessione di 100 nel mio caso?Pensare dietro la decisione della dimensione del pool di connessione del database

sto usando Microsoft SQL Server.

Oltre a questo esiste un limite per le dimensioni massime del pool di connessione. Dipende da webserver (tomcat nel mio caso) o datastore vendor (ms sql server)?

+0

Pensa anche a quante connessioni il server può supportare. – Thilo

+0

Q1: quante CPU hai ?, Q2: le tue query sono relativamente orientate all'IO (OLTP - latenza) o alla CPU pesante (SORT, GROUP, analytics)? – jasonk

+0

Attenzione che il pool può costare in termini di memoria –

risposta

3

Se una richiesta tipica impiega il 50% del proprio tempo per eseguire calcoli e il 50% per la connettività del database, potrebbero essere necessarie solo 50 connessioni nel pool. Naturalmente la tua applicazione dovrebbe rilasciare la connessione db il prima possibile.

In generale, mantenere una connessione non è costoso per un database (mentre la creazione di una nuova è piuttosto costoso). Non dovrebbe essere un problema mantenere le dimensioni abbastanza alte.

È possibile impostare

  • massima dimensione del pool di 100
  • preferita dimensione del pool di 50
  • e un timeout di 5 minuti per connessioni in pool.

non ho familiarità con Microsoft SQL server, ma credo che la sua max pool limit is 100

Tomcat andrà bene con questo numero di dimensioni della piscina.

+0

Grazie a imran per la risposta. Come hai detto: -Se una tipica richiesta spende il 50% del suo tempo facendo calcoli e il 50% sulla connettività del database potresti avere solo 50 connessioni nel tuo pool. Cosa succede se tutti i 100 utenti hanno bisogno della connessione contemporaneamente. Sono d'accordo nella maggior parte degli scenari, non sarà il caso. È uno scenario peggiore. Ma penso che il calcolo che hai detto presupponga che queste prime 50 richieste richiederanno la connessione nel primo 0,5 secondi e riposeranno nel successivo 0,5 secondi. DESTRA? –

2

È necessario valutare il requisito di concorrenza dell'applicazione, il tempo di funzionamento del database e anche il numero di connessioni che il server (o il distributore db) può supportare.

Così 100 gli utenti non significa che è necessario un pool di connessioni con la dimensione 100.

0

fate attenzione che la piscina può costare memoria per nulla i f non utilizzato. La configurazione del pool dipende molto da dove si trova il collo di bottiglia:

CPU, memoria, disco, rete, query di database complesse, alta concorrenza, ... molti di quelli?

Le dimensioni del pool di default sono spesso da 5 a 10. Prima di tutto assicurarsi di avere un problema con il database. Prova estremi come 2 o 30 sotto carico artificiale e vedi come si comporta. Penso che i collegamenti forniti da @ vlad-mihalcea siano piuttosto interessanti.