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.
Ä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: