SQLTeam.com | Weblogs | Forums

Lenteur soudaine requête sql

Bonjour à tous,
J'ai un problème au niveau de la requête Mrp, en fait pendant presque 5 ans le temps d'exécution de cette requête n'a jamais dépassé 3 heures, depuis 2 mois il passe à 19 heures.
Après le diagnostique fait par notre intégrateur ce dernier nous a affirmer que le problème est lié à une mauvaise infrastructure( hyperviseur mal configuré, office et sql installer sur hyperviseur, mal configuration antivirus, les carte réseau sont aussi mal configurer...)
Il recommander de migrer la version de Windows et de sql server, d'utiliser des disques ssd.
Je sais que tout ces recommandation sont des bonnes pratiques et des améliorations qu'on peut faire mais réellement est ce que c'est ça l'origine de lenteur qui touche seulement une requête parmi une centaine, à noter qu'on a d'autre requête plus complexe que cette requête et on a rien constaté.
De plus une requête qui marche normal pendant 5 ans sur la même infrastructures peut être lente d'un coup à cause de cet infra jugé mal configuré ?
S'il vous plaît j'ai besoin de vos avis pour que je puisse élaborer un plan d'action et avancer sur le sujet

je recommende de migrer l'intégrateur. je blague.

3 heures pour quel requete, ca c'est deja trop!

Bonjour,
C'est un script pour calculer le CBN:calcul de besoin net, c'est vrai que c'est trop mais le problème maintenant est bloquant et j'aimerais savoir si le résultat du diagnostique est logique ou non

Cest possible mais sans avoir examiner ton/tes serveurs c'est une decision aveugle.

Donne nous le script. Sans avoir vue le script cest diviner. Je peux te dire cest une sourie

bonjour,
voila le script:
SELECT (CASE WHEN
GROUPING(BB.REFCO)=0 AND
GROUPING(BB.SREF1CO)=1 AND
GROUPING(BB.SREF2CO)=1 AND

GROUPING(MOUV.REF)=1

THEN 'TOTAL ' + BB.REFCO
WHEN
GROUPING(BB.REFCO)=0 AND
GROUPING(BB.SREF1CO)=0 AND
GROUPING(BB.SREF2CO)=0 AND

GROUPING(MOUV.REF)=1

THEN 'SOUS-TOTAL ' +BB.REFCO + '' + BB.SREF1CO + '' + BB.SREF2CO
ELSE BB.REFCO END) AS REF_ARTICLE,ART.DES AS DESIGNATION_ARTICLE,

              BB.REFCO + '' + BB.SREF1CO + '' +  BB.SREF2CO AS REF_SREF1_SREF2,BB.REFCO, BB.SREF1CO, BB.SREF2CO, ART.REFUN AS UNITE_REFERENCE,  ENT. DELDEMDT  AS DATE_LIV_CMD,

ISNULL((SELECT QTE_EN_STOCK FROM ZVW_TR_QTE_STOCK_DEPO_TR_REF_SREF WITH (NOLOCK) WHERE REFCOMP=BB.REFCO AND SREF1COMP=BB.SREF1CO AND SREF2COMP=BB.SREF2CO),0) AS QTE_PHYSIQUE,
ISNULL(BF.PINO,0) AS OF_NUM, ISNULL(BF.STATUS,0) AS OF_STATUT,

ISNULL(BF.UQTETOTOF,0) AS QTE_LANCEE,

ISNULL(BG.CDQTE,0) AS QTE_REQUISE,
ISNULL(( SELECT QTE_CONSOMMEE FROM ZVW_TR_QTE_CONSOMME_PAR_OF WITH (NOLOCK) WHERE REF_CO=BB.REFCO AND SREF1_CO=BB.SREF1CO AND SREF2_CO=BB.SREF2CO AND OF_NUM=BF.PINO ),0)
AS QTE_CONSOMMEE

, MOUV.REF AS REF_PF, MOUV.DES AS DES_PF, MOUV.SREF1 AS TRAITEMENT, ENT_1.PINO AS NUM_CMD_MATIERE,

ISNULL(( SELECT SUM(QTE_ACHAT)
FROM ZVW_TR_TOTAL_ACHAT_CMD_FOU_REF_SREF WITH (NOLOCK) WHERE REFCOMP=BB.REFCO AND SREF1COMP=BB.SREF1CO AND SREF2COMP=BB.SREF2CO AND CMD_ACHAT=ENT_1.PINO),0) AS QTE_CDE_ACHAT
, ENT_1.TIERS AS CODE_FOURNISSEUR, FOU.NOM AS lIB_FOURNISSEUR,
(CASE WHEN
GROUPING(BB.REFCO)=0 AND
GROUPING(BB.SREF1CO)=1 AND
GROUPING(BB.SREF2CO)=1
THEN ISNULL((SELECT SUM(BESOIN) FROM ZVW_TR_BESOIN_PAR_COMBINAISON_CMD_REF_SREF WITH (NOLOCK) WHERE REFCOMP=BB.REFCO ),0)
WHEN
GROUPING(BB.REFCO)=0 AND
GROUPING(BB.SREF1CO)=0 AND
GROUPING(BB.SREF2CO)=0 AND

GROUPING(MOUV.REF)=1
THEN ISNULL((SELECT SUM(BESOIN) FROM ZVW_TR_BESOIN_PAR_COMBINAISON_CMD_REF_SREF WITH (NOLOCK) WHERE REFCOMP=BB.REFCO AND SREF1COMP=BB.SREF1CO AND SREF2COMP=BB.SREF2CO),0)
ELSE
ISNULL((SELECT SUM(BESOIN) FROM ZVW_TR_BESOIN_PAR_COMBINAISON_CMD_REF_SREF WITH (NOLOCK) WHERE REFCOMP=BB.REFCO AND SREF1COMP=BB.SREF1CO AND SREF2COMP=BB.SREF2CO AND
CMD_CLIENT
=ENT.PINO),0) END) AS BESOIN,

ISNULL(SUM(MOUV.CDQTE),0) AS NB_PIECE,
(CASE WHEN
GROUPING(BB.REFCO)=0 AND
GROUPING(BB.SREF1CO)=0 AND
GROUPING(BB.SREF2CO)=0 AND

GROUPING(MOUV.REF)=0
THEN ENT.PIREF
ELSE 'ACHAT SUGG'
END)AS REF_CMD_CLIENT,
(CASE WHEN
GROUPING(BB.REFCO)=0 AND
GROUPING(BB.SREF1CO)=1 AND
GROUPING(BB.SREF2CO)=1 AND

GROUPING(MOUV.REF)=1
THEN
-----******-------
ISNULL((SELECT SUM(BESOIN) FROM ZVW_TR_BESOIN_PAR_COMBINAISON_CMD_REF_SREF WITH (NOLOCK) WHERE REFCOMP=BB.REFCO ),0)

  • ISNULL(( SELECT SUM(QTE_ACHAT)
    FROM ZVW_TR_TOTAL_ACHAT_CMD_FOU_REF_SREF WITH (NOLOCK) WHERE REFCOMP=BB.REFCO ),0)-
    ISNULL((SELECT SUM(QTE_EN_STOCK) FROM ZVW_TR_QTE_EN_STOCK_PAR_REF_SREF_TISSU WITH (NOLOCK) WHERE REFTISSU=BB.REFCO ),0)
  • ISNULL( (SELECT SUM(QTE_CONSOMMEE) FROM ZVW_TR_QTE_CONSOMME_OF_REF_SREF WITH (NOLOCK) WHERE REF_COMP=BB.REFCO ),0)

WHEN
GROUPING(BB.REFCO)=0 AND
GROUPING(BB.SREF1CO)=0 AND
GROUPING(BB.SREF2CO)=0 AND

GROUPING(MOUV.REF)=1
THEN
----******--------
ISNULL((SELECT SUM(BESOIN) FROM ZVW_TR_BESOIN_PAR_COMBINAISON_CMD_REF_SREF WITH (NOLOCK) WHERE REFCOMP=BB.REFCO AND SREF1COMP=BB.SREF1CO AND SREF2COMP=BB.SREF2CO),0)
-ISNULL(( SELECT SUM(QTE_ACHAT)
FROM ZVW_TR_TOTAL_ACHAT_CMD_FOU_REF_SREF WITH (NOLOCK) WHERE REFCOMP=BB.REFCO AND SREF1COMP=BB.SREF1CO AND SREF2COMP=BB.SREF2CO),0)
-ISNULL((SELECT QTE_EN_STOCK FROM ZVW_TR_QTE_EN_STOCK_PAR_REF_SREF_TISSU WITH (NOLOCK) WHERE REFTISSU=BB.REFCO AND SREF1TISSU=BB.SREF1CO AND SREF2TISSU=BB.SREF2CO ),0)

  • ISNULL( (SELECT SUM(QTE_CONSOMMEE) FROM ZVW_TR_QTE_CONSOMME_OF_REF_SREF WITH (NOLOCK) WHERE REF_COMP=BB.REFCO AND SREF1COMP=BB.SREF1CO AND SREF2COMP=BB.SREF2CO),0)
    --------*******----
    ELSE
    ENT.PINO END ) AS CMD_CLIENT,
    ENT.TIERS AS CODE_CLIENT,
    CLI.NOM AS LIB_CLIENT

FROM BG WITH (NOLOCK) INNER JOIN
BF WITH (NOLOCK) ON BG.DOS = BF.DOS AND BG.PINO = BF.PINO RIGHT OUTER JOIN
CLI WITH (NOLOCK) INNER JOIN
ENT WITH (NOLOCK) INNER JOIN
MOUV WITH (NOLOCK) ON ENT.DOS = MOUV.DOS AND ENT.TICOD = MOUV.TICOD AND ENT.PICOD = MOUV.PICOD AND ENT.PINO = MOUV.CDNO AND ENT.CE4 = 1 AND
ENT.PICOD = 2 AND ENT.TICOD = 'C' AND ENT.DEPO='FG' INNER JOIN
BB WITH (NOLOCK) ON MOUV.DOS = BB.DOS AND MOUV.REF = BB.REF AND MOUV.SREF1 = BB.SREF1 AND MOUV.SREF2 = BB.SREF2 AND MOUV.SENS=2 AND MOUV.DEPO='FG' ON CLI.DOS = ENT.DOS AND CLI.TIERS = ENT.TIERS ON
BG.SREF2 = BB.SREF2CO AND BG.SREF1 = BB.SREF1CO AND BG.REF = BB.REFCO AND BF.CDNO = MOUV.CDNO AND BF.SREF1 = MOUV.SREF1 AND
BF.REF = MOUV.REF AND BF.DOS = MOUV.DOS LEFT OUTER JOIN
MOUV AS MOUV_1 WITH (NOLOCK) INNER JOIN
ENT AS ENT_1 WITH (NOLOCK) ON MOUV_1.DOS = ENT_1.DOS AND MOUV_1.PICOD = ENT_1.PICOD AND MOUV_1.TICOD = ENT_1.TICOD AND MOUV_1.CDNO = ENT_1.PINO AND
ENT_1.PICOD = 2 AND ENT_1.TICOD = 'F' AND ENT_1.CE4 = 1 AND ENT_1.DEPO = 'TR' AND MOUV_1.SENS = 1 INNER JOIN
FOU WITH (NOLOCK) ON ENT_1.DOS = FOU.DOS AND ENT_1.TIERS = FOU.TIERS ON BB.DOS = MOUV_1.DOS AND BB.REFCO = MOUV_1.REF AND
BB.SREF1CO = MOUV_1.SREF1 AND BB.SREF2CO = MOUV_1.SREF2 INNER JOIN ART WITH (NOLOCK) ON ART.DOS=BB.DOS AND ART.REF=BB.REFCO
AND ART.PRODNAT='1M'
--WHERE (BB.REFCO = 'ATTACHE3')
GROUP BY grouping sets ((BB.REFCO,ART.DES,ART.REFUN, BB.SREF1CO, BB.SREF2CO, MOUV.REF, MOUV.DES, MOUV.SREF1, ENT.PINO,ENT.PIREF, ENT.TIERS, CLI.NOM, ENT.DELDEMDT, ENT_1.PINO, ENT_1.TIERS,
FOU.NOM, BF.PINO, BF.STATUS, BF.UQTETOTOF, BG.CDQTE),(BB.REFCO, BB.SREF1CO, BB.SREF2CO),(BB.REFCO))

ORDER BY BB.REFCO, BB.SREF1CO DESC , BB.SREF2CO DESC , MOUV.REF DESC, MOUV.DES DESC, MOUV.SREF1 DESC, ENT.PINO DESC , BF.PINO DESC, ENT_1.PINO DESC

Cauchemar!

  1. ceci n'est pa SQL c'est snowflake. ce forum est pour sql server
  2. tous ces sous query
ISNULL(( SELECT SUM(QTE_ACHAT)

ISNULL(( SELECT QTE_CONSOMMEE

etc elimine les et essaye le query pour voir si ca rend la requete un peux plus rapid pour test.

  1. Est ce que tu as des index sur les table column que tu utilise pour filtre et pour JOIN?

Bonjour,
merci pour votre réactivité.
je suis pas expert en SQL je vais laissé ce genre de test pour l'intégrateur.
j'ai voulu juste savoir si le résultat de notre intégrateur sont logique ou non.

encore une fois, c'est possible mais .... je concentrerait su ce script Cauchemar. Ou es le developeur de ce script.

"de migrer la version de Windows et de sql server, d'utiliser des disques ssd." c'est un suggestion commun des integrateurs qui ne savent pas ce qui se passe. jeter toute sorte de $$$ sur equipement. premierement au moin tu dois fixer ce script. meme avec toute choise nouveaux je suis sure que le problème refera surface dans quelque moi