Maison >base de données >tutoriel mysql >Partager la requête de cache MySQL et effacer l'exemple de code de commande
Cet article présente principalement l'utilisation détaillée des commandes de requête et d'effacement du cache MySQL. Pour certaines tables qui ne modifient pas fréquemment les données et qui ont un grand nombre de mêmes requêtes SQL, le cache de requêtes sera plus utile. peut s'y référer
Cache de requêtes Mysql
Le rôle du cache de requêtes est que lorsque la requête reçoit une requête qui est la même qu'avant, le serveur récupérera les résultats de le cache de requêtes au lieu d'analyser et d'exécuter à nouveau la dernière requête. Cela améliore considérablement les performances et fait gagner du temps.
1. Configurez le cache de requêtes
Modifiez le fichier de configuration, modifiez query_cache_size et query_cache_type sous [mysqld] (ajoutez sinon). Parmi eux, query_cache_size indique la taille du cache et query_cache_type a 3 valeurs, indiquant le type d'ensemble de résultats de sélection à mettre en cache. Les valeurs de query_cache_type sont les suivantes :
0 ou off désactive le cache 1 ou on active le cache, mais ne l'enregistre pas pour l'utiliser Instruction Select de sql_no_cache, sinon cache, sélectionnez le nom sql_no_cache à partir de wei où id=2
2 ou demandez l'activation de la mise en cache conditionnelle, uniquement l'instruction de sélection du cache avec sql_cache , cache sélectionnez le nom sql_cache depuis wei où id=4
exemple La configuration est la suivante Une fois la configuration terminée, redémarrez le serveur Mysql.
query_cache_size=10M query_cache_type=1Vous pouvez utiliser la commande suivante pour vérifier si elle est activée, où have_query_cache indique si elle est activée, query_cache_limit spécifie la taille du tampon qui peut être utilisée par une seule requête, la valeur par défaut est 1 Mo ;query_cache_min_res_unit est la taille minimale du bloc de cache allouée par le système. La valeur par défaut est 4 Ko. Une valeur de paramètre élevée est bonne pour les requêtes Big Data, mais si vos requêtes sont toutes de petites requêtes de données, elle est utilisée par une seule requête. entraînera facilement une fragmentation et un gaspillage de mémoire ; query_cache_size et query_cache_type sont ce que nous avons mentionné ci-dessus. La configuration query_cache_wlock_invalidate indique que lorsque d'autres clients écrivent dans la table MyISAM, si la requête est dans le cache de requêtes, s'il faut renvoyer le résultat du cache ou attendre. jusqu'à ce que l'opération d'écriture soit terminée avant de lire le tableau pour obtenir le résultat.
mysql> show variables like '%query_cache%'; +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 10485760 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 6 rows in set (0.00 sec)2. Test
Nous l'exécutons d'abord, sélectionnons count(*) depuis wei, puis exécutons-le à nouveau, vous pouvez voir ; que la seconde Le temps pris cette fois est bien inférieur à celui de la première exécution, car le résultat de la sélection est lu dans le cache une deuxième fois.
mysql> select count(*) from wei ; +----------+ | count(*) | +----------+ | 4194304 | +----------+ 1 row in set (3.92 sec) mysql> select count(*) from wei ; +----------+ | count(*) | +----------+ | 4194304 | +----------+ 1 row in set (0.00 sec)Nous pouvons vérifier l'état actuel du cache via la commande suivante
mysql> show status like 'qcache%'; +-------------------------+----------+ | Variable_name | Value | +-------------------------+----------+ | Qcache_free_blocks | 1 | | Qcache_free_memory | 10475424 | | Qcache_hits | 1 | | Qcache_inserts | 1 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 0 | | Qcache_queries_in_cache | 1 | | Qcache_total_blocks | 4 | +-------------------------+----------+ 8 rows in set (0.00 sec)La signification de chaque paramètre est la suivante :
Vider le cache
Syntaxe FLUSH de mysql (vider le cache)
FLUSH flush_option [,flush_option]Si vous souhaitez vider une partie du cache interne utilisé par MySQL, vous devez utiliser la commande FLUSH. Pour exécuter FLUSH, vous devez disposer de l'autorisation de rechargement.
flush_option peut être l'un des éléments suivants :
FLUSH TABLES AVEC READ LOCK Ferme toutes les tables ouvertes et ajoute un verrou en lecture à toutes les tables de la base de données jusqu'à ce que le déverrouillage des tables soit explicitement exécuté. Cette opération est souvent utilisée pour la sauvegarde des données.
STATUT Réinitialise la plupart des variables d'état à 0.
MASTER Supprimez tous les fichiers journaux binaires dans le fichier d'index du journal binaire, réinitialisez le fichier d'index du fichier journal binaire à vide et créez un nouveau fichier journal binaire. Cependant, ce n'est pas le cas. Utilisation plus recommandée, modifiée pour réinitialiser le maître. Comme vous pouvez l'imaginer, j'étais très naïf dans le passé. Cela pouvait être fait avec une simple commande, mais cela prenait plusieurs commandes. La méthode précédente consistait d'abord à trouver le nom du fichier journal binaire actuel, puis à utiliser la purge. opération.
QUERY CACHE Réorganise le cache de requêtes, élimine les fragments et améliore les performances, mais n'affecte pas les données existantes dans le cache de requêtes. C'est la même chose que Flush table et Reset Query Cache (cela sera le cas). Effacera le contenu du cache de requêtes) sont différents.
SLAVE C'est similaire à la réinitialisation de la réplication. Cela fait oublier à la base de données esclave l'emplacement de réplication de la base de données maître, et supprime également le journal de relais téléchargé. Comme le maître, ce n'est plus le cas. recommandé. Modifié sur Réinitialiser l'esclave. Ceci est également très utile.
De manière générale, les opérations de vidage seront enregistrées dans des fichiers journaux binaires, mais FLUSH LOGS, FLUSH MASTER, FLUSH SLAVE et FLUSH TABLES WITH READ LOCK ne seront pas enregistrés, donc si ce qui précède les opérations sont enregistrées dans le fichier journal binaire, cela affectera la base de données esclave. Remarque : L'opération Reset joue en fait le rôle d'une version améliorée de l'opération Flush.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!