Ich habe eine Anwendung, die ich mit einem zugegebenermaßen schlechten Datenmodell geerbt habe. Momentan versuche ich, einen Bandaid draufzusetzen.Entity.list() Hibernate Performance
Wir haben eine zunehmend schlechte Leistung festgestellt, da mehr Daten in das System geladen werden, selbst bei Operationen, die mit einer abgefragten Teilmenge der Daten arbeiten sollten (d. H. Ein Datensatz gleichzeitig).
Wir verwenden New Relic und haben festgestellt, dass ein erheblicher Teil unserer Anfrage in EntityName.list()
für Transaktionen mit Kriterienabfragen verbracht wird. Keine unserer Entitäten hat jedoch eine list()
Methode. Es ist mein Verständnis, dass Kriterienabfragen in SQL übersetzt werden und die Abfrage tatsächlich in der Datenbank-Engine stattfindet, anstatt alle Entitäten aufzulisten und dann die Java-Objekte abzufragen. Ist das genau? Irgendeine Idee, was die list()
Methode in New Relic ist?
Nur um klar zu sein, merke ich, dass eine ganze Liste oder select * ...
auf einem riesigen Tisch eine Weile dauern würde. Das Problem besteht darin, dass wir Kriterienabfragen verwenden, um die Tabelle abzufragen und nicht alle Datensätze aufzulisten. Meine Frage ist: Woher kommt der Verweis auf Entity.list()
in New Relic?
Was auch immer diese 'list' Methode ist, ich denke, es werden alle Zeilen mit einer Abfrage wie' SELECT * FROM TABLE_NAME' ausgewählt. Wenn Ihr Tisch riesig ist, kann das eine Weile dauern ... – jchampemont
Ich denke, VisualVM oder Jprofiler verwenden und decken Sie Ihren Code, wo Sie denken, schlecht und finden Sie Linie zu Schöpfer dieses Problem –