IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration MySQL Discussion :

Problème de cache MySQL [MySQL-5.1]


Sujet :

Administration MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Problème de cache MySQL
    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

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Êtes-vous certains que la transaction ouverte par le client 1 (celui qui fait les modifications) est bien validée ?

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Il est probable que le client qui lit les données soit en REPEATABLE READ (isolation par défaut avec mysql).
    REPEATABLE READ est évidemment bien trop restrictif comme isolation par défaut, les autres sgbd utilsent READ COMMITED par défaut (en tout cas oracle sûr)

    Pour faire un test rapide, faites un commit avant la sélection pour voir si vous voyez les données rafraichies, et si c'est bien ça changez le mode d'isolation après la connexion.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci skuatamad ça marche! Je ne connaissais pas cette histoire d'isolation, je vais lire un peu de littérature sur le net pour mieux comprendre mais oui c'est bien ça!

    Merci et bonne soirée

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Esteban72 Voir le message
    Merci skuatamad ça marche! Je ne connaissais pas cette histoire d'isolation, je vais lire un peu de littérature sur le net pour mieux comprendre mais oui c'est bien ça!

    Merci et bonne soirée
    à me lire : http://sqlpro.developpez.com/isolation-transaction/

    a +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec Ado, MySQL
    Par sylvain.g dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/06/2005, 10h45
  2. Problème de cache avec Oracle 8i
    Par lper dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/11/2004, 16h50
  3. Problème de cache avec oracle 8 i
    Par lper dans le forum Oracle
    Réponses: 11
    Dernier message: 08/11/2004, 16h45
  4. Problème sous requete MySQL
    Par gavelin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2004, 10h36
  5. problème de connection mysql par tcp/ip
    Par leroyphil dans le forum Administration
    Réponses: 5
    Dernier message: 04/09/2003, 18h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo