在 SQL Server 2017 和 Azure SQL DB 中查找默认隔离级别

9 concurrency azure-sql-database isolation-level sql-server-2017

我正在阅读一本与事务和并发相关的书。在一段中提到:

  • 在本地 SQL Server 实例中,默认隔离级别是基于锁定的读取提交

下一句是:

  • SQL 数据库中的默认值是读取 - 基于行版本控制的已提交快照

我的问题是:这两句话中的“本地 SQL Server 实例”和“SQL 数据库”有什么区别?

什么是默认隔离级别,如何找到它?是否有任何特殊查询可以找出默认隔离级别?

Eri*_*ing 14

它指的是默认使用RCSI 的Azure SQL 数据库

隔离级别 SQL

数据库默认数据库范围设置是通过将 READ_COMMITTED_SNAPSHOT 和 ALLOW_SNAPSHOT_ISOLATION 数据库选项设置为 ON 来启用读提交快照隔离 (RCSI),在此处了解有关隔离级别的更多信息。您无法更改数据库默认隔离级别。但是,您可以在连接上显式控制隔离级别。

在本地 SQL Server 中,默认隔离级别是已提交读。

找到“默认”隔离级别有点像鹅追逐。这将取决于发起查询的数据库,以及查询中是否存在覆盖数据库级别设置的任何提示。

也就是说,您可以查询sys.databases以了解是否启用了 RCSI 或 SI。

SELECT d.name, 
       d.is_read_committed_snapshot_on, 
       d.snapshot_isolation_state
FROM sys.databases AS d;
Run Code Online (Sandbox Code Playgroud)

请注意,这在READ_COMMITTED_SNAPSHOT技术上不是隔离级别。相反,它是一个控制实现的数据库选项,以便使用行版本控制而不是锁定来为使用READ_COMMITTED隔离级别的会话提供读取一致性。