We have a java-based webapp that talks to MySQL 5.1 INNODB in READ_COMMITTED. 
We use Hibernate and optimistic concurrency, so periodically concurrent write 
attempts cause app-level Exceptions that trigger rollbacks (and then we retry 
tx). We've added app-level caching and turned down our tomcat NIO thread count 
to just 8 (very little contention inside the app) but now we're seeing that 
rollbacks appear to be up to 30x slower than commits?! Is that normal?

Here's a typical TX:

Set autocommit=0;
Select * from users where name="bob";
Update users set visit_count=X where id=bobId and version=Y
Commit;
Set autocommit=1;

When this tx is executed about 100 times/sec, appserver latency is about 10-15 
ms per http request (including db time). However, when instead of commit a 
'rollback' is issued, the latency spikes to 600-1100 ms (nearly all of that 
time in appserver appears to be spent waiting on db).

So is that expected cost of a rollback? Can anything be done to speed it up?

Thanks!

-nikita

Reply via email to