Um, das Problem zu untersuchen haben wir die 3 gleich konfigurierte virtuelle Server mit Debain 9, 10 und 11 installiert, dieselbe Kundendatenbank darauf aus einem Backup zurück gelesen und dann die Performance gemessen.
Dabei sind wir auf ein – zugegeben extremes – Beispiel gestoßen:
Die Abfrage
Code: Alles auswählen
SELECT L.AKT_ID, COUNT(L.LGS_ID) AS AktCnt
FROM AKTION L
JOIN SATZ S ON (L.LGS_ID = S.LGS_ID) AND (S.AUSGANG IS NULL) AND (S.VERLOREN_FLG = 'N')
WHERE (L.ERLEDIGT IS NULL)
AND (L.STORNO_FLG = 'N')
AND (NOT L.AKT_ID IN (5, 8, 3, 58, 59, 60))
GROUP BY l.Akt_ID;
Die gleiche Abfrage benötigt unter Debian 10 und 11 ca. 14 Minuten(!). Sie wird auch nicht schneller, wenn man sie erneut ausführt.
Der Queryplan ist auf allen Versionen gleich:
Code: Alles auswählen
PLAN SORT (JOIN (S INDEX (IDX_SATAUSGANG), L INDEX (RDB$FOREIGN34)))
Code: Alles auswählen
SELECT L.AKT_ID, COUNT(L.LGS_ID) AS AktCnt
FROM AKTION L
WHERE (L.ERLEDIGT IS NULL)
AND (L.STORNO_FLG = 'N')
AND (L.AKT_ID NOT IN(5, 8, 3, 58, 59, 60))
AND EXISTS (SELECT LGS_ID
FROM SATZ S
WHERE (S.LGS_ID = L.LGS_ID)
AND (S.AUSGANG IS NULL)
AND (S.VERLOREN_FLG = 'N'))
GROUP BY l.Akt_ID;
Das Ergebnis besteht aus 11 Zeilen mit Insgesamt 29.499 betroffenen Datenätzen. Die Tabelle SATZ enthält 354.239 Zeilen, die Tabelle AKTION 6.613.330 Zeilen.
Kennt jemand diesen Effekt?
Vielen Dank im Voraus
Dirk