Firebird unter Debian 10 (Buster) deutlich langsamer als unter Debian 9 (Stretch)
Verfasst: Di 30. Mär 2021, 13:52
Wir haben eine Software basierend auf einer Firebird Datenbank. Diese läuft schon seit Jahren auf Debian Servern. Nach dem Update der Server von Debian 9 (Strech, Firebird 3.0.2) auf Debian 10 (Buster, Firebird 3.0.5) ist das Programm langsamer geworden. Der Effekt ist dabei unabhängig von der Hardwareausstattung der Server oder davon, ob es virtualisiert ist oder nicht.
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
Läuft nach einem Reboot auf dem Debian 9 Server in ca. 45 Sekunden durch, wenn man Sie erneut ausführt benötigt sie noch ca. 1,6 Sekunden.
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:
Wenn man die Abfrage umformuliert:
Läuft sie auf allen 3 Varianten beim ersten Mal 30 Sekunden und beim zweiten Aufruf ca. 10 Sekunden Auf dem Debian 11 (Firebird 3.0.7) Server ca 7. Sekunden.
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
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