#1 2007-08-24 19:30:24

patnoe
Membre
Alsace
2007-08-22
34

problème fonction tags

Ma Base environ 366 900 photos.

Avant Identification et en sélectionnant la fonction tags, les lignes suivantes s'affichent :

SELECT id, name, url_name, count(*) counter
  FROM phpwebgallery_image_tag
    INNER JOIN phpwebgallery_tags ON tag_id = id
  WHERE image_id IN (669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684,
685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 89238, 89239, 89240, 89241,
................................
................................
de nombreuses lignes s'affichent comme suit

367000, 367001, 367002, 367003, 367004, 367005, 367006, 367007, 367008, 367009,
367010, 367011, 367012, 367013, 367014, 367015, 367016, 367017, 367018, 367019)
  GROUP BY tag_id
;
[mysql error 2006] MySQL server has gone away

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in E:\www\phpwebgallery\include\functions_tag.inc.php on line 87

UPDATE phpwebgallery_sessions
  SET expiration = now(),
  data = ''
  WHERE id = '37c2e9bff16b52699fa057e365984a8d'
;
[mysql error 2006] MySQL server has gone away


Après Identification, la fonction génère le même défaut.

Rub a constaté le problème
Merci d'avance pour ton intervention

Dernière modification par patnoe (2007-08-25 08:06:59)

Hors ligne

#2 2007-08-25 01:28:31

rub
Former Piwigo Team
Lille
2005-08-26
5239

Hors ligne

#3 2007-08-25 11:26:20

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: problème fonction tags

MySQL server has gone away

Le serveur est parti, AMHA, parce que la Clause IN est trop longue et dépasse la taille du buffer (tronquée).

Calcul de la longueur du IN:

1->9 c'est x virgule espace càd. 3 caractères = 27
10->99 càd 4 => 90 *4 = 360
100->999 => 900 * 5 = 4500
1000->9999 = 54000
10000->99999 = 630000
100000->367019 = 267020 * 8 = 2136160

C'est plus de 2 Mo.
Il a des grand trou dans la série notre "patnoe".
En plus, je ne connait pas la limite de MySQL mais le pb est là.

Plutôt que de faire une jointure... qui sera exponentielle.
Soit:
1 - J'optimiserai la liste
WHERE (image_id  between 669 and 694) or (image_id  between 89238 and 89473)
or (image_id  between 364810 and 367019)
or image_id IN ( 89247, 12667, ..., 342176 )

2 - Je ferai une liste inverse NOT IN (....)

3 - Je ferai plusieurs requêtes en limitant à 500 valeurs le IN et array_merge() - Cette solution pouvant se cumuler avec les précédentes.

Le découpage de la rêquete ou son optimisation étant sur option d'une $conf
car cela ne concerne que les GROS tagueurs (tes tagueurs fous?).

8-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#4 2007-08-25 11:41:01

patnoe
Membre
Alsace
2007-08-22
34

Re: problème fonction tags

Pas compris grand chose, pour les TAGS le nombre que j'ai créé est égal = 0.

Merci VDigital

As-tu testé mon lien ?

Patnoe

ou Patrice

Hors ligne

#5 2007-08-25 12:33:30

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: problème fonction tags

Oui, je sais.
La réponse devrait être immédiate.
C'est pourquoi à mon avis le fait qu'on lui dise "regarde dans cette liste des images" et que la liste est très longue que le serveur coté MySQL se plante car la demande est finalement trop longue dans le texte.

8-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#6 2007-08-25 12:36:43

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: problème fonction tags

J'ai testé et le gone away répond immédiatement ce qui me fait imaginer ce pb.
8-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#7 2007-08-25 12:45:28

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: problème fonction tags

La requête fait 2,72 Mo (2 855 585 octets).

8-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#8 2007-08-25 12:48:04

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: problème fonction tags

Pourrais-tu me mettre dans un groupe où je ne verrai que la moitié des catégories...?

Histoire de voir si à moins de 2Mo la requête est traitée normalement et répond instantanément.
8-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#9 2007-08-25 13:30:02

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: problème fonction tags

Nouveau pb (de quoi inquiéter vimages)...

SELECT DISTINCT image_id
  FROM phpwebgallery_image_category
  WHERE (category_id NOT IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,..,12770,12771,12772,12773,12774,12775,12776,12777,12778,12779,12780,))
;
[mysql error 1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))' at line 3


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\www\phpwebgallery\include\functions.inc.php on line 884

soit
  WHERE (category_id NOT IN (1,2,3,4,5,...,12776,12777,12778,12779,12780,))
near )) c'est la virgule sans doute mais...
Monsieur MySQL, cette requête, plus simple, tourne des milliers de fois par jour.

8-(


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#10 2007-08-25 15:02:59

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: problème fonction tags

VDigital a écrit:

Plutôt que de faire une jointure... qui sera exponentielle.
Soit:
1 - J'optimiserai la liste
WHERE (image_id  between 669 and 694) or (image_id  between 89238 and 89473)
or (image_id  between 364810 and 367019)
or image_id IN ( 89247, 12667, ..., 342176 )

Je ne suis pas d'accord sur ce cas précis car c'est TOUTE la table image qui est passé en paramètre et par la suite les id images ne sont plus utilisés.
Exponentiel surement pas si les indexes sont correctes (bien au contraire)

Tes autres méthodes fonctionnent bien sur correctement mais dans tes cas où la liste des id est partiel et pas full.

Hors ligne

#11 2007-08-25 15:05:08

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: problème fonction tags

VDigital a écrit:

Nouveau pb (de quoi inquiéter vimages)...

SELECT DISTINCT image_id
  FROM phpwebgallery_image_category
  WHERE (category_id NOT IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,..,12770,12771,12772,12773,12774,12775,12776,12777,12778,12779,12780,))
;
[mysql error 1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))' at line 3


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\www\phpwebgallery\include\functions.inc.php on line 884

soit
  WHERE (category_id NOT IN (1,2,3,4,5,...,12776,12777,12778,12779,12780,))
near )) c'est la virgule sans doute mais...
Monsieur MySQL, cette requête, plus simple, tourne des milliers de fois par jour.

8-(

Une solution simple et rapide est de passer par la table #cache et par jointure.
Le seule endroit ou ce n'est pas applicable c'est lors de l'alimentation de la table #cache mais il y a plusieurs méthodes pour le faire.

Hors ligne

#12 2007-08-25 15:07:40

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: problème fonction tags

VDigital a écrit:

Le découpage de la rêquete ou son optimisation étant sur option d'une $conf
car cela ne concerne que les GROS tagueurs (tes tagueurs fous?).

patnoe est un tagueurs à zéro tag!! ;-)

Hors ligne

#13 2007-08-25 17:09:31

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: problème fonction tags

J'ai bien compris... Reste que

WHERE image_id IN (669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684,
685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 89238, 89239, 89240, 89241,
................................
................................

dépasse les 2.7Mo

8-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#14 2007-08-25 17:59:15

rvelices
Équipe Piwigo
2005-12-29
1417

Re: problème fonction tags

rub a écrit:

Une solution simple et rapide est de passer par la table #cache et par jointure.
Le seule endroit ou ce n'est pas applicable c'est lors de l'alimentation de la table #cache mais il y a plusieurs méthodes pour le faire.

Je suis pour laisser MySql se debrouiller ... Il y a des chances qu'il optimise bien les requetes ...

Hors ligne

#15 2007-08-25 19:09:08

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: problème fonction tags

Ce n'est pas faux...
8-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact