如何检测启用了 READ_COMMITTED_SNAPSHOT?

在 Microsoft SQL Server 中,有没有一种方法可以检测数据库是否已经通过 T-SQL 命令 ALTER DATABASE <database> SET READ_COMMITTED_SNAPSHOT ON;设置了隔离级别?

无论是在 T-SQL 中还是通过 ManagementStudio 的 GUI,我都找不到一种简单的方法来检测这一点。

126454 次浏览
SELECT is_read_committed_snapshot_on FROM sys.databases
WHERE name= 'YourDatabase'

返回值:

  • 1 : READ_COMMITTED_SNAPSHOT选项是 开始READ COMMITTED隔离级别下的读操作基于快照扫描,不获取锁。
  • 0 (默认) : READ_COMMITTED_SNAPSHOT选项是 关掉。读取 READ COMMITTED隔离级别下的操作使用 共享(S)锁

在 SQL2005和2012上,DBCC USEROPTIONS都没有显示 is_read_committed_snapshot_on:

Set Option  Value
textsize    2147483647
language    us_english
dateformat  mdy
datefirst   7
lock_timeout    -1
quoted_identifier   SET
arithabort  SET
ansi_null_dflt_on   SET
ansi_warnings   SET
ansi_padding    SET
ansi_nulls  SET
concat_null_yields_null SET
isolation level read committed
  1. 根据 DBCC USEROPTION (Transact-SQL):

当数据库选项 READ _ COMMITTED _ SNAPSHOT 设置为 ON,而事务隔离设置为“ READ commit”时,DBCC USEROPTION 报告隔离级别为“读提交快照”。实际的隔离级别被读提交。

  1. 同样在 SQLServerManagementStudio 中,在 Options-> Misxie 下的数据库属性中有“读取提交的快照”选项状态