mysql qui bloque

Eléphant du PHP | 83 Messages

12 juil. 2009, 12:37

Bonjour,

Je travaille avec du php/mysql sous linux. Les variables de conf du serveur mysql sont celles par défaut.

Je traite un nombre conséquent de données entre php et sql (plusieurs dizaines de Mo en longtext), ce qui ralentit considérablement le serveur sql, jusqu'à le bloquer plusieurs heures pour traiter certaines requêtes.

Me conseillez vous :
-de rien faire car il n'y a rien à faire et de m'acheter une cafetière en attendant.
-de lancer plusieurs serveurs mysql afin de scinder la charge de travail
-d'optimiser les variables du serveur (et comment ?).

Merci pour tout conseil qui sera franchement le bienvenue.
c'est pas mon site mais je soutiens : http://www.consommateurendanger.org/

ViPHP
ViPHP | 5924 Messages

12 juil. 2009, 13:37

Voir si tu ne peux pas revoir tes traitements ?

Eléphant du PHP | 83 Messages

12 juil. 2009, 14:26

Voir si tu ne peux pas revoir tes traitements ?
Salut Sékiltoyai,

non malheureusement, c'est l'insert/select qui bloquent et je n'utilise pas sql pour faire des choses plus complexes du type 'regex' ou 'distinct'.
c'est pas mon site mais je soutiens : http://www.consommateurendanger.org/

ViPHP
ViPHP | 5924 Messages

12 juil. 2009, 15:31

Voir si tu ne peux pas revoir tes traitements ?
Salut Sékiltoyai,

non malheureusement, c'est l'insert/select qui bloquent et je n'utilise pas sql pour faire des choses plus complexes du type 'regex' ou 'distinct'.
Un select ça peut se faire mal hein :)
Certaines récupérations sont plus efficaces au niveau du serveur SQL, d'autres au niveau du langage.

Eléphant du PHP | 83 Messages

12 juil. 2009, 17:00

Voir si tu ne peux pas revoir tes traitements ?
Salut Sékiltoyai,

non malheureusement, c'est l'insert/select qui bloquent et je n'utilise pas sql pour faire des choses plus complexes du type 'regex' ou 'distinct'.
Un select ça peut se faire mal hein :)
Certaines récupérations sont plus efficaces au niveau du serveur SQL, d'autres au niveau du langage.
Pour le select, je sélectionne que le strict nécessaire.

Bon, je vais suivre ton conseil et voir si je ne peux pas traiter une partie des requêtes par php à la place de mysql.

Merci de ton aide.
c'est pas mon site mais je soutiens : http://www.consommateurendanger.org/

ViPHP
ViPHP | 5924 Messages

12 juil. 2009, 18:22

Salut Sékiltoyai,

non malheureusement, c'est l'insert/select qui bloquent et je n'utilise pas sql pour faire des choses plus complexes du type 'regex' ou 'distinct'.
Un select ça peut se faire mal hein :)
Certaines récupérations sont plus efficaces au niveau du serveur SQL, d'autres au niveau du langage.
Pour le select, je sélectionne que le strict nécessaire.

Bon, je vais suivre ton conseil et voir si je ne peux pas traiter une partie des requêtes par php à la place de mysql.

Merci de ton aide.
Bah ca peut être le contraire aussi, ca dépend ce que tu fais.
Si tu traites des données pour les réinjecter dans une autre par exemple, il y a des chances que cela se fasse de manière beaucoup plus optimisées avec des procédures stokées. Idem si tu as des opérations qui demandent le parcours concourant de plusieurs tables.

Bref, ça dépend…
Le mieux, c'est que tu dises grosso modo les traitements que tu fais.

Eléphant du PHP | 83 Messages

12 juil. 2009, 19:21

Un select ça peut se faire mal hein :)
Certaines récupérations sont plus efficaces au niveau du serveur SQL, d'autres au niveau du langage.
Pour le select, je sélectionne que le strict nécessaire.

Bon, je vais suivre ton conseil et voir si je ne peux pas traiter une partie des requêtes par php à la place de mysql.

Merci de ton aide.
Bah ca peut être le contraire aussi, ca dépend ce que tu fais.
Si tu traites des données pour les réinjecter dans une autre par exemple, il y a des chances que cela se fasse de manière beaucoup plus optimisées avec des procédures stokées. Idem si tu as des opérations qui demandent le parcours concourant de plusieurs tables.

Bref, ça dépend…
Le mieux, c'est que tu dises grosso modo les traitements que tu fais.
"Procédures stockées" ? C'est quoi ?

Alors ce que je fais, c'est pas bien compliqué :

1° J'ai des données
2° Je stocke les données dans une table sql (c'est surtout là que ça bloque car après il reste moins de données)
3° Je récupère ces données et les traite avec php
4° je réinsère les données traitées dans une autre table
c'est pas mon site mais je soutiens : http://www.consommateurendanger.org/

ViPHP
ViPHP | 5924 Messages

12 juil. 2009, 19:40

"Procédures stockées" ? C'est quoi ?
http://www.lmgtfy.com/?q=procedures%20stockees%20mysql
Alors ce que je fais, c'est pas bien compliqué :

1° J'ai des données
2° Je stocke les données dans une table sql (c'est surtout là que ça bloque car après il reste moins de données)
3° Je récupère ces données et les traite avec php
4° je réinsère les données traitées dans une autre table
Euh, c'est moyen précis ça…
En gros tu prends des trucs, tu fais des choses dessus, et ça donne des machins ? :)

Eléphant du PHP | 83 Messages

12 juil. 2009, 19:57

"Procédures stockées" ? C'est quoi ?
http://www.lmgtfy.com/?q=procedures%20stockees%20mysql
Alors ce que je fais, c'est pas bien compliqué :

1° J'ai des données
2° Je stocke les données dans une table sql (c'est surtout là que ça bloque car après il reste moins de données)
3° Je récupère ces données et les traite avec php
4° je réinsère les données traitées dans une autre table
Euh, c'est moyen précis ça…
En gros tu prends des trucs, tu fais des choses dessus, et ça donne des machins ? :)
Merci pour le lien, je vais regarder ça tout de suite.

voici les codes :

--ETAPE D'INSERTION DE L'ENSEMBLE DES DONNEES (C'est là que ça ralentit à fond la caisse car il y en a beaucoup)

$sql="INSERT INTO back (identifiant, compta, solde) values ('$id', '$cc', '$resultat')";
mysql_query($sql);


--ETAPE DE RECUPERATION DES DONNEES (afin de traiter les données avec php, ici tout va bien)

$sql="SELECT * from back where (identifiant='$id' and where solde!='0')";
mysql_query($sql);

(etc.)

Voila. J'espère que c'est plus clair comme ça.
c'est pas mon site mais je soutiens : http://www.consommateurendanger.org/

ViPHP
ViPHP | 5924 Messages

12 juil. 2009, 20:49

Tu fais une requête d'insertion par enregistrement ?

Eléphant du PHP | 83 Messages

12 juil. 2009, 21:05

Tu fais une requête d'insertion par enregistrement ?
Heu... j'ai beau regarder sur notre ami google, je ne pense pas saisir exactement l'expression "insertion par enregistrement". Je suis confus, mais en fait, je n'ai pas de connaissance académique en la matière.

Disons que j'enregistre dans une table mysql une série de données à l'aide de la commande insert.

exemple :

valeurs récupérées grace à un traitement initial de php :

id : 4 compta : 512 solde : 1200
id : 4 compta : 404 solde : 1000
id : 4 compta : 4457 solde : 200

Pour chaque ligne, je fais :

$sql="INSERT INTO back (identifiant, compta, solde) values ('$id', '$cc', '$resultat')";
mysql_query($sql);
c'est pas mon site mais je soutiens : http://www.consommateurendanger.org/

Eléphant du PHP | 217 Messages

12 juil. 2009, 21:11

Rien de plus que regexp et distinct? sur des champs longtext, normale que cela pose soucis je pense.

Oriente toi vers de la recherche full text plutot que du regexp.
Quant au distinct sur du longtext, ça me parait vraiment bizarre.

Je penserai sur une optimisation des champs mais sans en savoir plus sur les données à stocker(j'ai survolé le post) je ne pourrais en dire plus.

Je relierai le sujet en revenant dans 3 jours :)

Eléphant du PHP | 83 Messages

12 juil. 2009, 21:18

Rien de plus que regexp et distinct? sur des champs longtext, normale que cela pose soucis je pense.

Oriente toi vers de la recherche full text plutot que du regexp.
Quant au distinct sur du longtext, ça me parait vraiment bizarre.

Je penserai sur une optimisation des champs mais sans en savoir plus sur les données à stocker(j'ai survolé le post) je ne pourrais en dire plus.

Je relierai le sujet en revenant dans 3 jours :)
:-)

J'ai même pas de regex ni de distinct avec mysql : j'ai déjà délégué ça à php car côté sql, ça prenait vraiment trop trop trop trop de temps.

Les données à stocker sont des chiffres et des lettres, rien de binaires ou de choses exotiques.

C'est la masse d'info qui est trop importante. php est trop rapide pour mon mysql.
c'est pas mon site mais je soutiens : http://www.consommateurendanger.org/

ViPHP
ViPHP | 5924 Messages

12 juil. 2009, 21:51

Tu fais une requête d'insertion par enregistrement ?
Heu... j'ai beau regarder sur notre ami google, je ne pense pas saisir exactement l'expression "insertion par enregistrement". Je suis confus, mais en fait, je n'ai pas de connaissance académique en la matière.
Bah sur cette page notamment, ils donnent un exemple d'insertion multiple :

Code : Tout sélectionner

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
Tu peux gagner beaucoup de temps de (non) traitement.

Eléphant du PHP | 83 Messages

12 juil. 2009, 22:27

Code : Tout sélectionner

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
Tu peux gagner beaucoup de temps de (non) traitement.
Super, merci !!!

Il me reste à déterminer le nb de valeurs (1,2,3)(...) que je ne connais pas initialement et c'est bon. Avec php, j'aurai pas trop de mal à le coder je pense.

Merci !!
c'est pas mon site mais je soutiens : http://www.consommateurendanger.org/