Avatar billede rentondk Nybegynder
14. november 2003 - 18:22 Der er 17 kommentarer

Updates og "too many connections"

Jeg har et stort problem med, at jeg ofte får "too many connections" fra MySQL serveren.

Problemet ser ud til at være, at der sker alt for mange updates på den samme attribut i en tabel. De forskellige queries kommer så i kø for at opdatere, og det kan så optage samtlige connections.

Det er en simpel update query. Et eksempel:

UPDATE spil SET hits = 56 WHERE id = 1

Giver overstående teori mening? Er der noget man kan gøre? Foruden at droppe sin update query :-)

Er der andre klassiske kilder til "too many connection" ? Eller måder at håndtere det på ...
Avatar billede arne_v Ekspert
14. november 2003 - 18:31 #1
Klassisk løsning er: connection pool
Avatar billede arne_v Ekspert
14. november 2003 - 18:31 #2
Men hvad er applikationen lavet i ? PHP ?
Avatar billede rentondk Nybegynder
14. november 2003 - 18:38 #3
Den er lavet i PHP.

Så det kan godt være den UPDATE, som er skyld i problemet?
Avatar billede arne_v Ekspert
14. november 2003 - 18:41 #4
Hvis du ikke bruger connection pool kan du få den fejl ved enhver type SQL.

Er databasen belatstet ? Ellers var det jo en mulighed at øge antallet
af connections ?
Avatar billede morw Nybegynder
14. november 2003 - 18:45 #5
mysql_pconnect() i stedet for mysql_connect()
Avatar billede rentondk Nybegynder
14. november 2003 - 18:47 #6
Databasen sidder kun med denne applikation og er rimelig belastet.

Hvad sker der, hvis antallet af forbindelser sættes for højt? Kan man så ikke komme ud for at serveren til databasen ikke har nok hukommelse til at lave flere threads/connection?

Er løsningen ikke at lave INSERTS for hver UPDATE også lave et Cron job, som løber gennem alle disse rækker fra INSERTSene og så lave en enkelt UPDATE hver nat?
Avatar billede arne_v Ekspert
14. november 2003 - 18:50 #7
Jo.

Måske. Jeg synes dog at det lyder som en høker løsning.
Avatar billede rentondk Nybegynder
14. november 2003 - 18:52 #8
Jeg er blevet rådet fra at anvende mysql_pconnect(). Der skulle nemt kunne komme for mange åbne connections til en database, da MySQL ikke har en timer som man kan sætte for, hvor længe en connection må være idle.
Avatar billede rentondk Nybegynder
14. november 2003 - 18:55 #9
Det er vel teknisk set umuligt at lave uendelig mange updates på samme attribute. Der vil altid komme en kø, som vil forsinke de forskellige queries, hvilke vil gøre, at der vil blive flere connections på én gang. Det er vel også derfor, at meget stor systemer har store batch jobs, som der køres om natten.
Avatar billede arne_v Ekspert
14. november 2003 - 19:08 #10
Ja men med en connection pool venter requestene i applikationen (PHP).
Avatar billede rentondk Nybegynder
14. november 2003 - 19:41 #11
Meget smart. Hvordan laves en connection pool i f.eks. PHP?
Avatar billede arne_v Ekspert
14. november 2003 - 19:44 #12
Ingen anelse.

Jeg programmerer i mange programmerings-sprog - men ikke PHP (har en bog
ståend epå hylden men har ikke fået læst den).
Avatar billede morw Nybegynder
14. november 2003 - 20:51 #13
Jeg kan kun råde dig til at bruge mysql_pconnect(). Jeg har set mange store sites der bruger dette med 100-vis af hits per sekund
Avatar billede rentondk Nybegynder
15. november 2003 - 10:08 #14
Men med mysql_pconnect() er der vel stadig et maksimalt antal connections, som stadig kan overskrides pga. queries der hænger? Det man får ud af at anvende mysql_pconnect() er vel, at man undgår overheadet i at åbne forbindelsen.
Avatar billede arne_v Ekspert
15. november 2003 - 13:53 #15
Hvis mysql_pconnect opfører sig som en connection pool gør, så er der
en max. size på pool.

Når den nåes så vil requests for en connection vente indtil der
frigøres en de kan bruge.

Jeg kender ikke PHP og mysql_pconnect, så ...
Avatar billede arne_v Ekspert
30. november 2003 - 23:13 #16
Lukke tid ?
Avatar billede arne_v Ekspert
30. november 2003 - 23:14 #17
Hvis der er nogen som du føker har hjulpet dig så bed dem ligge et svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester