Performance von .list() Methode

Tobi83

Mitglied
Hallo Leute,


Zuerst meine Arbeitsumgebung:
Hibernate 3
Oracle XE
Tomcat 6

Folgende Situation:
Ich erstelle mit Hibernate eine Criteria-Abfrage auf eine Tabelle mit ca 70 000 Einträgen.
Java:
List<PersonSkill> list =  HibernateUtil.getSession().createCriteria(PersonSkill.class).list();

Durch das erzeugen einer Liste dauert diese Abfrage 7-8 sec. Ich benutze Lazy-Loading, sodass er auch keine weiteren Daten selektiert werden. Ist diese Laufzeit normal. Das müsste doch eigentlich viel schneller gehen oder täusche ich mich da?
Könnte es an der Hibernate-Configuration oder Oracle XE liegen?

[XML]
<property name="connection.url">jdbc:eek:racle:thin:mad:ubuntu.rsn.local:1521:XE</property>
<property name="connection.username">tobi</property>
<property name="connection.password">123456</property>

<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>

<property name="current_session_context_class">thread</property>

<!-- Disable second-level cache. -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="cache.use_query_cache">false</property>
<property name="cache.use_minimal_puts">false</property>
<property name="max_fetch_depth">3</property>


<!-- Use the C3P0 connection pool. -->
<property name="c3p0.min_size">3</property>
<property name="c3p0.max_size">5</property>
<property name="c3p0.timeout">1800</property>


<!-- Print SQL to stdout. -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>[/XML]
 
M

maki

Gast
Ich erstelle mit Hibernate eine Criteria-Abfrage auf eine Tabelle mit ca 70 000 Einträgen.
Mein Frage wäre: Wofür?

Brauchst du wirklich alle diese Ergebnisse?
Wenn ja, und diese zB. für Reporting genutzt werden, ist ein ORM imho fehl am Platze.
Wenn nein, solltest du versuchen die Egebnisse weiter einzuschränken bzw. nicht alle zu laden, Query.setMaxResults und andere Varianten helfen hier.
 

Tobi83

Mitglied
Schon mal vielen Dank für deine schnelle Antwort.

Ich möchte Eigenschaften von Personen mit gegebenen Eigenschaften vergleichen. Wenn ich nun 3000 Personen habe und jede Person hat ca. 20 Eigenschaften dann komme ich schon auf 60000 Einträge.
Somit bräuchte ich schon alle Ergebnisse.

Habe gerade mal eine Abfrage direkt auf der Datenbankoberfläsche(APEX) erstellt. Da dauert diese Abfrage auch schon über 4 sec. Scheint wohl auch ein Performance Problem von Oracle xe zu sein.
 
M

maki

Gast
Ich möchte Eigenschaften von Personen mit gegebenen Eigenschaften vergleichen. Wenn ich nun 3000 Personen habe und jede Person hat ca. 20 Eigenschaften dann komme ich schon auf 60000 Einträge.
Somit bräuchte ich schon alle Ergebnisse.
Ja, dann brauchst du wohl alle.

Habe gerade mal eine Abfrage direkt auf der Datenbankoberfläsche(APEX) erstellt. Da dauert diese Abfrage auch schon über 4 sec. Scheint wohl auch ein Performance Problem von Oracle xe zu sein.
Dann kommen natürlich die üblichen verdächtigen in Verdacht, Indizes richtig gesetzt, vernünftige Datentypen gewählt, Tabellen u.U. Partitionieren.
Nutzt ihr einen 3rd Level Cache für Hibernate?
 

Tobi83

Mitglied
Denke schon das ich die richtigen Datentypen habe.
Ne benutze keinen 3rd Level Cache. Kenne nur den First- und Second-Level Cache von Hibernate.
Ich habe gerade mal eine Abfrage auf eine MySQL Datenbanktabelle mit 70000 Einträgen gemacht und da hat es 0,4 sec gedauert.
Denke das es wirklich mit Oracle XE liegt.
 

Ähnliche Java Themen

Neue Themen


Oben