Postgresql perzisztens kapcsolat probléma

Sziasztok,

Postgresql -hez kapcsolódok php-ból perzisztens formában, apachos linuxos szerveren. A gondom a következő, pillanatok alatt felzabálja az összes rendelkezésre álló szálat, 150 -re van állítva a leköthető folyamat, úgyhogy azért egy darabig elég kellene neki lennie, de 1 user esetén is szinte minden csatlakozásnál újakat hoz létre, a régebbieket pedig nem zárja napok multán sem.

Találkozott valaki hasonlóval?

Hozzászólások

Szerintem te nem perzisztens kapcsolatot akarsz használni, ha egy userrel is állandóan újra csatlakozol. Phpból meg aztán főleg nem.

tartalomkezelőt, idáig megvoltam egész jól sima connectel is, de annyit olvastam róla hogy így sokkal gyorsabb lenne az adatbázishasználat, mivel nem építget ki új kapcsolatot csak megkeresgéli az előző szabad szálat. A legtöbb helyen azt írják, normális hogy így lezabálja a kapcsolatokat, csak azt nem értem milyen konfig kellene hozzá hogy elbírjon egy nagyobb szájtot.

http://bugs.php.net/bug.php?id=20237&edit=1

lehet marad a connect...

Nem config kell hozzá, hanem az a baj, hogy minden alkalommal új perzisztens kapcsolatot nyitsz, aminek nem sok értelme van, és teljesítménynövekedést sem eredményez:)

Magyarul: nem kell új kapcsolatot létrehoznod, hanem minden pg-s php függvény paraméterében hivatkoznod kell a kapcsolat azonosítójában a már meglévőre. És gondolnod kell az elszállt kapcsolatok kezelésére is.

Egyébként az alapeseteket feltételezve nem lesz valódi sebességnövekedés....

Csak futólag, ritkán használok php-t, viszont nem a vágyaim alapján képzelem el, hogy mükődik.

Nem keresi meg magától a szabadon lévő kapcsolatot. Hogyan is kereshetné meg, honnan tudhatná, hogy te a régit akarod használni, vagy egy újat nyitni? Hogyan lehetne ezt automatikusan lekezelni?

Ha !_egyszer_! megnyitottad, akkor utána a pg-s függvényeiddel közölni kell, hogy azt a kapcsolatot használják. Egyébként egyszerre akár többet is használhatsz.
Pl:

$connnumb = pg_pconnect("dbname=akarmi port=5432"); //nem kell minden script futásakor megnyitni
...

...
pg_query ( $connnumb, "sql query" )

Ezt a manual is jól leírja.

pedig pont errol szolna.
php.net

"Az állandó kapcsolatok olyan összeköttetések, melyek nem szűnnek meg, ha a szkripted futása befejeződik. Ha egy állandó kapcsolatot kérsz, a PHP ellenőrzi, hogy van-e már megegyező kapcsolat (ami még az előző kérésekből maradhatott meg), és ha létezik, akkor azt használja. Ha nem talál ilyet, létrehoz egy kapcsolatot. A megegyező kapcsolat azt jelenti, hogy ugyanaz a host és ugyanaz a felhasználói név és jelszó került felhasználásra."

Tyrael

Nincs szándékomban azzal kapcsolatban kérdezni, hogy mi értelme van a 128. php-s tartalomkezelőt megírni, amikor pl. ott van a drupal :)
Viszont a "connection pool" gondolom létezik PHP-ban is. Szerintem kb. rosszul használod a connection pool-t, nem zárod le a kapcsolatot.
Infóképpen egy kb. 200 párhuzamos user által hsznált java-s portál elmegy nagy átlagban 5 kapcsolattal, néha ha nagyon egyszerre csinálnak nagyon bonyolult dolgokat, akkor felmegy 30-ra. Szóval nem kell hozzá irgalmatlan nagy vas.

--
Gabriel Akos

nem olyan biztos. ha pl. van egy pool-om mondjuk 30 connection-nel, akkor a 200 egyszerre beeso user kozul nem csak az elso 30-at tudom kiszolgalni hibauzenet nelkul, hanem - mivel a poolom tud varni "egy kicsit" (beallithato) - ezert a tobbit is ki tudom szolgalni, max varnak kicsit. Extra kodolas nelkul. Tudod, enterprise, skalazhatosag :)
--
Gabriel Akos

Szerintem, ha egy user kezelést kell megoldani egy oldalon belül, arra 1 postgres kapcsolat kell. Nekem a pnconnect minden egyes meghívása ugyanazt a kapcsolatot találta meg -legalábbis mivel eszeveszett lassúlás nme volt, ezért nme is nyomoztam utána. Szóval lehet, hogy valami nem jó a pconnecteddel. Hanyas php-d van?
Reméljük valami veterán is ír, hogy megcáfoljon :)