Mysql
 sql >> Base de données >  >> RDS >> Mysql

Dois-je sacrifier mon innodb_buufer_pool _size/RAM pour faire de la place pour query_cache_size ?

En juin 2014, j'ai répondu https://dba.stackexchange.com/questions/66774/why-query-cache-type-is-disabled-by-default-start-from-mysql-5 -6/66796#66796

Dans cet article, j'ai expliqué comment InnoDB gère les changements entre le pool de tampons InnoDB et le cache de requêtes.

NE PAS UTILISER LE CACHE DE REQUÊTES

La réponse la plus simple serait de simplement désactiver le cache de requête, mais il y a un hic :vous devez définir les deux query_cache_size et query_cache_type à zéro(0).

Si vous ne définissez pas query_cache_type à zéro(0), la microgestion des changements se produit toujours. Ceci est vérifié par ce que le Paragraphe 8 du MySQL Documentation "Configuration du cache de requête" dit

UTILISATION DU CACHE DE REQUÊTE

Si vous souhaitez vraiment utiliser le cache de requêtes, vous devez étudier vos données. Fondamentalement, vous devez connaître la taille de vos résultats. Vous définiriez alors query_cache_limit et query_cache_min_res_unit pour s'adapter à l'ensemble de résultats de taille moyenne ainsi qu'à l'ensemble de résultats de taille maximale.

Comme alternative, vous pouvez activer le cache de requête globalement mais désactiver son utilisation à partir de votre session DB comme indiqué dans Paragraphe 9 :

VOTRE VRAIE QUESTION

Le cache de requêtes, le pool de tampons InnoDB, les threads par connexion (voir mon article https://dba.stackexchange.com/questions/16969/how-costly-is-opening-and-closing-of-a-db-connection/ 16973#16973 ) et le système d'exploitation se disputent tous la RAM.

Lorsque vous examinez uniquement le cache de requêtes et le pool de tampons InnoDB, vous devez voir combien d'espace est libre dans le pool de tampons InnoDB après que MySQL a fonctionné pendant des jours ou des semaines.

Vous pouvez exécuter cette requête

SELECT variable_value / 64 free_mb
FROM information_schema.global_status
WHERE variable_name='Innodb_buffer_pool_pages_free';

Cela vous indiquera de combien vous pouvez réduire le pool de tampons InnoDB. Vous pouvez alors augmenter le cache de requêtes de cette taille. Si cette requête renvoie moins de 1024, cela n'en vaut probablement pas la peine. Vous devrez soit obtenir l'espace supplémentaire de la RAM, soit simplement désactiver le cache de requêtes.