Snabba upp din webbplats med MySQL Query Caching
Ett av de bästa sätten att påskynda din webbapplikation är att möjliggöra förfrågan caching i din databas, vilken cacher brukar använda SQL-frågor i minnet för praktiskt taget direkt åtkomst till nästa sida som gör samma förfrågan.
Anledningen till att denna metod är så kraftfull är att du inte behöver göra några ändringar i din webbapplikation, du måste bara offra lite minne. Detta kommer inte att fixa alla dina problem, men det kan definitivt inte skada.
Obs! Om din ansökan uppdaterar tabeller ofta, kommer frågecachen ständigt att rensas och du får inte mycket eller någon nytta av det här. Detta är idealiskt för en applikation som oftast läser mot databasen, till exempel en WordPress-blogg. Det här fungerar inte om du kör på delad hosting.
Aktivera cachning med server körning
Det första du vill göra är att se till att din installation av MySQL faktiskt har fråga om caching-stöd tillgängligt. De flesta distributioner gör det, men du borde kontrollera ändå.
Du kommer att vilja köra det här kommandot från din MySQL-konsol, som kommer att berätta om det är möjligt att fråga efterfrågning.
mysql> visa variabler som "have_query_cache"; + ------------------ + ------- + | Variabelnamn | Värde | + ------------------ + ------- + | have_query_cache | JA | +------------------+-------+
Misstolk inte detta så att query caching faktiskt är aktiverat, eftersom de flesta webbhotell inte kommer att aktivera det som standard. Otroligt nog, hade min Ubuntu Feisty-installation redan aktiverat ...
Därefter måste vi kolla och se om fråga caching är aktiverat. Vi måste kolla mer än en variabel, så vi kan också göra allt på en gång genom att söka efter variabelfrågan%
mysql> visa variabler som "fråga%"; + ------------------------------ + --------- + | Variabelnamn | Värde | + ------------------------------ + --------- + | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 8388608 | | query_cache_type | ON | | query_cache_wlock_invalidate | AV | | query_prealloc_size | 8192 | +------------------------------+---------+
Här är viktiga saker i listan och vad de menar:
- query_cache_size - Detta är storleken på cachen i byte. Om du ställer in detta värde till 0 kommer det att inaktivera caching effektivt.
- query_cache_type - Det här värdet måste vara ON eller 1 för query caching för att vara aktiverat som standard.
- query_cache_limit - Detta är den maximala storleksfrågan (i byte) som kommer att cachas.
Om värdet query_cache_size är satt till 0 eller du bara vill ändra det måste du köra följande kommando, med tanke på att värdet är i byte. Om du till exempel vill fördela 8 MB till cacheminnet använder vi 1024 * 1024 * 8 = 8388608 som värdet.
SET GLOBAL query_cache_size = 8388608;
På samma sätt kan de andra alternativen ställas in med samma syntax:
SET GLOBAL query_cache_limit = 1048576;SET GLOBALquery_cache_type
= 1;
Nu hur kan vi säga om det faktiskt fungerar? Du kan använda SHOW STATUS-kommandot för att dra alla variabler som börjar med "Qc" för att titta på vad som händer under huven.
mysql> Visa status som 'Qc%'; + ------------------------- + -------- + | Variabelnamn | Värde | + ------------------------- + -------- + | 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 rader i set (0.00 sek)
Du märker i statistiken att jag har gott om ledigt minne kvar. Om servern visar mycket lågmem prunes kan du behöva överväga att öka det här värdet, men jag skulle inte spendera för mycket minne vid fråga-caching för en webbserver ... du måste lämna minne tillgängligt för apache, php, ruby eller vad du än använder.
Aktivera i Config File
Om du vill att dessa ändringar överlever en omstart eller omstart av mysql-servern, måste du lägga till dem i din /etc/mysql/my.cnf konfigurationsfil för MySQL. Observera att det kanske finns en annan plats på din installation.
Öppna filen med en textredigerare i sudo eller root-läge och lägg till dessa värden om de inte redan finns i filen. Om de existerar, bara uncomment dem.
query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576
Query caching kan avsevärt förbättra hastigheten på din webbapplikation, speciellt om din applikation oftast läser. Övervaka statusen med metoderna ovan och se hur det fungerar över tiden.