La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 29/04/2024 01:00:29


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14064
Localisation: Quadran Alpha
Répondre en citant
Posté le : 27/08/2004 13:37:24 Sujet du message : Problème "Fatal error: Maximum execution time of 10 sec

Bonjour,

Depuis ses débuts, le forum a bien grandi, et en même temps qu'il a grandi, d'autres choses ont grandies (jusque là je suis énigmatiques). Parmi ces choses, il y a les messages postés... et l'indexation.

Explications :

phpbb2 vient avec un système de recherche basé sur l'indexation des mots-clefs dans un message. Par exemple, lorsque j'aurai posté ce message des mots-clefs seront récupérés, avec par exemple "indexation".

1. phpbb2 se voulant économe (et on ne peut pas lui en vouloir sur le coup), il va d'abord rechercher le mot "indexation" dans une table - phpbb_search_wordlist - (si vous préférez imaginez que vous faites une recherche dans un fichier Excell, vous recherchez dans la première colonne qui contient les mots-clefs).

2. Il se passe deux choses : le mot "indexation" est trouvé, ou il ne l'est pas. Dans le premier cas, on récupère ce que l'on appelle un identifiant - des identifiants y en a partout dans phpbb : exemple avec l'adresse de la page de post : posting.php?mode=newtopic&f=1, 1 fait partie de ces identifiants - qui nous servira plus loin. Dans l'autre cas, on ajoute le mot, et on récupère son identifiant.

3. Une fois que l'on a récupéré l'identifiant du mot "indexation", on va ajouter des données permettant de relier ce mot au message. En d'autres termes, ce message aura par exemple l'identifiant X, il faudra l'associer avec le mot clef "indexation" qui a l'identifiant Y. Ces données sont ajoutées dans une autre table : phpbb_search_wordmatch.

4. Là, je n'ai parlé que du mot "indexation". Comme vous pouvez le constater mon message est long, très long. Il n'y aura donc pas qu'"indexation" a devoir être indexé, il va y avoir d'autres mots comme identifiant, etc. Et il faudra refaire toute l'opération d'indexation (étape 1, 2 et 3) pour chaque mots.

Parmi tout ça, il y a des mots qui ne devraient pas passer :

ça
il
des
qui
ne

Ces mots sont trop courants, mais ils passent quand même. C'est à dire que vous pouvez rechercher les mots-clefs "ça", "il", etc.

Plus que ça : voici le nombre de message contenant les mots énoncés plus haut :

des : 26261
il : 3694
ne : 13487
qui : 23744
ça : 2924

Cela fait déjà pas mal de messages contenant ces mots.

5. Actuellement la table phpbb_search_wordmatch culmine dans les 3 millions de données, et la table phpbb_search_wordlist dans les 150.000. C'est ce qui fait que vous pouvez avoir l'erreur fatale énoncées plus haut : l'insertion/sélection met trop de temps, et ça timeout (littéralement, ça a mis trop de temps à fonctionner)

Que faire pour améliorer ça ?

Actuellement, vous ne pouvez rien faire. C'est à moi qu'il incombe de chercher une solution, et si j'en ai quelques une, il faut ensuite les mettre en place... sachant que modifier le code de phpbb2 est comme déclencher le compteur d'une bombe H (oui, c'est mal codé, ou en tout cas, faut cerner ce que font les auteurs de phpbb2...).

Toujours est-il : je pense dans le présent qui va venir (bref, bientôt) supprimer les mots clefs courant, ainsi que les mots clefs qui ne sont constitués que de nombres (000000000000, etc). Et bien entendu, il faut déjà faire une liste des mots clefs courants.

Cela ne devrait pas résoudre le problème (faudrait revoir l'architecture de la recherche en plus propre surtout...), mais cela devrait réduire le nombre de mots-clefs facilitant l'insertion de nouveaux et diminuant le nombre d'enregistrements de phpbb_search_wordmatch.

A noter : lors de l'édition, c'est à peu près les mêmes étapes en pire. Je ne sais plus exactement comment phpbb2 s'y prend, mais il me semble qu'il supprime tous les mots clefs du message pour les recréer.

Que faire si j'y suis confronté ?

Typiquement, quand il y a timeout, tout le code php qui est écrit après la routine qui a causé le timeout ne sera pas interprété. Et, parmi ce code il y a (vous l'aurez deviné hein) le code d'insertion/édition du message. Donc en gros, votre message n'est pas envoyé.

Vous devez recommencer jusqu'à fin du timeout...

Solutions possibles

1. Virer les mots clefs courant
2. Virer l'indexation [mais on ne pourra plus rechercher sur les nouveaux messages]
3. Refaire le système d'indexation [mais je bosse sur la v3] : en stockant les messages sans les options de formattage (bbcode, smilies, html), les mots courants (une liste de mots est à créer) et en utilisant une recherche FULLTEXT sur une table qui copie phpbb_posts_text pour ne contenir que la partie textes des postes. C'est une idée, peut-être pas la meilleure.

Si quelqu'un connaît bien php, et aussi phpbb2, et qu'il se sent près à résoudre ceci, je lui souhaite la bienvenue.
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
olfleouf
Acolyte
Inscrit le: 21 Nov 2003
Messages: 35
Répondre en citant
Posté le : 28/08/2004 12:55:48 Sujet du message :

La solution a sûrement déjà été envisagée, mais je préfère le marquer tout de même :
[http]

En nettoyant les bons mots, et en empêchant leur future indexation, ca devrait aider.
_________________
Arkanis, forum jeux de rôle dungeons et dragons 3.5
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14064
Localisation: Quadran Alpha
Répondre en citant
Posté le : 29/08/2004 13:57:26 Sujet du message :

J'ai fait, j'ai fait. J'en ai supprimé 1 Million comme ça.
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 22.078ms