Tune with the @Transactional annotation:
- propagation: "requires", "requires-new" or, the spring-specific, "nested" (=uses save points)
- isolation level: default: read committed
- set the readonly flag --> hint for runtime optimization.
Prefer native JDBC transactions over XA transactions:
- XA is difficult to setup
- run a transaction coordinator
- XA JDBC driver
- XA Message Broker
- put the XA recovery log to a reliable log storage
- XA has a significant run time overhead
- two phase commit
- state tracking
- recovery
- on restart: complete pending commits/rollbacks --> read the "reliable recovery log"
Check if you
really need XA! Prefer the use of a native transaction or combine two native transaction, with some small extra safety provisions. E. g. Usually the "exactly once" guarantee of an XA JMS can be relaxed --> use a native JMS transaction and detect duplicate messages. --> much higher throughput.
No comments:
Post a Comment