web-dev-qa-db-fra.com

MySQL - force à ne pas utiliser le cache pour tester la vitesse de la requête

Je teste la vitesse de certaines requêtes dans MySQL. La base de données met en cache ces requêtes, ce qui rend difficile l'obtention de résultats fiables lors du test de rapidité d'exécution de ces requêtes.

Existe-t-il un moyen de désactiver la mise en cache pour une requête?

Système: hébergement Web MySQL 4 sur Linux, j'ai accès à PHPMyAdmin.

Merci

315
Alan

Essayez d’utiliser l’option SQL_NO_CACHE (MySQL 5.7) dans votre requête. (Les utilisateurs de MySQL 5.6 cliquent sur ICI )

par exemple.

SELECT SQL_NO_CACHE * FROM TABLE

Cela empêchera MySQL de mettre en cache les résultats, mais sachez que les autres caches de système d'exploitation et de disque peuvent également avoir un impact sur les performances. Ce sont plus difficiles à se déplacer.

500
Jarod Elliott

Une autre alternative qui affecte uniquement la connexion actuelle:

SET SESSION query_cache_type=0;
114
John Carter

Toute référence à la date/heure en cours désactivera le cache de la requête pour cette sélection:

SELECT *,NOW() FROM TABLE

Voir "Conditions préalables et notes sur l'utilisation du cache de requêtes MySQL" @ http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html

53
mediobit

Il y a aussi une option de configuration: query_cache_size = 0

Pour désactiver le cache de requêtes au démarrage du serveur, définissez la variable système query_cache_size sur 0. En désactivant le code du cache de requêtes, vous évitez toute surcharge apparente. Si vous construisez MySQL à partir de la source, les capacités de cache de requête peuvent être entièrement exclues du serveur en appelant configure avec l'option --without-query-cache.

Voir http://dev.mysql.com/doc/refman/5.1/en/query-cache.html

30
barbushin

Vous pouvez également exécuter la commande suivante pour réinitialiser le cache de requêtes.

RESET QUERY CACHE
24
djt

Un problème avec le

SELECT SQL_NO_CACHE * FROM TABLE

cette méthode semble empêcher uniquement la mise en cache du résultat de votre requête. Toutefois, si vous interrogez une base de données activement utilisée avec la requête à tester, d'autres clients peuvent mettre en cache votre requête, ce qui affectera vos résultats. Je continue à rechercher des moyens de contourner le problème, éditerai ce post si j'en découvre un.

20
wbharding

Je voudrais utiliser les éléments suivants:

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';
13
Sergio Costa

L'utilisation d'une variable définie par l'utilisateur dans une requête rend les résultats de la requête impossibles à mettre en cache. J'ai trouvé que c'était un meilleur indicateur que d'utiliser SQL_NO_CACHE. Mais vous devriez placer la variable à un endroit où le paramètre de variable n’affecterait pas sérieusement la performance:

SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;
3
newtover

Si vous souhaitez désactiver le cache de requêtes, définissez 'query_cache_size' sur 0 dans votre fichier de configuration mysql. Si sa valeur est 0, mysql n'utilisera pas le cache de requêtes.

2
Jinesh