Codeigniter "nematomas" DB nustatymas

2014-08-20

Codeigniter kaip frameworkas yra neblogas greitam startui, bet dirbant su didesnių duomenų bazių projektais, teko pastebėti kad MySQL neatlaiko apkrovimų. Pasiaiškinus, pasirodė viskas dėl vieno default nustatymo.

Tikslesnė problema, su kuria susidūriau keliuose projektuose su Codeigniter, tai kad serveryje likdavo kalbėti MySQL prisijungimai, kurie lyg ir jokių veiksmų neatliko, bet užpildė prisijungimų vietą, kur maksimalus prisijungimų skaičius nustatomas parametro max_connections ir pagal nutylėjimą lygus 50. Būtent tas skaičius buvo pasiekiamas tų ne aktyvių Idle connections, ir serveris tada sakydavo "Sorry, daugiau užklausų nepriimsiu".

Faile config/database.php dažniausiai nustatome serverį, vartotoją ir slaptažodį. Bet nustatymų yra ir daugiau. Šiuo atveju mums svarbus parametras pconnect = TRUE. Ką jis daro, tai vietoje paprasto prisijungimo naudoja persistent - o apie jį galima pasiskaityti tokią informaciją iš Stackoverflow:

...if your script terminates unexpectedly in the middle of database operations, the next request that gets the left over connection will pick up where the dead script left off....
If the dead script locked tables, those tables will remain locked until the connection dies or the next script that gets the connection unlocks the tables itself.

Realiai, turint didelės apkrovos projektą, tikrai galima susidurti su tuo, kad connection'ai lieka, lentelės užlokinamos ir tada viskas tiesiog banaliai pakimba.

Taigi, pakeitęs šį vieną parametrą iš true į false, išsprendžiau kabančių prisijungimų problemą ir serveris nebelūžo.

Tiesa, persistent connections tema yra kiek platesnė - jie egzistuoja ne be priežasties. Tad savo projektuose patys nuspręskite, koks prisijungimo būdas tinkamas labiau.


(Mailchimp sistema jums atsiųs patvirtinimo laišką, nepamirškite patvirtinti)


Komentarų: 1

Arnas (2014-08-21 12:10)

Teko susidurti su tuo, tikrai nerealus dalykas, ieškant problemos teko perskaityti nemažą straipsnių paketą, bet tikriausiai viskas remiasi į patirties trūkumą, nes net nebuvo įtarimo, kad problemos reik ieškot database faile.





Naujausi PHPpamokos.lt online-kursai

23 EUR (79.41 Lt)
23 EUR (79.41 Lt)
23 EUR (79.41 Lt)
Nuo Laravel 4 prie Laravel 5
Povilas Korop

23 EUR (79.41 Lt)
MySQL: nuo pradmenų iki optimizavimo
Povilas Korop
23 EUR (79.41 Lt)
OOP: objektinis programavimas su PHP
Povilas Korop
23 EUR (79.41 Lt)
Kaip kurti Wordpress pluginus?
Arūnas Liuiza

23 EUR (79.41 Lt)
PHP online-kursas pradedantiesiems
Povilas Korop