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.