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
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.
Une autre alternative qui affecte uniquement la connexion actuelle:
SET SESSION query_cache_type=0;
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
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
Vous pouvez également exécuter la commande suivante pour réinitialiser le cache de requêtes.
RESET QUERY CACHE
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.
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';
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;
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.