Du ser Jag kör en webbplats som gör UFC förutsägelser och UFC resultat. På Fight Night, kan webbplatsen bli ganska upptagen, min tidigare höga var 18.000 besökare i 3 eller så timmar att striderna äger rum. Mitt delad hosting konto aldrig haft problem med denna belastning, åtminstone inte så långt som jag skulle kunna berätta. Men med UFC 77 på min nya dedikerad hosting konto min server träffade en tegelvägg. CPU: n var vid 100% och det fanns 200 apache processer alla tävlar om det tillgängliga CPU och minne. Omedelbart jag började leta efter orsaker och framför allt lösningar.
Tre dagar senare jag tror att jag har de flesta av mina answers.It är viktigt att veta att Go Daddy var inte fel, bad jag om en låda med vissa specifikationer och det är precis vad de gav mig, komplett med alla program som de sade. MySQL, phoP 4.3.9 och Apache 2.0.52. Så jag började leta (när servern lugnat ner) på vad som hände när en användare begärt en sida. Det första som jag märkte var att den nuvarande apache process skulle ta ca 5% CPU, det gjorde jag inte uppmärksamma hur lång tid det tog. Nästa sak jag noterade var att mysql också skulle ta betydande CPU, om så bara för en kort tid.
Det är viktigt att veta att under UFC 77 MySQL tog ca 50% CPU för hela hektisk period. Dags att söka efter några optimizations.For min webbplats, där det finns 20.000 besökare i 3 timmar och kanske 10 uppdateringar under den tiden, skulle caching naturligtvis vara till hjälp. Jag märkte att söka på nätet som apache har några cachning och ännu bättre en del min caching, men det inte anses produktionsfärdigt i 2.0.52 bygga som jag har, så jag kastas den idén ganska snabbt. Jag dock märka några saker när jag tittade på MySQL optimizations.
The viktigaste MySQL optimering som jag hittat är query_cache_size alternativet. Du förstår, MySQL har detta koncept av fråga caching, här är en enkel förklaring. Om jag gör en enkel fråga, saySELECT CUSTOMER_NAME från kunden där CUSTOMER_ID> 10 (jag vet, en dum fråga) Generellt databasen går igenom alla dess magi och återgår resultatet mängden av alla kunder namn som ID är större än 10. För denna fråga skulle det inte ta mycket lång tid, men ju mer komplexa frågan desto längre tid skulle ta.
Men med MySQL Query caching, resultatet av denna fråga skulle hållas i minnet, tillsammans med frågan själva, vilket innebär att nästa gång samma fråga kördes databasen skulle bara kontrollera att inga tabeller i frågan har ändrats och sedan slå upp resultatet i minnet och ge det tillbaka. Detta är mycket snabbare. MySQL har fråge caching aktiverad som standard, men query_cache_size variabeln är satt till 0, i huvudsak att inaktivera funktionen. Att slå på den du måste göra: query_cache_size = 64M i my.cnfNote: Jag ökade också min query_cache_limit till 4M och min thread_cache_size till 384.
Det finns många andra MySQL alternativ som du kan ställa in för att förbättra prestanda, leta efter en bra MySQL bok eller kanske jag ska lägga upp några av dem på min öppen källkod depå blogg på www.open-source-depot.com/blog.After ställa dessa alternativ i my.cnf måste du starta om MySQL, är att jag är typ av otålig och jag gillar inte omstart processer jag gick till kommando MySQL linje och ställa in globala alternativ. Av någon anledning 64M inte fungerade för mig där, så jag använde den utökade (bytes) versioni.
e mysql> SET GLOBAL query_cache_size = 60000000, för att se vad som är inställd, gör en: mysql>