-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 
Author Message
 Post subject: Performance Problem mit Order by
PostPosted: Sat Jan 10, 2009 3:50 pm 
Newbie

Joined: Sat Jan 10, 2009 3:37 pm
Posts: 7
Hallo Zusammen

Ich bin leider noch neu im Bereich NHibernate... Habe Google
und das Forum durchsucht aber habe keine Antwort auf meine Frage gefunden.

Folgendes..
Ich habe eine Tabelle mit 100000 Datensätzen (MSSQL Express)
Ich brauche mittels SQL Server Management Studio Express (SQL Abfragefenster) für den untenstehenden Select ca. 1sek...

select top 250 * from XXX order by Datum desc;

(Das Datum ist ein DateTime Feld ;) und hat einen Index auf der DB)

Wenn ich nun mittels NHibernate den gleichen Select absetze dauert es
wesentlich länger, ca. 17sek !!

session.CreateCriteria(typeof(XXX))
.AddOrder( Order.Desc("Datum ") )
.SetMaxResults(250)
.List();


Weiss jemand wieso das so ist?

Hoffe auf eine Antwort! Merci!


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jan 11, 2009 3:19 pm 
Beginner
Beginner

Joined: Mon Dec 29, 2008 3:25 pm
Posts: 20
wie lange dauert es wenn du mit hibernate den select mal direkt absetzst???

session.CreateSQL("Select....");

wie lange dauer das???


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jan 11, 2009 4:29 pm 
Senior
Senior

Joined: Thu Jan 08, 2009 3:48 pm
Posts: 168
Dreh bitte das SQL-Log auf und poste was Hibernate aus der Criteria Query macht.

Wie hast Du die 17 Sekunden gemessen?
Kann es sein dass Deine Applikation irgendwas mit den Daten macht was vielleicht so lange dauert?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jan 12, 2009 2:06 pm 
Newbie

Joined: Sat Jan 10, 2009 3:37 pm
Posts: 7
@SirWayne
Danke, werde ich gleich mal ausprobieren...

@pkleindl
Ich benutze log4net und schreibe mir mittels timespan die exakte Dauer
des Hibernate Statements raus:

DateTime start = DateTime.Now;
session.CreateCriteria(typeof(XXX)).AddOrder( Order.Desc("Datum ") )
.SetMaxResults(250)
.List();

TimeSpan diff = DateTime.Now - start;
Log.Debug(......)


Das SQL Log von Hibernate schreibt mir das Statement so raus wie
man es erwarten würde. Wenn ich es kopiere und im Database painter von
SQL Server Management Studio absetze dauert es 1-2sek.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jan 12, 2009 5:57 pm 
Senior
Senior

Joined: Thu Jan 08, 2009 3:48 pm
Posts: 168
Das klingt in der Tat seltsam.

Abgesehen von dem Tip das SQL direkt auszuführen könntest Du noch folgende Kombinationen probieren

Klasse direkt angeben statt dem typeof
addOrder weglassen
setMaxResults weglassen

Oder als HQL session.createQuery("from xxx order by Datum").setMaxResults(250).list();
Auch wenn das genau gleich gehen sollte.

Ev. hilft das bei der Eingrenzung was davon die Probleme macht.

Aber wenn das ausgegebene SQL beim direkten Ausführen korrekt funktioniert sollte es das auch innerhalb von Hibernate, zumindest war das bei mir bisher immer so.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jan 13, 2009 5:54 am 
Expert
Expert

Joined: Thu Jan 08, 2009 6:16 am
Posts: 661
Location: Germany
Mit deiner Zeitmessung misst du nicht nur die Dauer des Statements, wenn du es mit Hibernate absetzt.

Du misst auch die Dauer, die gebraucht wird, um die Criteria zu erstellen und danach das Ergebnis in Objekte zu mappen.
Falls du (etwas) genauer messen willst, könntest du erst die Criteria erstellen und die Anfangszeit vor der list-Methode speichern.

Trotzdem gebe ich dir Recht, 17 Sekunden ist sehr lang. Hast du mal das Hibernate-Loglevel Debug gesetzt? Besonders org.hibernate.type wird dir mehr Infos über das Mapping der Objekte geben, vielleicht erkennst du dabei, was soviel Zeit in Anspruch nimmt.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.