【问题标题】:Azure SQL - default isolation level when using ADO.NETAzure SQL - 使用 ADO.NET 时的默认隔离级别
【发布时间】:2019-08-18 15:16:19
【问题描述】:

在 Azure SQL 中,默认隔离级别是 RCSI。我理解这种行为。据我了解,对我来说打破它的是,在通过简单的 ADO.NET SqlConnection 选择我的数据时,我需要使用已提交的读取。我很难理解在进行简单选择时是否应用了行版本控制。使用 SqlConnection 时应用的默认隔离级别是什么?

编辑 从这里:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server#snapshot-isolation-level-extensions

我读过

READ_COMMITTED_SNAPSHOT 数据库选项确定在数据库中启用快照隔离时默认 READ COMMITTED 隔离级别的行为。如果您没有明确指定 READ_COMMITTED_SNAPSHOT ON,则 READ COMMITTED 将应用于所有隐式事务。这会产生与设置 READ_COMMITTED_SNAPSHOT OFF(默认值)相同的行为。当 READ_COMMITTED_SNAPSHOT OFF 生效时,数据库引擎使用共享锁来强制执行默认隔离级别。如果将 READ_COMMITTED_SNAPSHOT 数据库选项设置为 ON,则数据库引擎默认使用行版本控制和快照隔离,而不是使用锁来保护数据。

这是否意味着数据库只是将所有默认事务升级到 RCSI,因此如果未指定特定事务级别,它将对所有内容应用行版本控制?所以 SqlConnection 只是默认为 RCSI 而不是默认的读取提交。

【问题讨论】:

    标签: azure ado.net azure-sql-database


    【解决方案1】:

    Azure SQL 数据库默认的数据库范围设置是通过将 READ_COMMITTED_SNAPSHOT 和 ALLOW_SNAPSHOT_ISOLATION 数据库选项都设置为 ON 来启用已提交的读取快照隔离 (RCSI)。您不能更改数据库默认隔离级别。但是,您可以在连接上显式控制隔离级别。一种方法是,在开始事务之前,您可以在 Azure SQL 数据库中使用以下任一语句:

    SET TRANSACTION  ISOLATION LEVEL  SERIALIZABLE
    SET TRANSACTION  ISOLATION LEVEL  SNAPSHOT
    SET TRANSACTION  ISOLATION LEVEL  REPEATABLE READ
    SET TRANSACTION  ISOLATION LEVEL  READ COMMITTED
    SET TRANSACTION  ISOLATION LEVEL  READ UNCOMMITTED
    

    SET TRANSACTON ISOLATION LEVEL 控制由与 SQL Server 的连接发出的 Transact-SQL 语句的锁定和行版本控制行为,并跨越批处理(GO 语句)。以上所有操作都与 SQL Server 完全相同。

    另外,上面的语句“SET TRANSACTION ISOLATION LEVEL READ COMMITTED”将隔离级别设置为读提交快照隔离(RCSI)。此隔离级别不同于已提交读 (RC)。换句话说,“SET TRANSACTION ISOLATION LEVEL READ COMMITTED”在本地 SQL Server 中的默认行为是 RC,但在 Azure SQL 数据库中是 RCSI。如果要在 Azure SQL 数据库中使用精确的 RC(不是 RCSI)行为,您必须将锁hintREADCOMMITTEDLOCK 设置为SQL 语句。

    【讨论】:

    • 因此,通过启用 RCSI,所有曾经处于读取提交状态的事务现在都是行版本化的。我不必在我的代码中做任何事情。
    • 一切都默认运行 RCSI 并且行版本控制已经到位。你没有做任何事情。您可以在需要时使用 SET TRANSACTION ISOLATION LEVEL 更改该行为。
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2011-09-13
    • 2014-09-27
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多