Danke @Checconio für die DB, die du mir privat geschickt hast, ich konnte eine kleine Leistungsüberprüfung an deinen Daten durchführen und es hat mir sehr geholfen, ich habe das Problem gefunden! ![]()
Zuerst war das Problem sehr klar, es war sogar auf meinem Entwicklungsrechner, der recht leistungsstark ist, extrem langsam, ich weiß nicht, wie du das aushältst, es war ultra langsam ^^
Um das zu veranschaulichen, sah ich das:
Fast 40 Sekunden, um die Seite anzuzeigen, das ist einfach enorm ^^
Ich habe Gladys lokal im Debug-Modus ausgeführt, um die ausgeführten SQL-Abfragen zu sehen, und ich habe sie manuell auf der DB, « live », ausgeführt.
6 Sekunden für eine Abfrage, die nichts zurückgibt, das ist viel!
Ich habe also den Faden aufgegriffen, es gibt 2 Bedingungen in dieser Abfrage (WHERE device_feature_id = ? AND created_at >= ?), und diese beiden Attribute haben tatsächlich einen Index…
Ich führe EXPLAIN QUERY PLAN aus, um zu verstehen, was SQLite tut, und ich verstehe.
SQLite konnte den Index auf device_feature_id verwenden, um alle Zustände dieser Funktion zu finden, aber dann führte es einen sequenziellen Scan durch, um nach Datum zu filtern: der Index auf dem Datum wurde nicht verwendet.
Die Lösung ist ganz einfach, es reicht, einen Index hinzuzufügen, der die 2 Attribute abdeckt, die bei der Abfrage verwendet werden.
Ich habe also 2 Indizes auf device_feature_state und t_device_feature_state_aggregate hinzugefügt, die die Attribute abdecken, die bei den Abfragen des Dashboards verwendet werden.
await queryInterface.addIndex('t_device_feature_state', ['device_feature_id', 'created_at']);
await queryInterface.addIndex('t_device_feature_state_aggregate', ['device_feature_id', 'type', 'created_at']);
Und dann: bam! Diese gleiche Abfrage geht von 6 Sekunden auf… 5ms !! ![]()
Auf der gesamten Seite gehen wir von 40 Sekunden auf.. 100 ms auf meinem Rechner!
Ich hatte es dir gesagt, es lag nicht an SQLite, wir hätten das gleiche Problem auf MySQL gehabt;)
Ich habe einen PR erstellt, der das Problem behebt, es wird in der nächsten Version von Gladys veröffentlicht:
@Terdious @lmilcent das wird euch interessieren, ihr, die ihr viele Daten habt!

