Mysql bloque au bout de x enregistrements

max6
WRInaute discret
WRInaute discret
 
Messages: 168
Inscription: 18 Mai 2003

Mysql bloque au bout de x enregistrements

Message le Jeu Fév 15, 2007 13:37

Bonjour à tous


Je recherche activement une solution quand a mon soucis qui est le suivant :

- J'ai un fichier XML de 500mo (c enorme je sais mais je peux pas moins) .
- Mon serveur étant incapable de l'analyser malgré simplexml j'ai donc installé wamp et tenté de l'analyser en local .
- Le fichier devrait sortir environ 20 000 sur 1 table + 1 300 000 sur une 2eme table .
- Le soucis est qu'a partir de 3900 enregistrementssur la table 1 et 280 000 sur la table 2 ben MYSQL bloque ! j'ai cette erreur :

Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'localhost' (10048) in
Warning: mysql_select_db() [function.mysql-select-db]: Can't connect to MySQL server on 'localhost' (10048) in
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to MySQL server on 'localhost' (10048) in
Warning: mysql_query() [function.mysql-query]: Can't connect to MySQL server on 'localhost' (10048) in

J'ai pourtant modifié le PHP.INI en mettant des valeurs elevés dans max_time_execution et memory limit a 512m .

Autre chose a modifier pe pour que ca traite ?

skippyzrnr
WRInaute impliqué
WRInaute impliqué
 
Messages: 664
Inscription: 11 Jan 2005

Message le Jeu Fév 15, 2007 13:47

Ton serveur PHP peut uploader un fichier de 500Mo???
Sinon si tu as la possibilité de le faire en SSH tu pourrais reduire les risques de problèmes.

Selection A
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 279
Inscription: 14 Mar 2005

Message le Jeu Fév 15, 2007 14:15

Quelles types de requetes SQL fais tu ?
Essaye de voir si tu peux pas les optimiser.

max6
WRInaute discret
WRInaute discret
 
Messages: 168
Inscription: 18 Mai 2003

Message le Jeu Fév 15, 2007 14:18

Bha franchement c'est pas des requetes bien lourdes . Y'a juste 2 insert pou insérer dans les deux tables .

Sinon j'utilise une dédié un celeron ac 768mo de ram , c'est quand meme amplement suffisant normalement mais ca plante .

La je fais ca en local avec wamp et ma machine est puissante .

Ce qui est étrange c'est que ca bloque toujours vers le meme nombre d'enregistrements . pas moyen d'aller plus loin .
Y'a pas une conf de mysql a modifier ? ou php ou httpd?

Ca doit pas planter y'a vraiment pas de raison . En plus j'utilise simplexml donc c plutot simple .

Selection A
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 279
Inscription: 14 Mar 2005

Message le Jeu Fév 15, 2007 14:26

Ce qui me parait bizarre c'est que tu as une erreur sur un mysql_connect() au milieu de ton traitement !
Si tu fait un traitement batch pourquoi il y a une reconnexion à MySQL ?

max6
WRInaute discret
WRInaute discret
 
Messages: 168
Inscription: 18 Mai 2003

Message le Jeu Fév 15, 2007 14:35

Ben voila ca m'a paru aussi étrange y'a pas a ce que ca se deconnecte comme ca .

Je me suis dit que c'etait pe un probleme de wamp mais j'ai rien trouvé .

Mysql bloque pas les connexions a partir de x secondes de script ?

J'ai cette erreu la aussi :

Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established

C'est comme si la connexion s'arretait d'un coup a cause d'une raison obscure ...

Selection A
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 279
Inscription: 14 Mar 2005

Message le Jeu Fév 15, 2007 14:46

L'erreur sur le mysql_connect() vient d'un ordre mysql_connect() dans ton code !

Essaye de voir si tu fais bien qu'une connection à MySQL en début de traitement et qu'une deconnection en fin de traitement !

Deuxio, y a t il d'autres accès à ta base de données pendant le traitement ?

max6
WRInaute discret
WRInaute discret
 
Messages: 168
Inscription: 18 Mai 2003

Message le Jeu Fév 15, 2007 15:30

Je vous remercie bien selectionA m'a mis sur la piste :

J'ai tjrs codé mes scripts avec un maximum de connection/deconnection fin de libérer au maximum mysql et d'otpimiser . J'avais donc fais comme ceci (qui fonctionne bien en php4) :

<?
simple_cml(blablvbala)
foreach (blablabla)
{
traitement flux
connexion sql
traitement sql
deco sql
}

et effectivemment ca faisait planter sql . J'ai doc mis la connec tt en haut et la deco tt en bas .

Je sais pas pk ca marchait pas vu que j'ai tjrs fait comme ca , pe que pr un gros script c mieux ?

Merci a tous

Max
?>

vit0
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 44
Inscription: 11 Avr 2006

Message le Jeu Fév 15, 2007 15:39

Ouille Ouille..

Mets toi a la place du serveur ^^

Tu demandes de faire plusieurs milliers de connesions/déconnesions en un temps record.
Il est normal qu'après un certain temps, il est completement largué. (un DoS quoi ^^)

Le mieux est d'ouvrir ta connexion, faire ton traitement (mysql_query()) et quand tout est fini, tu ferme la connexion

Selection A
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 279
Inscription: 14 Mar 2005

Message le Jeu Fév 15, 2007 15:48

Le système "connexion puis requete SQL puis deconnexion" est utile pour un forum de discussion très fréquenté car cela permet de ne pas avoir trop de connexion simultannée.

Par contre, sur un traitement batch de masse cela n'est pas utile.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité