Bonjour,
J'ai un problème avec les systèmes de cache de MySQL.
Voilà ce qui se passe, j'ai 2 clients qui pointent sur la même base de données MySQL, l'un faisant de la lecture/écriture, l'autre uniquement de la lecture. Le deuxième récupère régulièrement les données de la base modifiée par le premier pour se mettre à jour, toujours avec les mêmes requêtes (des requêtes très simple select...from...where... sans fioritures). J'ai testé sous plusieurs bases de données et ça marche très bien sous Oracle, SQL Serveur et PostgreSQL, mais pas sous MySQL.
Le truc fou, c'est que j'ai beau modifier le contenu de la base via le premier client (et j'ai bien vérifié avec un requêteur, les données en base sont bien modifiées), les select lancés avec le deuxième renvoient toujours les mêmes résultats, comme si le premier client n'avait rien fait.
J'ai au final deux clients qui font les mêmes requêtes sur la même base et qui ne reçoivent pas les mêmes résultats.
Je suis donc partit à la recherche d'un système de cache MySQL et je suis tombé sur query_cache. Trouvant que ça correspondait parfaitement à mon problème je me suis mis en quête de le désactiver.
J'ai donc mis ces lignes dans my.ini :
query_cache_size=0
query_cache_type=0
query_cache_limit=0
query_cache_min_res_unit=0
J'ai aussi fait en sorte que mes clients lancent SET GLOBAL query_cache_type = OFF; au lancement
J'ai aussi rajouté des SQL_NO_CACHE dans mes requêtes.
J'ai tenté des FLUSH QUERY CACHE et des RESET QUERY CACHE
Mon query_cache semble bel et bien désactivé puisque quand je fait : SHOW STATUS like '%Qcache%'
j'obtient :
Qcache_free_blocks : 0
Qcache_free_memory : 0
Qcache_hits : 0
Qcache_inserts : 0
Qcache_lowmen_prunes : 0
Qcache_not_cached : 0
Qcache_queries_in_cahce : 0
Qcache_total_blocks : 0
avant et après l'utilisation de mes clients, ça ne bouge pas.
Et pourtant mon problème persiste toujours, mes 2 clients font les mêmes requêtes SQL sur la même base, et seul celui qui fait des updates reçoit des données différentes au fur et à mesure des modifications, l'autre reçoit toujours les mêmes données.
Donc soit quelque chose m'échappe au niveau de ce query_cache mais là j'en doute, je pense que je l'ai vraiment désactivé, soit il y a un autre système de cache dans MySQL qui m'emmerde. Je soupsonne aussi sur le innodb_buffer_pool mais là j'avoue avoir un peu plus de mal à comprendre son fonctionnement et ne suis sur que c'est malin de chercher à la désactiver (d'ailleurs je n'y arrive pas).
Voilà,
Merci d'avance pour votre aide
Partager