Page 1 sur 1

probleme de bug sur la base

Posté : 26 juil. 2007, 12:04
par moi
Bonjour,

Parfois sans aucune raison, lorsque que l'on ai en trein d'utiliser la base, elle se bloque, tout les utilisateurs sont alors bloquer pdt une trentaine de seconde. Pourtant le code n'a pas de probleme, aucun messages d'erreur n'apparait, sur aucun des pc. Cela viendrai-t-il d'autre chose ?
15 personne utilisent en simultané la base, l'interroge, la modifie.

Si quelqu'un pouvais m'aider ça serait vraiement super car je ne vois pas du tout d'ou peux venir le probleme, et c'est très penalisant.

merci

Posté : 26 juil. 2007, 12:16
par Ryle
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

Posté : 26 juil. 2007, 13:55
par delcedo galaxialord
Salut,

Possibilité que ce soit un interbloquage (des verrous posés qui entrent en concurrence et qui crée un interblocage jusqu'à ce que celui qui bloque obtienne un timeout).

Possibilité que ton nombre de connexions au serveur soit petit et du coup les autres clients sont mis en attente (dépendant de ta programmation) tant qu'il n'y a pas de place pour eux.

Possibilité qu'il y ait un énorme nombre de requêtes effectuées ou alors des jointures mal construites.

Bref, il y a encore sûrement plein d'autres possibilités, tout dépend de comment est fait ton code.

Posté : 26 juil. 2007, 17:57
par moi
j'ai une centaine de table et 600 page de code a peu pres donc pas evident de voire ou se porte le probleme.
Les 15 personnes les utilise en continuité dans la journée la base, donc je ne pense pas que se soit le nombre d'utilisateur. Mais pour la premiere possiblité, j'avais penser a se enre de probleme, mais aurai tu une idée plus precise. Cela ne viendrai pas du parametrege de la base sql ? le tps de reponse ? je sais que pour certaine requete javai des souci au niveau du temps de reponse et du coup j'avais augmenter des valeur dans le fichier php.ini je crois. Cela viendrai t il pas cela.(je sai que ces requete ne sont pas effectué car en effet celle ci bloque la base, mais je suis la seul a avoir les droit sur ces requete, et je lai effectué que lorque aucun utilisateur nest connecté).De plus quand le blocage survient il intervient sur tous en meme temps bien entendu.
Voila, si cela peux vous aidez a m'aidez :D

merci

Posté : 26 juil. 2007, 18:50
par delcedo galaxialord
L'interblocage c'est quand tu utilises des verrous afin d'éviter des problèmes liés à la programmation concurrentielle (plus d'infos sur ce topic, j'ai décrit le principe).

En MySQL tu peux créer des verrous en exécutant des requêtes du genre "LOCK TABLE ..."

Un interblocage se réaliserait ainsi :

Utilisateur 1 :

Code : Tout sélectionner

LOCK TABLE table1 LOCK TABLE table2 UNLOCK TABLE table2 UNLOCK TABLE table1
Utilisateur 2 :

Code : Tout sélectionner

LOCK TABLE table2 LOCK TABLE table1 UNLOCK TABLE table1 UNLOCK TABLE table2
Si le système d'exploitation suspend le processus du premier utilisateur après le LOCK TABLE table1 et qu'il donne le contrôle à l'autre processus du deuxième utilisateur, alors tu auras un interblocage : le processus U1 attendra que la table 2 se libère et le processus U2 attendre que la table 1 se libère.

C'est du coup PHP qui tuera les connexions au bout de 30 secondes (le timeout), libérant ainsi les verrous de la base de données et permettant aux autres scripts de tourner.

Dans ton cas tu sembles parler de la configuration de PHP, c'est un trop vaste domaine pour pouvoir te dire ce qui pourrait clocher !

Posté : 30 juil. 2007, 13:35
par moi
je n'ai aucune requete du genre lock...
donc ça ne peux pas être ça le souci.
Cela ne pourrai pas venir du temps que j'ai donner pour l'excution des requetes ?

merci

Posté : 30 juil. 2007, 13:57
par Hubert Roksor
je n'ai aucune requete du genre lock...
Pas besoin, MySQL vérouille les tables automatiquement. Si tu utilises des tables MyISAM, chaque UPDATE, DELETE ou INSERT met l'équivalent d'un LOCK TABLE sur toutes les tables concernées.

Regarde du côté de SHOW PROCESSLIST pour savoir quelles requêtes sont exécutées, et lesquelles sont en attente de vérouillage.

Posté : 07 août 2007, 16:17
par MOI
ok j'ai regardé, donc j'ai qu'un utilisateur en cours, en effet car je gère au niveau du php les utilisateurs, on m'avait conseiller de gerer mes utilisateurs de cette facon. Et ce que cela viendrai du fait que ce soit le meme utilisateur qui pose autant de question que viendrai le probleme dans se cas ?
merci

Posté : 07 août 2007, 16:44
par Hubert Roksor
Je ne suis pas sûr de savoir ce que tu veux dire par "utilisateur" (l'utilisateur MySQL ? c'est à dire le login/password utilisé pour se connecter ?). Lorsque ta base de données se "bloque", regarde SHOW FULL PROCESSLIST quelques fois et poste-nous le résultat (ou les résultats, s'il y en a plusieurs différents).

Posté : 27 août 2007, 13:49
par moi
voila, je suis desolé de pas avoir repondu plus tot

donc cela m'affiche : (2 exemples)

Code : Tout sélectionner

Id User Host db Command Time State Info 59574 root localhost:57725 base Query 0 NULL [BLOB - 21 Octets] 59679 root localhost:57844 base Query 0 NULL [BLOB - 21 Octets]
voila, je sais pas si vous pourrez m'en dire plus

merci