Versnel uw website met MySQL Query Caching
Een van de beste manieren om uw webtoepassing te versnellen, is querycaching in uw database in te schakelen, waarmee veelgebruikte SQL-query's in het cachegeheugen in de cache worden opgeslagen voor vrijwel directe toegang door de volgende pagina die hetzelfde verzoek doet.
De reden dat deze methode zo krachtig is, is dat je geen enkele wijziging in je webtoepassing hoeft aan te brengen, je hoeft alleen maar een beetje geheugen op te offeren. Dit gaat niet al je problemen oplossen, maar het kan zeker geen kwaad.
Opmerking: als uw toepassing tabellen regelmatig bijwerkt, wordt de querycache voortdurend verwijderd en krijgt u hier niet veel of enig voordeel van. Dit is ideaal voor een toepassing die meestal tegen de database leest, zoals een WordPress-blog. Dit werkt ook niet als u op gedeelde hosting draait.
Schakel Caching in terwijl Server wordt uitgevoerd
Het eerste dat u wilt doen is ervoor zorgen dat uw installatie van MySQL ondersteuning voor query-caching beschikbaar heeft. De meeste distributies doen dat, maar je moet het toch controleren.
U wilt deze opdracht uitvoeren vanaf uw MySQL-console, die u laat weten of query-caching beschikbaar is.
mysql> toon variabelen zoals 'have_query_cache'; + ------------------ + ------- + | Variable_name | Waarde | + ------------------ + ------- + | have_query_cache | JA | +------------------+-------+
Vergis u niet dat dit betekent dat query-caching daadwerkelijk is ingeschakeld, omdat de meeste hostingproviders dit standaard niet inschakelen. Vreemd genoeg had mijn Ubuntu Feisty-installatie het al mogelijk gemaakt ...
Vervolgens moeten we controleren of query-caching is ingeschakeld. We moeten meer dan één variabele controleren, zodat we net zo goed alles tegelijk kunnen doen door te controleren op de variabele query%
mysql> toon variabelen zoals 'query%'; + ------------------------------ + --------- + | Variable_name | Waarde | + ------------------------------ + --------- + | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 8388608 | | query_cache_type | AAN | | query_cache_wlock_invalidate | UIT | | query_prealloc_size | 8192 | +------------------------------+---------+
Dit zijn de belangrijke items in de lijst en wat ze betekenen:
- query_cache_size - Dit is de grootte van de cache in bytes. Als u deze waarde instelt op 0, wordt caching effectief uitgeschakeld.
- query_cache_type - Deze waarde moet AAN of 1 zijn om query-caching standaard in te schakelen.
- query_cache_limit - Dit is de zoekopdracht met de maximale grootte (in bytes) die in de cache wordt opgeslagen.
Als de waarde query_cache_size is ingesteld op 0 of u deze alleen wilt wijzigen, moet u de volgende opdracht uitvoeren, waarbij u er rekening mee houdt dat de waarde in bytes is. Als u bijvoorbeeld 8 MB aan de cache wilt toewijzen, gebruiken we 1024 * 1024 * 8 = 8388608 als waarde.
SET GLOBAL query_cache_size = 8388608;
Op dezelfde manier kunnen de andere opties worden ingesteld met dezelfde syntaxis:
SET GLOBAL query_cache_limit = 1048576;GLOBAAL INSTELLENquery_cache_type
= 1;
Hoe kunnen we zien of het echt werkt? U kunt de TOON STATUS-opdracht gebruiken om alle variabelen te selecteren die beginnen met "Qc" om te bekijken wat er gebeurt onder de motorkap.
mysql> TOON STATUS LATEN 'Qc%'; + ------------------------- + -------- + | Variable_name | Waarde | + ------------------------- + -------- + | Qcache_free_blocks | 65 | | Qcache_free_memory | 201440 | | Qcache_hits | 18868 | | Qcache_inserts | 2940 | | Qcache_lowmem_prunes | 665 | | Qcache_not_cached | 246 | | Qcache_queries_in_cache | 492 | | Qcache_total_blocks | 1430 | + ------------------------- + -------- + 8 rijen in set (0.00 sec)
Je zult in de statistieken merken dat ik nog veel gratis geheugen over heb. Als je server veel lowmem-pruimen bevat, moet je misschien overwegen deze waarde te verhogen, maar ik zou niet te veel geheugen besteden aan query-caching voor een webserver ... je moet het geheugen beschikbaar houden voor apache, php, robijn of wat je ook gebruikt.
Activeren in Config-bestand
Als je wilt dat deze wijzigingen overleven na een herstart of opnieuw opstarten van de mysql-server, moet je deze toevoegen aan je /etc/mysql/my.cnf-configuratiebestand voor MySQL. Merk op dat het mogelijk op een andere locatie in uw installatie staat.
Open het bestand met een teksteditor in sudo- of root-modus en voeg deze waarden toe als ze nog niet in het bestand voorkomen. Als ze inderdaad bestaan, kunt u ze gewoon van commentaar voorzien.
query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576
Query's in cache kunnen de snelheid van uw webtoepassing aanzienlijk verbeteren, vooral als uw toepassing meestal leest. Controleer de status aan de hand van de bovenstaande methoden en kijk hoe deze in de loop van de tijd werken.