*   >> Lezen Onderwijs artikelen >> tech >> web development

Een MySQL Prestatie Tip U moet See

I lopen ongeveer twintig websites, voorheen verspreid over twee shared hosting accounts. Vorige maand mijn gastheren, zowel zelfstandig sluit me voor meer dan het gebruik van de CPU. Eerlijk genoeg, heb ik niet denk dat ik misbruik maakte van de rekeningen, maar ik heb niet de regels te maken. Ik begon meteen op zoek naar alternatieven en besloten om op Go Daddy dedicated hosting. De prijs was goed en voor iets meer dan $ 100 per maand kreeg ik een leuke server met 2 GB geheugen, 500 GB maandelijkse bandbreedte, een snelle CPU al mijn zelf, om misbruiken zoals ik zie fit.

Fast uit naar UFC 77. Je ziet Ik run een website die UFC voorspellingen en UFC resultaten doet. Op Fight Night, kan de site erg druk, mijn vorige hoog was 18.000 bezoekers in de 3 of zo uren dat de gevechten plaatsvinden. Mijn shared hosting account nooit een probleem gehad met deze belasting, althans niet zo ver als ik kon zien. Echter, met UFC 77 op mijn nieuwe dedicated hosting account mijn server raakte een bakstenen muur. De CPU was op 100% en er waren 200 apache processen alle strijden om de beschikbare CPU en het geheugen.

Onmiddellijk begon ik op zoek naar redenen en nog belangrijker oplossingen. Drie dagen later denk ik dat ik de meeste van mijn answers.It is belangrijk om te weten dat Go Daddy was geen schuld, ik heb gevraagd om een ​​doos met bepaalde specificaties en dat is precies wat ze me gaven, compleet met alle software die ze gezegd. MySQL, phoP 4.3.9 en Apache 2.0.52. Dus ging ik op zoek (als de server gekalmeerd) aan wat er gebeurde wanneer een gebruiker een pagina opgevraagd.

Het eerste wat mij opviel was dat de huidige apache proces ongeveer 5% CPU zou nemen, ik heb geen aandacht aan hoe lang het liep. Het volgende wat ik merkte was dat mysql ook belangrijke CPU zou nemen, al is het maar voor een korte periode van tijd. Het is belangrijk om te weten dat tijdens UFC 77 MySQL nam ongeveer 50% CPU kracht voor de hele drukke periode. Tijd om te zoeken naar bepaalde optimizations.For mijn plaats, waar 20.000 bezoekers in 3 uur en 10 misschien updates gedurende die tijd zou caching uiteraard nuttig zijn.

Ik merkte zoeken op het web dat apache heeft een aantal caching en zelfs beter wat min caching, maar het wordt niet beschouwd als de productie klaar in de 2.0.52 build die ik heb, dus ik weggegooid dat idee vrij snel. Ik heb echter wel een aantal dingen opmerken toen ik keek naar MySQL optimizations.The belangrijkste MySQL optimalisatie die ik vond is de mogelijkheid query_cache_size. U ziet, MySQL heeft dit concept query caching, hier is een simpele verklaring.

Als ik een eenvoudige vraag, saySELECT customer_name van de klant, waar customer_id> 10 (ik weet het, een domme vraag) In het algemeen de database gaat door alle van de magie en keert terug het resultaat verzameling van alle klanten namen die is id groter zijn dan 10. Voor deze vraag zou het niet erg lang duren, maar hoe complexer de vraag hoe langer het zou duren.

Echter, met MySQL-query caching, het resultaat van die vraag zou worden in het geheugen bewaard, samen met de vraag zelf, wat betekent dat de volgende keer dezelfde vraag werd de database draaien gewoon zou controleren dat geen tafels in de query zijn gewijzigd en vervolgens opzoeken het resultaat in het geheugen en geef het terug. Dit is veel sneller. MySQL heeft vraag caching standaard ingeschakeld, maar de query_cache_size variabele is ingesteld op 0, in wezen de functie uitschakelen. Aan te zetten moet je doen: query_cache_size = 64M in my.

cnfNote: Ik verhoogde ook mijn query_cache_limit tot 4M en mijn thread_cache_size tot 384. Er zijn vele andere MySQL opties die u kunt instellen om de prestaties te verbeteren, op zoek naar een goed boek of MySQL misschien zal ik een aantal van hen op mijn open source depot blog op www.open-source-depot.com/blog.After instellen van deze opties in my.cnf plaatsen moet u MySQL opnieuw starten, is dat ik ben soort ongeduldig en ik hou niet van het herstarten processen Ik ging naar de MySQL command line en stel de globale opties.

Om een ​​of andere reden de 64M werkte niet voor mij daar, dus ik gebruikte de uitgebreide (bytes) versioni.e mysql> SET GLOBAL query_cache_size = 60.000.000, om te zien wat er te stellen, doet u: mysql>

Page   <<       [1] [2] [3] >>
Copyright © 2008 - 2016 Lezen Onderwijs artikelen,https://onderwijs.nmjjxx.com All rights reserved.