![]() |
Har lite problem med en webbplats som vid vissa operationer tar väldigt långt tid på sig. Kan handla om 10-20 sekunder. Det är inga uppenbara fel i koden och har försökt felsöka med att sätta ut lite alerts här å där. Men det är så mycket kod att det blir väldigt jobbigt att ta reda på felet.
Vet att man i andra språk som ex Java kan köra koden steg för steg och se vad som går segt. Men det är ju inte webbaserat, vilket kan skapa lite problem. Finns det något sätt att göra detta i PHP? Jag är inte så hoppfull men lika bra att chansa om någon vet. Ha de fint! |
Arbetar din webbplats mot tunga databaser?
|
Indexera din databas.. Det gör underverk.
Om du använder MySQL, så kör EXPLAIN på frågorna. |
Det är egetnligen inga tunga databaser och tror själv det ligger i phpkodens if satser någonstans. Känns som att när jag kör $_GET och $_POST så segar det. Vet inte om det är att scripten som jag tar emot datan med förutsätter att GET/POST är deklarerade, men så är inte alltid fallet. Kanske kan hjälpa att använda sig mer av isset innan. Vad tror ni om det?
Indexera databasen har jag inte tänkt på, det kan mycket väl snabba upp det lite. Även om jag inte tror att databasen är den stora boven! |
Låter mysko. Jag har inga erfarenheter av att $_GET eller $_POST skulle sega ner det för en. Det kanske finns några skumma loopar som hela tiden ställer frågor mot databasen? Det skulle krävas tiotusentals if-satser om de skulle vara boven i dramat. Till 95% skulle jag vilja säga att problemet ligger i tabellerna och sql-frågorna. Kör indexering och kontrollera sql-frågorna så du inte ser något skumt.
|
Ok, men då vet jag iallafall! tack för hjälpen, får ta mig en titt på sqlen.
|
Ett par isset lär inte göra någon märkbar skillnad.
Förmodligen är det just några SQL-frågor. Det låter som om det är en färdig programvara du använder och isåfall har du förmodligen också en databas-klass där du kan skriva ut svarstiderna för frågan. Har kontroll över sql-servern kan du annars slå på slow query log. Är det mot förmodan några dumheter i PHP-koden eller något i den stilen och du dels har väldigt stor kodbas och sedan inte har någon koll på var felet kan finnas kan du använda en PHP debugger. Två gratis sådana är xdebug (xdebug.org) och DBG (dd.cron.ru/dbg). |
Om du ligger på webhotell finns det två saker att tänka på. För det första är många mysql-installationer felkonfigurerade och måste slå upp dns hela tiden. Det märker man på att det tar upp till tio sekunder innan sidan laddas.
Nästa grej som kan spöka är överlastade servrar på webhotellen. Dina frågor kastas ut ur cachen och måste läsas in igen. Det tar också tid. Kolla hur snabbt det går lågtrafiktid, typ kl 6 söndag morgon. |
Ok, har egen server dedikerad men problemet kanske kan vara att jag har dåligt med minne iden. Har en del sidor och ligger bara på 1gig i minne nu. Kanske inte är så bra :D
|
Jag tror faktiskt inte 1GB minne är ditt problem. Som flera sagt tidigare; kolla dina SQL satser. och när du gjort det så kollar du dina SQL satser och sedan dina SQL satser. Det är en mycket stor sannolikhet att ditt problem finns där.
Och et annat generellt tips på vägen: Optimera aldrig för vad du tror, optimera det du vet är ett problem. |
Vad du är ute efter är en Profiler.. Med en profiler kan du se vilka funktioner / vilken rad som äter tid. Det är dock avancerade verktyg och du bör vara mycket kunnig i både flinux, php och apache för att få till det.
Men i ditt fall är det säkert en SQL-fråga som spökar. Vad du kan göra är att ersätta alla dina mysql_query mot en egen global funktion där du loggar alla frågor + response time. |
Det är en onödig liten missuppfattning att det inte går att debugga PHP likt andra programmeringsspråk. Kolla in http://xdebug.org/. Går att integrera i Eclipse/PDT. Funkar finfint. Om du vill betala så har Zend Framework integrerade produkter för ca 300€ om jag inte minns priset helt galet. (Dock är Zend IDE lite långsammare än PDT trots att de bygger på samma bas av Eclipse).
|
Varför jag inte tror det är en sql fråga är för att det inte görs så mycket frågor i koden. Är mest phpkod för bildbehandling vilket jag tror käkar upp minne.
Ska kolla lite på xdebug som du säger, tack! |
Citat:
|
Citat:
Grundtipset består dock - optimera bara det du vet behöver optimeras. Jobba inte i blindo! |
Då var det inte Mysql som var problemet denna gång.
För den som ändå vill optimera mysql rekommenderas följande script: Mysql Tuning Primer |
Citat:
Det kan faktiskt lösa ett annat problem med att min smtp server inte tar emot vissa mail och är allmänt seg, hoppas det! |
Citat:
|
Om det nu handlar om problem vid GET/POST så kan det handla om enormt ogenomtänkta regexp:ar som loopar på något sätt. Med dåligt skrivna regexp:ar kan du utan vidare få php att time-out:a vid medelstora textmängder. Men antagligen och mer sannolikt är att det är sql-frågor som är dåligt genomtänkta (loopar) eller inte är indexerade.
|
Gör du bildbehandling varje gång sidan laddas? Bildbehandlingen bör bara göras en gång och sedan cachas. Förslagsvis gör du behandlingen redan när bilden laddas upp.
|
Alla tider är GMT +2. Klockan är nu 04:52. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson