21. januar 2004 - 15:10Der er
21 kommentarer og 1 løsning
MySQL/PHP har utrolig dårlig performance
Hej.
Dette spørgsmål handler om både MySQL og PHP (tror jeg), men da man jo som bekendt ikke må oprette det samme spørgsmål i flere kategorier, endte det her. Beklager hvis det ender med at være et PHP problem!
Jeg har i en testopstilling installeret MySQL 4.0.17 og PHP 4.3.3 på en Windows Server 2003. Godt nok er PC'en ikke verdens største, men systemet har en utrolig dårlig performance. Fejlen vises ved at beskeden "Fatal error: Maximum execution time of 90 seconds exceeded" konstant kommer når man benytter PHP sider. Som standard står max_execution_time jo til 30 i php.ini, men jeg har så efterfølgende sat den op til 90 sekunder. Jeg føler bare ikke det er den rigtige løsning og at det bare udskyder problemet. Da den stod på 30, fik jeg f.eks. fejlen ved bare sådan en ting som at vise serverens "runtime informaion" i phpmyadmin.
er det "Show MySQL runtime information" ? - for den laver umidbart ikke noget "tungt"... ("SHOW STATUS") (v 2.3.3pl1)... så kan ikke forstå at netop den side skulle lave det (mange af de andre sider laver noget langt "tungere"...)
dea_pg: På phpmyadmin forsiden er der et link der hedder "Vis MySQL runtime information" og det er der jeg bl.a. får fejlen.
lars-jensen: Det er kun en 300MHz med 128MB RAM, men umiddelbart er der OK med ressourcer den kan bruge af. Mht. et eksempel på kode, så brugen af phpmyadmin nok til at fejlen kommer.
Jeg testede engang en alfa/beta version af mySQL databasen der åd alt for meget hukommelse. Prøv evt i task manageren at se hvor meget den snupper og hvor meget der er ledigt. Ved ikke med Windows 2003'eren, men 128mb ram lyder af meget lidt (og ram en uhyggelig billig flaskehals at have)
lars-jensen: Det er som sagt kun i en testopstilling, så derfor er PC'en ikke ret stor. Er godt klar over at PC'en i sig selv ikke er optimal at køre en Windows server på, men derfor undrer det mig stadig meget at det kører SÅ dårligt.
PC'en laver ikke noget andet af betydning.
Er der noget man generelt kan gøre for at optimere ens MySQL og PHP? Nogle indstillinger der skal ændres lidt eller noget i den stil?
128 MB RAM er AFGJORT for lidt - du kan kun forvente den dårligste performance med den mængde. Windows Server kører allerede på "nødblus" med den mængde og levner ikke meget til MySQL. Database-servere er noget af det mest krævende du kan putte på en maskine, og har de ikke adgang til den nødvendige RAM, begynder de at swappe med ELENDIG performance til følge. Windows i sig selv er ringe til at køre med en lille mængde RAM. Hvis du vil have bedre performance ud af din MySQL-server, bør du sætte 512 MB i maskinen, måske kan du mærke en forskel ved bare 256 MB. Vil du ikke ofre i mere RAM, er du nødsaget til at skifte til Linux (uden GUI), som kan klare sig med mindre RAM end Windows kan.
Prøv evt. at se hvad der sker i task-manageren, mens du sætter MySQL og PHP på arbejde. Hold øje med CPU-belastningen, Mem usage, I/O Read Bytes, samt I/O Write Bytes. De sidste to bør holde sig temmelig meget i ro. Hvor meget siger Mem usage ??
dsj: Er som sagt godt klar over det ikke er meget den har at arbejde med, men derfor mener jeg alligevel ikke at det bude køre SÅ dårligt!
Hvis du tænker på hvor meget mysqld-nt.exe bruger når jeg henter noget fra databasen, så bruger den ikke mere end lidt over 2MB RAM og stort set ingen CPU kraft. Generelt er ca. 1/4 af den fysiske RAM fri når det kører.
Jeg tror ikke på at den ikke swapper. Hvad sker der med Mem usage, I/O Read Bytes, samt I/O Write Bytes når der arbejdes, blinker harddisken-dioden ?? Hvis den swapper, jo, så er det muligt at den kører så dårligt.
CPU er ikke begrænsningen, men RAM og det kan netop bekræftes, hvis CPU-belastningen ligger på nogle få procent, mens fri RAM ligger på et minimum.
Prøv også at observere "Page faults" i Task-manageren. Hver gang page faults tæller op betyder det, at de nødvendige data for den kørende proces ikke fandtes i RAM og er blevet læst fra harddisken i stedet. Hvis Page faults bevæger sig mens MySQL og PHP'en arbejder, betyder det at der swappes.
Hvis ikke alle disse tegn som jeg nævner er til stede, ja så tager jeg fejl and so be it, men prøv lige at se efter de oplysninger jeg har nævnt i Task-manageren. Per definition er 128 MB for lidt til Windows Server, som derfor bliver nødt til at swappe en gang imellem.
Når der nævnes alvorlige performance-problemer, må man starte fra en ende af, og swapping er altså performance' fjende nr. 1. Hvis du kan redegøre for at der absolut ikke swappes, må vi kigge et andet sted :)
dsj: Nu har jeg prøvet at holde lidt øje med forbruget af diverse ting vedr. MySQL processen. Jeg skrev værdierne ned, åbnede "Vis MySQL runtime information" siden i phpmyadmin, og skrev derefter værdierne ned igen. Jeg holdte øje med følgende værdier:
CPU time Mem usage Peak mem usage Page faults Virtual memory size I/O read bytes I/O write bytes
Det eneste der ændrede sig var at den efter jeg havde åbnet siden, brugte 164KB mindre RAM (mem usage) og page faults tallet var 7 højere end det var før jeg loadede siden. De resterende værdier ændrede sig ikke.
De observationer du foretager skal selvfølgelig gøres ved en side i phpmyadmin der fejler - de værdier du nævner, er de fra en side der timede ud?
Synes godt om
Slettet bruger
21. januar 2004 - 21:07#15
Jeg synes det er utroligt at Windows kræver så meget af maskinen.
Jeg havde for nylig en server med en 100 MHz 486DX4 med 48 MB RAM til at køre Debian Linux. Den var mailserver for min indkommende post og webserver, hvor jeg hostede nogle PHP/MySQL-sider for et netbaseret rollespil. Maskinen kørte klippestabilt ind til strømforsyningen brændte sammen i slutningen af oktober. Jeg oplevede aldrig en timeout på maskinen, selvom jeg gerne indrømmer, at den var i underkanten af en fornuftig størrelse. Min nye server med en 333MHz Celeron og 192MB er meget hurtigere i optrækket.
Windows er for det tungere i kraft af altid at have GUI kørende, det kræver både CPU og især RAM.
Hertil kommer at Windows er elendig til at styre sin swapping. Man kan altid være sikker på at Windows en gang imellem står og swapper - også selvom det absolut ikke er nødvendigt. Jeg har tit oplevet på min bærbare med 1 GB RAM, at XP lige pludselig står og swapper kraftigt i 5 minutter - helt igennem uacceptabelt i et server-miljø efter min mening.
sandbox >> går ikke ud fra du kørte X med Gnome eller lign på din 486 maskine... Jeg installerede det engang på en P2 450maskine med 256mb ram, hvor maskinen var ubrugelig i hastighed. Win2000 er på maskinen nu, med en ok hastighed...
Jeg går absolut ind for linux/bsd operativ systemer m.v., men man skal passe på hvad man sammenligner
Synes godt om
Slettet bruger
22. januar 2004 - 03:31#18
lars-jensen: Du har helt ret. Jeg havde slet ikke installeret X på maskinen.
Den føromtalte 333MHz-maskine med 192MB RAM har jeg dog brugt som desktop indtil for ca et halvt år siden. Da kørte jeg KDE, og den var måske lidt tid om at starte op, men i brug var den ganske acceptabel. Og det var ikke engang fordi jeg havde skruet ned for KDEs eye-candy. Og den skulle endda samtidig være mail- og webserver, for jeg havde kun den ene maskine på det tidspunkt.
I perioden 2000 til midt i 2002 brugte jeg en 233MHz K6 med 160MB til den samme opsætning. Det kørte også fint.
Synes godt om
Slettet bruger
22. januar 2004 - 03:35#19
Og for lige at komme tilbage til emnet:
Er det kun når der røres ved databasen, eller kører alt PHP langsomt? Hvis det er alt, kan der måske være et af de libraries, som PHP bruger, der er fejlbehæftet. Jeg har lige hjulpet en anden idag, som havde problemer med at når GD2 var installleret, blev ALT PHP vildt sløvt.
Synes godt om
Slettet bruger
22. januar 2004 - 03:36#20
Og løsningen var at opgradere et underlibrary, som GD2 benyttede.
snowball. Har selv installeret mySQL paa en 700MHz laptop (Win2K) med 312Mb RAM. Efter installation tager maskinen ca. dobbelt saa lang tid om at boote, og det er selvom jeg har de-aktiveret mySQL i opstart. Tilsyneladende er mySQL ikke gode venner med Windows. Koerer det paa RH9 uden nogen peroblemer overhovedet. Bedste forslag er nok at gaa over til Linux......
Tror ikke jeg vil gøre ret meget ved det da det netop er blevet besluttet at PC'en skal fornyes, så det hjælper nok en hel del på det ;)
Tak for jeres deltagelse i spørgsmålet.
Synes godt om
Ny brugerNybegynder
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.