Avatar billede snowball Novice
21. januar 2004 - 15:10 Der 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.

MySQL er installeret som beskrevet på http://www.geertsen.dk/articles.asp?id=7 og PHP er installeret som beskrevet på http://www.geertsen.dk/articles.asp?id=4

my.ini:

[mysqld]
basedir=C:/mysql
#bind-address=10.0.0.2
datadir=C:/mysql/data
#language=C:/mysql/share/your language directory
#slow query log#=
#tmpdir#=
#port=3306
skip-locking
set-variable    = key_buffer=16M
set-variable    = max_allowed_packet=1M
set-variable    = table_cache=64
set-variable    = sort_buffer=512K
set-variable    = net_buffer_length=8K
set-variable    = myisam_sort_buffer_size=8M
server-id    = 1

php.ini

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 90
max_input_time = 60
memory_limit = 8M

Hvad kan jeg gøre for at få det til at køre bedre !?

På forhånd tak.

Mvh.

Snowball
Avatar billede fangel Nybegynder
21. januar 2004 - 15:14 #1
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"...)

Morten
Avatar billede limemedia Nybegynder
21. januar 2004 - 15:16 #2
hvilken maskine snakker vi om (processor/ram) samt har du et kodeeksempel på en funktiond er tager mere end de 90 sekunder i eksekvering ?
Avatar billede jpvj Nybegynder
21. januar 2004 - 15:20 #3
Et vildt skud: Kører DNS på maskinen? Hvis ja, kører den korrekt?
Avatar billede snowball Novice
21. januar 2004 - 15:25 #4
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.

jpjv: Nej, der kører ikke nogen DNS på PC'en
Avatar billede limemedia Nybegynder
21. januar 2004 - 15:30 #5
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)

Laver maskinen noget andet ?
Avatar billede snowball Novice
21. januar 2004 - 15:40 #6
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?
Avatar billede dsj Nybegynder
21. januar 2004 - 15:49 #7
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.
Avatar billede dsj Nybegynder
21. januar 2004 - 15:53 #8
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 ??
Avatar billede snowball Novice
21. januar 2004 - 16:06 #9
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.
Avatar billede dsj Nybegynder
21. januar 2004 - 16:31 #10
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.
Avatar billede dsj Nybegynder
21. januar 2004 - 16:37 #11
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 :)
Avatar billede snowball Novice
21. januar 2004 - 17:36 #12
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.
Avatar billede dsj Nybegynder
21. januar 2004 - 17:40 #13
Hvor meget ledig RAM har du, når alt er startet?

Har du prøvet at køre de samme forespørgsler gennem mysql-klienten, altså uden om PHP'en? og er de i så tilfælde lige så langsomme?
Avatar billede dsj Nybegynder
21. januar 2004 - 18:02 #14
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?
Avatar billede 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.
Avatar billede dsj Nybegynder
21. januar 2004 - 21:32 #16
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.
Avatar billede limemedia Nybegynder
22. januar 2004 - 03:09 #17
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
Avatar billede 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.
Avatar billede 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.
Avatar billede Slettet bruger
22. januar 2004 - 03:36 #20
Og løsningen var at opgradere et underlibrary, som GD2 benyttede.
Avatar billede inglenook Praktikant
22. januar 2004 - 03:42 #21
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......
Avatar billede snowball Novice
22. januar 2004 - 13:50 #22
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.
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