A Confluence backed by MS SQL Server can run into deadlocking problems when not using transaction isolation level 'Read Committed with Row Versioning'. This often occurs silently without warning in Confluence logs:
To the observer, the symptom is that the application 'hangs', with or without errors in the Confluence logs. In the case of an upgrade, when observing the logs an upgrade task will be seemingly 'stuck' and refuse to proceed (no errors).
We should check for DB transaction isolation level during start up and print an error/warning in the logs if not using the recommended isolation. We can also go one step further and prevent the application from starting, like we do for MySQL if they're not using READ-COMMITTED.