V červnu 2014 jsem odpověděl https://dba.stackexchange.com/questions/66774/why-query-cache-type-is-disabled-by-default-start-from-mysql-5 -6/66796#66796
V tomto příspěvku jsem diskutoval o tom, jak InnoDB mikrospravuje změny mezi InnoDB Buffer Pool a Query Cache.
NEPOUŽÍVÁNÍ CACHE QUERY CACHE
Nejjednodušší odpovědí by bylo prostě zakázat mezipaměť dotazů, ale má to háček:Musíte nastavit obě velikost_cache_query_cache a query_cache_type na nulu (0).
Pokud nenastavíte query_cache_type na nulu(0), mikromanagement změn stále probíhá. To je ověřeno odstavcem 8 MySQL Dokumentace „Konfigurace mezipaměti dotazu“ říká
POUŽITÍ CACHE QUERY CACHE
Pokud opravdu chcete používat Query Cache, musíte si prostudovat svá data. V zásadě musíte znát velikost svých výsledků. Poté byste nastavili query_cache_limit a query_cache_min_res_unit aby se přizpůsobila výsledné sadě průměrné velikosti i sadě výsledků maximální velikosti.
Alternativně můžete mezipaměť dotazů povolit globálně, ale zakázat její používání z relace DB, jak je uvedeno v Odstavec 9 :
VAŠE SKUTEČNÁ OTÁZKA
Mezipaměť dotazů, fond vyrovnávací paměti InnoDB, vlákna podle připojení (viz můj příspěvek https://dba.stackexchange.com/questions/16969/how-costly-is-opening-and-closing-of-a-db-connection/ 16973#16973 ) a OS soutěží o RAM.
Když se podíváte pouze na Query Cache a InnoDB Buffer Pool, musíte vidět, kolik místa je volného místa v InnoDB Buffer Pool poté, co MySQL běží několik dní nebo týdnů.
Můžete spustit tento dotaz
SELECT variable_value / 64 free_mb
FROM information_schema.global_status
WHERE variable_name='Innodb_buffer_pool_pages_free';
To vám řekne, jak moc můžete snížit InnoDB Buffer Pool. Pak byste mohli zvýšit mezipaměť dotazů o tuto velikost. Pokud tento dotaz vrátí méně než 1024, pravděpodobně to nestojí za námahu. Buď budete muset získat další místo z paměti RAM, nebo jednoduše deaktivovat mezipaměť dotazů.