Tillbaka i juni 2014 svarade jag https://dba.stackexchange.com/questions/66774/why-query-cache-type-is-disabled-by-default-start-from-mysql-5 -6/66796#66796
I det inlägget diskuterade jag hur InnoDB mikrohanterar förändringar mellan InnoDB Buffer Pool och Query Cache.
ANVÄNDER INTE Frågecacheminnet
Det enklaste svaret skulle vara att bara inaktivera frågecachen, men det finns en hake:Du måste ställa in både query_cache_size och query_cache_type till noll(0).
Om du inte ställer in query_cache_type till noll(0), mikrohanteringen av förändringar sker fortfarande. Detta verifieras av paragraf 8 i MySQL Dokumentation "Query Cache Configuration" säger
ANVÄNDA FRÅGECACHEN
Om du verkligen vill använda Query Cache måste du studera dina data. I grund och botten måste du veta storleken på dina resultat. Du skulle sedan ställa in query_cache_limit och query_cache_min_res_unit för att tillgodose resultatuppsättningen för genomsnittlig storlek såväl som resultatuppsättningen för maximal storlek.
Som ett alternativ kan du aktivera Query Cache globalt men inaktivera dess användning från din DB-session som anges i Stycke 9 :
DIN FAKTISKA FRÅGA
Query Cache, InnoDB Buffer Pool, Per Connection Threads (Se mitt inlägg https://dba.stackexchange.com/questions/16969/how-costly-is-opening-and-closing-of-a-db-connection/ 16973#16973 ), och OS konkurrerar alla om RAM.
När du bara tittar på Query Cache och InnoDB Buffer Pool, måste du se hur mycket utrymme som är ledigt i InnoDB Buffer Pool efter att MySQL har körts i dagar eller veckor.
Du kan köra denna fråga
SELECT variable_value / 64 free_mb
FROM information_schema.global_status
WHERE variable_name='Innodb_buffer_pool_pages_free';
Detta kommer att berätta hur mycket du kan sänka InnoDB Buffer Pool. Du kan sedan öka frågecachen med den storleken. Om denna fråga returnerar mindre än 1024 är det förmodligen inte värt ansträngningen. Du kommer antingen att få det extra utrymmet från RAM-minnet eller bara gå med att inaktivera frågecachen.