Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'aurais besoin d'aide svp pour un problème de requête qui est devenue très lente du jour au lendemain, sans que les données dans les tables n'aient explosées entre temps.
Sur un serveur postgres 11 (debian) de 80Go avec environ 400 utiilisateurs, une des requêtes est devenue soudainement très lente: elle s'exécutait en quelques millièmes de secondes et prends maintenant plus de 2 minutes.
Cette requête contient une vue A qui elle même utilise une autre vue B.
Si je place le code sql de la vue A directement dans ma requête, en en faisant une sous requête, là le résultat est instantané.
Auriez vous svp une idée de ce qui peut se passer?
Merci pour votre aide
Hors ligne
J'apporte une précision, je viens de découvrir que le blocage est lié à une table qui vient d'être créée, et qui est vide. C'est une table qui hérite d'une autre table utilisée dans la vue B.
En supprimant cette nouvelle table tout se débloque.
Je ne comprends pas comment la simple création d'une table peut bloquer.
Hors ligne
Bonjour,
peut-être tout simplement un problème de statistiques pas à jour qui tromperait le planificateur ?.
Le mieux serait de comparer les plans d'exécution avant et après la création de cette nouvelle table et ensuite de recalculer les stats de la base entière pour voir s'il y a du mieux.
Cordialement,
Sébastien.
Hors ligne
Bonjour,
Merci pour la réponse. Je ferai des tests pour voir si effectivement cela corrige le problème.
Hors ligne
Bonjour je ne sais pas si c'est ici que je dois poser ma préoccupation
j'ai un problème et je souhaite une assiste
j'ai deux tables par exemple:
Facture(code verchar(8),date datetime,montant real) avec le champ code qui est une clef unique
ensuite la table
Lifact(code varchar(8), codart int, qte real) avec les champs (code,codart) qui reprensentent une clef unique
Le champ code du fichier Lifact fait reference à la table Facture....
Lorsque j'exécute ceci dans une seule transaction:
BEGIN TRANSACTION
INSERT INTO FACTURE ('NB0014',NOW(),5000);
INSERT INTO LIFACT ('NB0014','BAR0005',10);
END;
j'ai le message d'erreur suivant: une instruction insert viole la contrainte de clef étrangère, le clef "code=('NB0014') n'est pas présente dans la table FACTURE
l'erreur est à quel niveau? devais je d'abord enregistrer complètement la première ligne avant de procéder à l'enregistrement de la seconde ligne? et si c'est le cas je cours le risque d'avoir des informations dans le Fichier FACTURE SANS CORRESPONDANCE DANS LE FICHIER LIFACT.
S.O.S
Hors ligne
1. Non, ce n'est pas ici. Vous auriez dû créer un nouveau thread plutôt que d'utiliser un autre thread qui n'a rien à voir.
2. J'ai essayé de reproduire votre exemple mais sans succès : verchar au lieu de varchar, datetime qui n'existe pas avec postgres, begin sans point-virgule, insert sans clause values, et surtout ce qui a fait déborder le vase, deux chaînes de caractères dans l'INSERT de LIFACT alors qu'il n'y a qu'un seul varchar dans la déclaration de la table. Bref. Commencez par proposer un exemple réellement valide syntaxiquement et montrant votre problème si vous espérez obtenir une réponse intéressante.
Guillaume.
Hors ligne
Pages : 1