mysql qui bloque

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : mysql qui bloque

par Sékiltoyai » 13 juil. 2009, 22:34

ok

par kanaille » 13 juil. 2009, 22:22

De rien.
Ca a résolu ton problème ?
A fond : mysqld ne bloque plus du tout. J'utilise 'mtop' qui permet de voir en ligne de commandes (tu dois sûrement connaître) l'utilisation du serveur sql. A présent, je n'ai plus du tout de ligne en rouge maintenant.

C'est vraiment top maintenant !!!

par Sékiltoyai » 13 juil. 2009, 22:16

De rien.
Ca a résolu ton problème ?

par kanaille » 13 juil. 2009, 22:12

Bah tu n'as pas besoin de le connaître.
Au lieu de faire n requêtes, tu concatènes tout dans une seule requête et tu l'exécutes à la fin…
Oui, c'est ce que j'ai fais, merci.

J'ai fais des tests ce soir et le résultat est le suivant : lorsque je lance mon script, il est un peu plus lent que le script précédent (ex: 17 secondes avec la méthode initiale et 19 avec la seconde). Par contre, lorsque je traite une série de données en lançant une vingtaine de fois ce script, c'est beaucoup beaucoup beaucoup plus rapide.

Mille mercis Sékiltoyai !!

par Sékiltoyai » 12 juil. 2009, 23:53

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.
Bah tu n'as pas besoin de le connaître.
Au lieu de faire n requêtes, tu concatènes tout dans une seule requête et tu l'exécutes à la fin…

par kanaille » 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 !!

par Sékiltoyai » 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.

par kanaille » 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.

par mojorisin » 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 :)

par kanaille » 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);

par Sékiltoyai » 12 juil. 2009, 20:49

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

par kanaille » 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.

par Sékiltoyai » 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 ? :)

par kanaille » 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

par Sékiltoyai » 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.