我正在读一本与交易和并发有关的书。在一个段落中提到:
- 在本地SQL Server实例中,默认隔离级别是基于锁定的已读提交
接下来的句子是:
- SQL数据库中的默认值为读取-基于行版本的已提交快照
我的问题是:这两个句子中的“本地SQL Server实例”和“ SQL数据库”之间有什么区别?
什么是默认隔离级别,如何找到它?是否有任何特殊查询来查找默认隔离级别?
我正在读一本与交易和并发有关的书。在一个段落中提到:
接下来的句子是:
我的问题是:这两个句子中的“本地SQL Server实例”和“ SQL数据库”之间有什么区别?
什么是默认隔离级别,如何找到它?是否有任何特殊查询来查找默认隔离级别?
Answers:
它指的是默认情况下使用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
隔离级别为会话提供读取一致性。