Inaktiv Abfrage Timeout legt kompletten Mandante lahm - keine Amazon Abgleiche möglich - 1.5.11.2

SebiW

Sehr aktives Mitglied
2. September 2015
2.414
1.005
Nach Update auf die 1.5.11.2 gestern haben wir extreme Lastspitzen auf dem Server.
Äußert sich in Timeouts bei der Erstellung von Picklisten in der RoKo, Verbindungsabbrüchen und massiven Wartezeiten, Aussetzern in der Wawi.
Ich vermute das hat mit der Stücklistenbestandsberechnung zu tun, zumindest sagt mir der Server, dass folgende Abfrage heftig Last frisst.
Hat jemand ähnliche Probleme? Ticket ist auf, falls eine Lösung gefunden wird stell ich die hier rein.

Code:
UPDATE #TempDataLagerbestand
       SET #TempDataLagerbestand.fLagerbestand = ISNULL(Lagerbestand.fLagerbestand, 0.0),
       #TempDataLagerbestand.fVerfuegbar = ISNULL(Lagerbestand.fVerfuegbar, 0.0),
       #TempDataLagerbestand.fInAuftraegen = ISNULL(Reserviert.fInAuftraegen, 0.0),
       #TempDataLagerbestand.fVerfuegbarGesperrt = ISNULL(Lagerbestand.fVerfuegbarGesperrt, 0.0),
       #TempDataLagerbestand.fZulauf = ISNULL(Lagerbestand.fZulauf, 0.0),
       #TempDataLagerbestand.fAufEinkaufsliste = ISNULL(Lagerbestand.fAufEinkaufsliste, 0.0),
       #TempDataLagerbestand.dLieferdatum = Lagerbestand.dLieferdatum,
       #TempDataLagerbestand.fLagerbestandEigen = ISNULL(Lagerbestand.fLagerbestandEigen, 0.0),
       #TempDataLagerbestand.fAuslieferungGesperrt = ISNULL(Lagerbestand.fAuslieferungGesperrt, 0.0)
      FROM  #TempDataLagerbestand
      JOIN (
    SELECT
     dbo.tArtikel.kArtikel,
     dbo.tArtikel.cArtNr,
     Stuecklisten.kStueckliste,
     CASE
      WHEN fLagerbestandDominant = 1000000000 AND fLagerbestandNichtDominant = 1000000000 THEN CAST(0 AS DECIMAL(28,14))
      WHEN fLagerbestandDominant = 1000000000 THEN CAST(fLagerbestandNichtDominant AS DECIMAL(28,14))
      WHEN fLagerbestandNichtDominant = 1000000000 THEN CAST(fLagerbestandDominant AS DECIMAL(28,14))
      ELSE CAST(fLagerbestandDominant AS DECIMAL(28,14))
     END AS fLagerbestand,
     CASE
      WHEN fLagerbestandEigenDominant = 1000000000 AND fLagerbestandEigenNichtDominant = 1000000000 THEN CAST(0 AS DECIMAL(28,14))
      WHEN fLagerbestandEigenDominant = 1000000000 THEN CAST(fLagerbestandEigenNichtDominant AS DECIMAL(28,14))
      WHEN fLagerbestandEigenNichtDominant = 1000000000 THEN CAST(fLagerbestandEigenDominant AS DECIMAL(28,14))
      ELSE CAST(fLagerbestandEigenDominant AS DECIMAL(28,14))
     END AS fLagerbestandEigen,
     CASE
      WHEN fVerfuegbarGesperrtDominant = 1000000000 AND fVerfuegbarGesperrtNichtDominant = 1000000000 THEN CAST(0 AS DECIMAL(28,14))
      WHEN fVerfuegbarGesperrtDominant = 1000000000 THEN CAST(fVerfuegbarGesperrtNichtDominant AS DECIMAL(28,14))
      WHEN fVerfuegbarGesperrtNichtDominant = 1000000000 THEN CAST(fVerfuegbarGesperrtDominant AS DECIMAL(28,14))
      ELSE CAST(fVerfuegbarGesperrtDominant AS DECIMAL(28,14))
     END AS fVerfuegbarGesperrt,
     CASE
      WHEN fZulaufDominant = 1000000000 AND fZulaufNichtDominant = 1000000000 THEN CAST(0 AS DECIMAL(28,14))
      WHEN fZulaufDominant = 1000000000 THEN CAST(fZulaufNichtDominant AS DECIMAL(28,14))
      WHEN fZulaufNichtDominant = 1000000000 THEN CAST(fZulaufDominant AS DECIMAL(28,14))
      ELSE CAST(fZulaufDominant AS DECIMAL(28,14))
     END AS fZulauf,
     fAufEinkaufsliste,
     CASE
      WHEN dLieferdatum = CAST('01.01.1900' AS DATETIME) THEN NULL
      ELSE dLieferdatum
     END AS dLieferdatum,
     CASE
      WHEN fVerfuegbarDominant = 1000000000 AND fVerfuegbarNichtDominant = 1000000000 THEN CAST(0 AS DECIMAL(28,14))
      WHEN fVerfuegbarDominant = 1000000000 THEN CAST(fVerfuegbarNichtDominant AS DECIMAL(28,14))
      WHEN fVerfuegbarNichtDominant = 1000000000 THEN CAST(fVerfuegbarDominant AS DECIMAL(28,14))
      ELSE CAST(fVerfuegbarDominant AS DECIMAL(28,14))
     END AS fVerfuegbar,
     CASE
      WHEN fAuslieferungGesperrtDominant = 1000000000 AND fAuslieferungGesperrtNichtDominant = 1000000000 THEN CAST(0 AS DECIMAL(28,14))
      WHEN fAuslieferungGesperrtDominant = 1000000000 THEN CAST(fAuslieferungGesperrtNichtDominant AS DECIMAL(28,14))
      WHEN fAuslieferungGesperrtNichtDominant = 1000000000 THEN CAST(fAuslieferungGesperrtDominant AS DECIMAL(28,14))
      ELSE CAST(fLagerbestandDominant AS DECIMAL(28,14))
     END AS fAuslieferungGesperrt
    FROM dbo.tArtikel
    JOIN
    (
     SELECT
      tStueckliste.kStueckliste,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN tArtikel.cLagerKleinerNull = 'Y' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST(tlagerbestand.fLagerbestand / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(FLOOR(tlagerbestand.fLagerbestand / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fLagerbestandDominant,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST(tlagerbestand.fLagerbestand / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(FLOOR(tlagerbestand.fLagerbestand / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fLagerbestandNichtDominant,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN tArtikel.cLagerKleinerNull = 'Y' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST(tlagerbestand.fLagerbestandEigen / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(FLOOR(tlagerbestand.fLagerbestandEigen / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fLagerbestandEigenDominant,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST(tlagerbestand.fLagerbestandEigen / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(FLOOR(tlagerbestand.fLagerbestandEigen / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fLagerbestandEigenNichtDominant,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN tArtikel.cLagerKleinerNull = 'Y' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST((tlagerbestand.fVerfuegbar - tArtikel.nPuffer) / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(FLOOR((tlagerbestand.fVerfuegbar - tArtikel.nPuffer) / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fVerfuegbarDominant,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST((tlagerbestand.fVerfuegbar - tArtikel.nPuffer) / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(FLOOR((tlagerbestand.fVerfuegbar - tArtikel.nPuffer) / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fVerfuegbarNichtDominant,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN tArtikel.cLagerKleinerNull = 'Y' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST(tlagerbestand.fVerfuegbarGesperrt / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(FLOOR(tlagerbestand.fVerfuegbarGesperrt / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fVerfuegbarGesperrtDominant,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST(tlagerbestand.fVerfuegbarGesperrt / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(CEILING(tlagerbestand.fVerfuegbarGesperrt / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fVerfuegbarGesperrtNichtDominant,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN tArtikel.cLagerKleinerNull = 'Y' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST(tlagerbestand.fZulauf / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(FLOOR(tlagerbestand.fZulauf / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fZulaufDominant,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST(tlagerbestand.fZulauf / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(FLOOR(tlagerbestand.fZulauf / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fZulaufNichtDominant,
      CASE
       WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST(MIN(tlagerbestand.fAufEinkaufsliste / tStueckliste.fAnzahl)  AS DECIMAL(28,14))
       ELSE CAST(FLOOR(MIN(ISNULL(tlagerbestand.fAufEinkaufsliste, 0.0) / tStueckliste.fAnzahl)) AS DECIMAL(28,14))
      END AS fAufEinkaufsliste,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN tArtikel.cLagerKleinerNull = 'Y' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST(tlagerbestand.fAuslieferungGesperrt / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(FLOOR(tlagerbestand.fAuslieferungGesperrt / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fAuslieferungGesperrtDominant,
      MIN(ISNULL(CASE
        WHEN tArtikel.cLagerAktiv = 'N' THEN CAST(1000000000 AS DECIMAL(28,14))
        WHEN VaterArtikel.cTeilbar = 'Y' THEN CAST(tlagerbestand.fAuslieferungGesperrt / tStueckliste.fAnzahl AS DECIMAL(28,14))
        ELSE CAST(FLOOR(tlagerbestand.fAuslieferungGesperrt / tStueckliste.fAnzahl) AS DECIMAL(28,14))
       END, 0.0)) AS fAuslieferungGesperrtNichtDominant,
      MAX(ISNULL(tlagerbestand.dLieferdatum, CAST('01.01.1900' AS DATETIME))) AS dLieferdatum
     FROM dbo.tStueckliste
     JOIN dbo.tArtikel AS VaterArtikel ON VaterArtikel.kStueckliste = tStueckliste.kStueckliste
     JOIN dbo.tArtikel ON tArtikel.kArtikel = tStueckliste.kArtikel
     JOIN #TempDataLagerbestand AS tlagerbestand ON tlagerbestand.kArtikel = tArtikel.kArtikel
     GROUP BY tStueckliste.kStueckliste, VaterArtikel.cTeilbar
    ) AS Stuecklisten ON Stuecklisten.kStueckliste = tArtikel.kStueckliste
    ) AS Lagerbestand ON Lagerbestand.kArtikel = #TempDataLagerbestand.kArtikel
      LEFT JOIN (
        SELECT tReserviert.kArtikel AS kArtikel,
        SUM(ISNULL(tReserviert.fAnzahl, 0.0)) AS fInAuftraegen
        FROM dbo.tReserviert
        GROUP BY tReserviert.kArtikel
       ) AS Reserviert ON Lagerbestand.kArtikel = Reserviert.kArtikel
      WHERE #TempDataLagerbestand.nArtikelTyp = 1
 
Zuletzt bearbeitet:

SebiW

Sehr aktives Mitglied
2. September 2015
2.414
1.005
Ich konnte eindeutig die Bestandsberechnung im Umfeld von Amazon Abgleichen als Fehlerherd identifizieren. Der obige Prozess läuft in einen Timeout und mündet in der Fehlermeldung im Anhang.
 

Anhänge

  • errorlog_20191122113525.txt
    21,9 KB · Aufrufe: 4

guidob

Gut bekanntes Mitglied
8. März 2014
301
20
Wir haben die Version noch nicht angefasst und arbeiten noch mit der 1.4.Allerdings haben wir ein ähnliches Problem. Von welcher Version kommt Ihr denn?

Viele Grüße
Guido
 

SebiW

Sehr aktives Mitglied
2. September 2015
2.414
1.005
Hi Guido, wir sind von der 1.5.9.0 auf die 1.5.11.2 gewechselt. Vorher keine Probleme, jetzt Totalausfall.
 

SebiW

Sehr aktives Mitglied
2. September 2015
2.414
1.005
Für alle ähnlich betroffenen. Das Problem stammt in unserem Fall aus einer großen Menge an Stücklisten her, die jeweils zahlreiche Stücklistenkomponenten teilen.
JTL ist in der Minute auf unserer DB und arbeitet an einem Workaround. Dieser wird sicher auch in die nächsten Versionen einfließen.
Übrigens haben wir uns entschieden wegen dieses Problems Goldsupport zu kaufen ... im Endeffekt ist ein halber Tag Amazon Ausfall x-fach teurer ;)
 

Ähnliche Themen