Salut à tous !
Je travaille actuellement sur le développement d'un plugin pour Nagios qui permet d'analyser les logs. En deux mots, une application sur les machines distantes stocke dans une base de données les logs correspondant à des filtres définis par l'administrateur.
Côté serveur Nagios, le plugin se charge de récupérer ses données, de les enregistrer dans ses propres tables et de fournir un résultat.
Seulement, j'ai un petit souci que je souhaiterai optimiser. J'ai constaté qu'une requête prend pas mal de temps et je n'ai pas trouvé de meilleure solution pour effectuer cette opération et c'est pourquoi je sollicite votre aide charitable :)
Voilà : j'ai sur le serveur une table HISTORIQUE_ALERTES et une table MESSAGE_LOG. La première conserve un historique des alertes (par ex, tentative échouée de connexion ssh) et la seconde les messages correspondant dans les fichiers de log. Une clé étrangère dans MESSAGE_LOG permet de savoir à quelle alerte le message est rattaché : plusieurs messages peuvent correspondre à une alerte.
Le souci, c'est pour "synchroniser" ces valeurs. J'ai donc ajouté un champ dans chacune des deux tables qui contient une valeur créée en concaténant différentes informations de manière à rendre chaque couple identifiable de manière unique à un instant
t. Je pense que je pourrais ne fonctionner qu'avec une égalité entre ces deux champs pour faire des jointures, mais je trouve ça un peu dégueulasse ; donc je veux utiliser la clé étrangère et supprimer la valeur des champs servant à la synchronisation.
Je sais pas si je suis très clair, mais j'insère la requête, ça vous donnera une idée :
update MESSAGE_LOG set MESSAGE_LOG.HIS_NUM = (select H.HIS_NUM from HISTORIQUE_MESSAGE H where H.MEA_ID = MESSAGE_LOG.MEA_ID) where MESSAGE_LOG.MEA_ID IS NOT NULLC'est donc relativement long puisque pour chaque update, ça va chercher dans l'autre table la ligne correspondante. Si j'ai été suffisamment clair, auriez-vous une idée pour alléger un peu la charge de mon petit serveur MySQL qui tire la langue ? Dans le cas contraire je me ferai une joie (enfin tout est relatif) de répondre à vos questions si vous avez besoin de plus de détails.
Merci !