Tilbage i juni 2014 svarede jeg https://dba.stackexchange.com/questions/66774/why-query-cache-type-is-disabled-by-default-start-from-mysql-5 -6/66796#66796
I det indlæg diskuterede jeg, hvordan InnoDB mikrostyrer ændringer mellem InnoDB Buffer Pool og Query Cache.
BRUGER IKKE FORESPØRGSCACHEN
Det enkleste svar ville være bare at deaktivere forespørgselscachen, men der er en catch:Du skal indstille både query_cache_size og query_cache_type til nul(0).
Hvis du ikke indstiller query_cache_type til nul(0), forekommer mikrostyringen af ændringer stadig. Dette bekræftes af afsnit 8 i MySQL Dokumentation "Query Cache Configuration" siger
BRUG AF FORESPØRGSCACHEN
Hvis du virkelig ønsker at bruge Query Cache, skal du studere dine data. Dybest set skal du kende størrelsen på dine resultater. Du ville derefter indstille query_cache_limit og query_cache_min_res_unit for at imødekomme det gennemsnitlige resultatsæt såvel som det maksimale resultatsæt.
Som et alternativ kan du aktivere Query Cache globalt, men deaktivere dens brug fra din DB-session som angivet i Afsnit 9 :
DITT FAKTISKE SPØRGSMÅL
Query Cache, InnoDB Buffer Pool, Per Connection Threads (Se mit indlæg https://dba.stackexchange.com/questions/16969/how-costly-is-opening-and-closing-of-a-db-connection/ 16973#16973 ), og OS konkurrerer alle om RAM.
Når du kun ser på Query Cache og InnoDB Buffer Pool, skal du se, hvor meget plads der er ledig i InnoDB Buffer Pool, efter at MySQL har kørt i dage eller uger.
Du kan køre denne forespørgsel
SELECT variable_value / 64 free_mb
FROM information_schema.global_status
WHERE variable_name='Innodb_buffer_pool_pages_free';
Dette vil fortælle dig, hvor meget du kan sænke InnoDB Buffer Pool. Du kan derefter øge forespørgselscachen med den størrelse. Hvis denne forespørgsel returnerer mindre end 1024, er det sandsynligvis ikke besværet værd. Du vil enten få den ekstra plads fra RAM eller bare gå med at deaktivere Query Cache.