What database isolation level does Camunda require?

What database isolation level does Camunda require to behave correctly?

We are embedding Camunda into an existing application that uses Spring-Managed Transactions. Our application will throw Camunda message events which will be synchronously received and processed in Camunda event sub-processes. These events should be processed as part of the outer application transaction. Sometimes our application uses READ_UNCOMMITTED transaction isolation level for performance reasons when running on Microsoft SQL Server. Our application is able to deal with the implications of using this isolation level but we are concerned about how Camunda will behave. Specifically we are concerned about processes firing more than once, not at all, seeing incorrect values for variables, and impacts on the Camunda optimistic locking scheme.

The documentation makes reference to ‘Custom Configuration for Microsoft SQL Server’ https://docs.camunda.org/manual/7.4/user-guide/process-engine/database/#custom-configuration-for-microsoft-sql-server and describes the READ_COMMITTED isolation level. We understand that ALLOW_SNAPSHOT_ISOLATION=ON mitigates SQL Server’s known issue of deadlocking; however, it is not clear to us if Camunda requires READ_COMMITED to behave properly or if this is general tuning advice.

Thanks,
Rob

Hi Rob,

Camunda requires READ_COMMITTED. We don’t test with READ_UNCOMMITTED, so I can’t say for sure how the engine would behave but I can imagine problems with optimistic locking.

Cheers,
Thorben

We should document that explicitly.

See https://app.camunda.com/jira/browse/CAM-5788