Oznámení
mysql_connect new_link = TRUE
před 6 lety
- okovarik
- Člen | 2
Zdravím,
na starém projektu používám dibi verzi 1.2.
Začalo se mi stávat, že když aplikaci používá více lidí (nic zásadního, ale s databází se tam pracuje opravdu hodně), tak dostávám error „too many connections“.
Zjištoval jsem proč, když defaultně by mělo být povoleno
151 připojení a spojení by se po ukončení relace měli automaticky
uzavřít. (za předpokladu že nepoužívám mysql_pconnect což
nepoužívám)
Pak jsem ale našel, že v mysql_connection je 4. parametr $new_link nastaven
na TRUE – tzn. že se vytváří nové spojení i když už existuje
spojení se stejnými údaji.
Nepřišel jsem na to proč je to TRUE, nepomohlo by mi nastavit to na
FALSE?
Tak by teoreticky měl každý uživatel vytvořit pouze jedno spojení.
Díky za rady,
Otto Kovařík
před 6 lety
- Milo
- Nette Core | 1119
Nové spojení se ale vytvoří pouze při zavolání dalšího
dibi::connect()
. Když zavoláš dibi::connect()
jen
jednou během HTTP requestu, budeš mít jen jedno spojení.
před 6 lety
- okovarik
- Člen | 2
To jsem si taky říkal, ale možná to někde v aplikaci uteklo (je to hodně stará věc) a místo toho aby se ten connect volal jen jednou, tak možná je volán vícekrát. Což si taky určitě projdu a případně opravím, ale tím spíš vlastně nechápu proč tam ten TRUE je.
Přijde mi prostě divný, že aplikaci používá cca 30 lidí (hodně intenzivně ve stejnou dobu) a občas tam skočí too many connections.
Otázka taky je, jaký je na serveru limit, což zrovna zjišťuju.
Nebo může too many connections způsobovat i něco jiného?
před 6 lety
- Milo
- Nette Core | 1119
Je tam proto, aby se v případě potřeby dalo vytvořit více spojení do
databáze. Volání connect()
vícekrát je jinak chyba.
Too many connections je prostě moc spojení. Také bych zkontroloval, jestli se spojení uzavírá.
Jak je v té aplikaci Dibi použito? Jestli staticky, tak je dobré
dibi::connect()
s parametrem lazy => TRUE
provést
v nějakém centrálním bodě na začátku běhu aplikace, třeba
index
nebo bootstrap
a pak už jen volat
dibi::getConnection()
kde je potřeba.