Maison  >  Article  >  base de données  >  Quelques échanges sur MySQL Query Cache

Quelques échanges sur MySQL Query Cache

黄舟
黄舟original
2017-02-16 13:26:031128parcourir

Une alarme d'utilisation de la mémoire s'est produite dans MySQL en ligne aujourd'hui, j'ai donc vérifié les paramètres d'utilisation de la mémoire MySQL, en me concentrant sur le cache, sur l'utilisation de innodb_buffer_pool_size et du cache de requêtes.

query_cache_type est activé par défaut et la taille par défaut de la zone de cache query_cache_size est de 32 Mo. Il est généralement recommandé de ne pas dépasser 256 Mo. Vous pouvez utiliser les paramètres du cache de requête pour voir la valeur spécifique :
<.>


mysql> show variables like &#39;%cache%&#39;;
+------------------------------+----------------------+
| Variable_name                | Value                |
+------------------------------+----------------------+
| binlog_cache_size            | 32768                |
| binlog_stmt_cache_size       | 32768                |
| have_query_cache             | YES                  |
| key_cache_age_threshold      | 300                  |
| key_cache_block_size         | 1024                 |
| key_cache_pision_limit     | 100                  |
| max_binlog_cache_size        | 18446744073709547520 |
| max_binlog_stmt_cache_size   | 18446744073709547520 |
| metadata_locks_cache_size    | 1024                 |
| query_cache_limit            | 1048576              |
| query_cache_min_res_unit     | 4096                 |
| query_cache_size             | 33554432             |
| query_cache_type             | ON                   |
| query_cache_wlock_invalidate | OFF                  |
| stored_program_cache         | 256                  |
| table_definition_cache       | 400                  |
| table_open_cache             | 512                  |
| thread_cache_size            | 8                    |
+------------------------------+----------------------+
18 rows in set (0.00 sec)


mysql>



« Qcache_free_blocks » : combien de blocs restants se trouvent actuellement dans le cache de requêtes. Si la valeur est plus grande,
, cela signifie qu'il y a plus de fragments de mémoire dans le cache de requêtes et vous devrez peut-être trouver une opportunité appropriée pour défragmenter ().
● « Qcache_free_memory » : la taille de mémoire restante actuelle dans le cache de requêtes. Grâce à ce paramètre, nous pouvons observer plus précisément si la taille de la mémoire du cache de requêtes dans le système actuel est suffisante, si elle doit être augmentée ou si elle est trop
● " Qcache_hits": combien de hits ; . Grâce à ce paramètre, nous pouvons voir l'effet de base du Query Cache ;
● « Qcache_inserts » : combien d'échecs puis d'insertion. Grâce aux deux paramètres "Qcache_hits" et "Qcache_inserts" nous pouvons calculer le taux de réussite du Query Cache :
Query Cache hit rate = Qcache_hits / ( Qcache_hits Qcache_inserts ); > ● « Qcache_lowmem_prunes » : combien de requêtes ont été effacées du cache de requêtes en raison d'une mémoire insuffisante. En combinant
"Qcache_lowmem_prunes" et "Qcache_free_memory", nous pouvons plus clairement comprendre si la taille de la mémoire du cache de requêtes dans notre système est vraiment suffisante et si très fréquemment, la requête est remplacée en raison d'une mémoire insuffisante.

● "Qcache_not_cached": En raison du paramètre query_cache_type ou du nombre de requêtes qui ne peuvent pas être mises en cache ; Qcache_queries_in_cache : Le nombre de requêtes dans le cache de requêtes actuel ;
● "Qcache_total_blocks" : Le nombre de blocs dans le cache de requêtes actuel ;
Limitations de Query Cache
Query Cache stocke des ensembles de résultats structurés logiquement au lieu de pages de données physiques, de sorte que même si les performances sont améliorées,
sera également soumis à certaines restrictions spécifiques.
a) Les versions antérieures à 5.1.17 ne peuvent pas mettre en cache les requêtes permettant de définir des variables, mais à partir de la version 5.1.17, le cache de requêtes
a commencé à prendre en charge les requêtes permettant de définir des variables  ;
b) La requête externe SQL dans toutes les sous-requêtes ne peut pas être mise en cache
c) La requête dans la procédure, la fonction et le déclencheur ne peut pas être mise en cache ; >d) Les requêtes contenant de nombreuses autres fonctions susceptibles d'obtenir des résultats différents à chaque exécution ne peuvent pas être mises en cache.
Compte tenu des limitations ci-dessus, lors de l'utilisation du cache de requêtes, il est recommandé de l'utiliser via des paramètres précis, afin que seules les données de la table appropriée puissent être utilisées. Entrez le cache de requêtes pour autoriser uniquement certaines Résultats de la requête à mettre en cache.

De plus, si la valeur
Qcache_free_blocks est un peu élevée, vous pouvez utiliser le cache de requêtes de vidage pour le nettoyer.


Suggestion d'un ami :


Première : Si See More il existe de nombreuses opérations de lecture, regardez le rapport. Pour faire simple, s'il s'agit d'un tableau de liste d'utilisateurs, ou si le rapport de données est relativement fixe, comme une liste de produits, il peut être ouvert. relativement concentrés et les pratiques figurant dans la base de données sont relativement petites.

La deuxième :

Lorsque nous "trichons", par exemple, lorsque nous effectuons un test de stress lors d'une offre, nous pouvons toujours recevoir des données en allumant le cache de requêtes.Pour obtenir l'effet de montée en puissance de qps, bien sûr, le pool de connexions frontales et les autres configurations sont les mêmes. Dans la plupart des cas, s'il y a beaucoup d'écritures mais peu de visites, ne l'ouvrez pas. Par exemple, sur les sites de réseaux sociaux, 10 % des personnes génèrent du contenu et les 90 % restants le consomment. très efficace, mais si c'est de la messagerie ou du chat QQ, c'est terrible.



Le troisième :

Peu importe si le site Web est petit ou n'a pas une simultanéité élevée, vous. verra beaucoup de verrous qcache en attente, donc généralement, en cas de concurrence élevée, il n'est pas recommandé d'ouvrir le cache de requêtes


Ce qui précède est un échange d'expérience sur le cache de requêtes MySQL. Pour plus de contenu connexe, veuillez payer. attention au site PHP chinois (www.php.cn) !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn