23. december 2008 - 08:31Der er
6 kommentarer og 1 løsning
MySQL too many connections
Hej
Jeg er ved at skrive en web applikation hvor jeg benytter omkring 15 klasser (blandt andet web controls) der hver laver en connection til en mysql server.
Klasserne får ikke lukket connections, og lynhurtigt stiger antallet af connections til de 100 jeg har sat begrænsningen til. Jeg benytter .NET connector v/ 5.2.5.
Jeg har indsat en finalizer i hver af klasserne der lukker den pågældende connection, men der er jo ingen garanti for hvornår den bliver kørt, hvilket også i den grad kommer til udtryk.
Er der et eller andet trick man kan benytte sig af?
Gammeldags håndværk? Åben forbindelsen lige før du skal bruge den, og luk den lige bagefter. Så bliver det altid gjort (fx try-catch-finally). Hvis dit framework ikke tilbyder en fornuftig connection-pooling, så laver du en selv (eller finder een, der har gjort det).
Og hvis jeg benytter en connection fra flere funktioner laver jeg en ny connection fra hver funktion. Det var dog noget bøvl :) Men jo, .net connectoren understøtter pooling. Jeg vil lige gøre et forsøg.
Finalizere er i det hele taget rigtig dårlige at bruge. Det kan sætte hastigheden på garbage collection 50-100 gange ned hvis man bruger dem konsekvent på sine objekter!
lav et såkaldt 'data' lag i strukturen... dvs. nogle klasser/objecter som er de eneste som snakker med databasen -- funktioner som udfører alt arbejdet og som lukker når de er færdige...
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.