openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Pflueger <Michael.Pflue...@sma.de>
Subject AW: Speed of fetching simple entities using OpenJPA
Date Mon, 12 Sep 2011 19:12:51 GMT
Hi, here's the code:

		em = emf.createEntityManager();
		CriteriaBuilder cb = em.getCriteriaBuilder();
		CriteriaQuery<TestEntity> cqte = cb.createQuery(TestEntity.class);
		Root<TestEntity> rte = cqte.from(TestEntity.class);
		TypedQuery<TestEntity> qte = em.createQuery(cqte).setMaxResults(2000000);
		long queryTime = System.currentTimeMillis();
		List<TestEntity> entities = qte.getResultList();
		int cnt = 0;
		long sum = 0;
		for(TestEntity te : entities) {
			cnt++;
			sum += te.getId();
			if(cnt % 2000 == 0) {
				em.clear();
			}
		}
		//<code to output query time>

TestEntity just has that single ID attribute.
I could submit a zip including the tests and a persistence.xml tomorrow, i guess.

Does anyone on the openjpa dev team run such performance tests?
I guess those could be automated and run regularly against trunk so regressions are spotted
quickly.

Michael

-----Urspr√ľngliche Nachricht-----
Von: Rick Curtis [mailto:curtisr7@gmail.com] 
Gesendet: Montag, 12. September 2011 20:44
An: users@openjpa.apache.org
Betreff: Re: Speed of fetching simple entities using OpenJPA

Michael -

I wouldn't expect to see that large of a difference of JPA vs JDBC. Can you
describe your scenario a little better? Are you issuing just a single JPQL
to select all of your Entities?

Thanks,
Rick

On Mon, Sep 12, 2011 at 1:36 PM, Michael Pflueger
<Michael.Pflueger@sma.de>wrote:

> Hi,
> I compared JDBC and OpenJPA speed of fetching simple entities (consisting
> only of a single ID attribute). The speed difference seems quite severe.
>
> With JDBC, I can read 2 million entities in about 3 seconds when OS/DB
> caches are warm.
> With OpenJPA using slice (a single slice), it takes a bit above 30 seconds,
> so about ten times as long, more than I would expect.
> Using a direct connection without slice reduces this time to about 24
> seconds, ~8 times as much as the JDBC version.
>
> In the JDBC test I also create objects from the rows, so both tests include
> object creation overhead of the entities (plus a sum calculation of the
> IDs).
>
> I'm doing this test using PostgreSQL and an up to date OpenJPA 2.2
> snapshot.
> Entities are enhanced using javaagent enhancement.
>
> I tried optimizing OpenJPA performance with:
>      <property name="openjpa.ConnectionRetainMode"
> value="always"></property>
>      <property name="openjpa.ProxyManager" value="TrackChanges=false"/>
>      <property name="openjpa.IgnoreChanges" value="true"/>
>      <property name="openjpa.LockManager" value="none"/>
>      <property name="openjpa.DetachState"
> value="fetch-groups(DetachedStateField=false)"/>
>
> But those didn't seem to affect performance in any significant way.
>
> Now, is such a large performance hit expected, and what would be the
> reason?
> It would be nice if some performance numbers like these would be in the
> documentation, by the way, to be better able to judge for what applications
> OpenJPA can be used/what performance penalties one has to expect, depending
> on the situation.
>
> Regards,
> Michael
> ___________________________________________________
>
> SMA Solar Technology AG
> Aufsichtsrat: Guenther Cramer (Vorsitzender)
> Vorstand: Juergen Dolle, Roland Grebe, Uwe Hertel, Pierre-Pascal Urbon,
> Marko Werner
> Handelsregister: Amtsgericht Kassel HRB 3972
> Sitz der Gesellschaft: 34266 Niestetal
> USt-ID-Nr. DE 113 08 59 54
> WEEE-Reg.-Nr. DE 95881150
> ___________________________________________________
>
>


-- 
*Rick Curtis*

Mime
View raw message