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


9

我正在读一本与交易和并发有关的书。在一个段落中提到:

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

接下来的句子是:

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

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

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

Answers:


13

它指的是默认情况下使用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;

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.