db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Gerz (JIRA)" <j...@apache.org>
Subject [jira] Created: (DERBY-3714) Significant performance degradation if Hibernate creates different order of attributes
Date Sat, 07 Jun 2008 09:33:45 GMT
Significant performance degradation if Hibernate creates different order of attributes
--------------------------------------------------------------------------------------

                 Key: DERBY-3714
                 URL: https://issues.apache.org/jira/browse/DERBY-3714
             Project: Derby
          Issue Type: Bug
          Components: Performance
    Affects Versions: 10.4.1.3, 10.3.2.1
         Environment: Windows XP with Java 6u5 (JavaDB de-installed!), various hardware (single
+ dual core processors)
            Reporter: Michael Gerz
            Priority: Critical


In our project we use Derby 10.4.1.3 in combination with the latest Hibernate Core 3.2.6.

When we migrated from Java 5 to 6, we noticed a huge performance hit.

After thorough analysis, we managed to pin down the problem to the order of the attributes
in a select statement created by Hibernate. The order seems to make a huge impact on the performance,
which is really strange.

A (very simplified) example of the problem is shown below. If more attributes and more joins
are added, the performance difference increases:

Bad Performance (5 result set entries in 3672ms) :
=======================================
select
	logevent0_.clazz_ as clazz_ from (
		select
			nullif('x','x') as RECEIVER,
			TEST_RUN_ID,
			2 as clazz_ from USER_LOG_EVENT
		union all select
			RECEIVER,
			TEST_RUN_ID,
			4 as clazz_ from DATA_FLOW_LOG_EVENT ) 
	logevent0_ where logevent0_.TEST_RUN_ID=?


Good Performance (5 entries in 610ms) :
=======================================
select
	logevent0_.clazz_ as clazz_ from (
		select
			TEST_RUN_ID,
			nullif('x','x') as RECEIVER,
			2 as clazz_ from USER_LOG_EVENT
		union all select
			TEST_RUN_ID,
			RECEIVER,
			4 as clazz_ from DATA_FLOW_LOG_EVENT ) 
	logevent0_ where logevent0_.TEST_RUN_ID=?


Table DATA_FLOW_LOG_EVENT has the attributes 
	TEST_RUN_ID BIGINT, 
	RECEIVER VARCHAR,...

wheras table USER_LOG_EVENT does NOT have the attribute RECEIVER.
	
As hibernate generates these select statements automatically, we are not able the change the
order of the attributes.

The real question is why there is such a difference in the execution speed, and how to avoid
this problem. (The complete query takes about 1-2sec in the fast version, and more than 50sec
in the slow version). This makes it impossible for us to use Derby+Hibernate with Java 6!

Any ideas?

Kind regards,

Michael


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message