db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Josef Duschl" <Dus...@CreamTeam.de>
Subject Performance Problems: Derby & Hibernate - Update of many entries in a table with foreign key constraints
Date Thu, 19 Nov 2009 17:25:25 GMT
Hi there,

I'm using Derby and Hibernate (coupled to EMF & Teneo) in an Eclipse rich
client application. The Derby version is 10.5.3.0, the Hibernate tools
version is 3.2.4.GA-R200905070146-H18.

My application implements a synchronization mechanism, which pulls Objects
off a Webservice. There are master data objects which need to be completely
synchronized every time because there are no version or change information
available. This results in a lot of updated rows in the tables.

Upon saving the Hibernate EMF resource, the program grinds to a halt in the
following place: 
Thread [ModalContext] (Suspended)	
	UpdateResultSet.foundRow(ExecRow, int[], TemporaryRowHolderImpl)
line: 1013	
	UpdateResultSet.runChecker(boolean) line: 975	
	UpdateResultSet.open() line: 264	
	GenericPreparedStatement.executeStmt(Activation, boolean, long)
line: 416	
	GenericPreparedStatement.execute(Activation, long) line: 297	
	
EmbedPreparedStatement30(EmbedStatement).executeStatement(Activation,
boolean, boolean) line: 1235	
	
EmbedPreparedStatement30(EmbedPreparedStatement).executeStatement(Activation
, boolean, boolean) line: 1675	
	EmbedPreparedStatement30(EmbedPreparedStatement).executeUpdate()
line: 302	
	NonBatchingBatcher.addToBatch(Expectation) line: 23	
	OneToManyPersister(AbstractCollectionPersister).remove(Serializable,
SessionImplementor) line: 1048	
	CollectionUpdateAction.execute() line: 41	
	ActionQueue.execute(Executable) line: 250	
	ActionQueue.executeActions(List) line: 234	
	ActionQueue.executeActions() line: 144	
	
DefaultFlushEventListener(AbstractFlushingEventListener).performExecutions(E
ventSource) line: 298	
	DefaultFlushEventListener.onFlush(FlushEvent) line: 27	
	SessionImpl.flush() line: 1000	
	HbSessionWrapper.flush() line: 171	
	HibernateResource.saveResource(Map<?,?>) line: 375	
	HibernateResource(StoreResource).save(Map<?,?>) line: 430	
	SynchronizationWizard$1.run(IProgressMonitor) line:
	ModalContext$ModalContextThread.run() line: 121	

There are two nested while loos in runChecker and foundRow which iterate
over the same data. One call of foundRow takes about 3 seconds. The result
sets contain >2000 elements as far as I can see.

Is there any way to disable these checks or to make them faster (ie utilize
the index on the primary key of the table)?

Kind Regards,

Josef



Mime
View raw message