Je travaille actuellement sur une base de données MySQL où nous constatons un grand nombre d'invalidations à partir du cache de requête, principalement en raison du nombre élevé d'instances d'insertion, de suppression et de mise à jour en cours d'exécution sur de nombreuses tables.
Ce que j'essaie de déterminer est de savoir si il y a un avantage ou non pour permettre au cache de requête d'être utilisé pour sélectionner des déclarations qui sont exécutées contre ces tables. Depuis qu'ils deviennent invalidés si rapidement, il me semble que la meilleure chose aurait simplement d'utiliser sql_no_cache sur certaines instructions avec ces tables.
La surcharge d'invalidation fréquente en vaut-elle jamais la peine?
Edit: à la demande de l'utilisateur @Rolandomysqldba ci-dessous, voici les informations sur Myisam et InnoDB.
Innodeb
Myisam
Information additionnelle:
Mauvais: Query_Cache_size = 1g
Pourquoi? À cause de combien de temps une rinçance prendra. C'est-à-dire que lorsque certaines écrits se produisent, l'ensemble de 1 Go sera numérisé pour trouver des références à la table modifiée. Plus le QC est grand, plus cela est lent. Je recommande une taille de plus de 50 m, à moins que vos données ne changent rarement.
Le QC est au-dessus de Myisam et InnoDB. Il sort d'un mutex global et le prend trop tôt. Ce mutex est une raison pour laquelle MySQL ne peut pas utiliser efficacement plus d'environ 8 cœurs.
Sql_no_cache n'est pas remarqué jusqu'à après Le mutex est verrouillé! À propos de la seule utilisation pour ce drapeau est destiné à une analyse comparative.
Il vaut souvent mieux donner le RAM à une autre cache.