Azure SQL - 使用 ADO.NET 时的默认隔离级别
Azure SQL - default isolation level when using ADO.NET
在 Azure SQL 中,默认隔离级别是 RCSI。我理解这种行为。据我了解,对我来说,打破它的是,当通过简单的 ADO.NET SqlConnection selecting 我的数据时,我需要使用 read committed。我很难理解在执行简单 select 时是否应用了行版本控制。使用 SqlConnection 时应用的默认隔离级别是什么?
我读了
The READ_COMMITTED_SNAPSHOT database option determines the behavior of the default READ COMMITTED isolation level when snapshot isolation is enabled in a database. If you do not explicitly specify READ_COMMITTED_SNAPSHOT ON, READ COMMITTED is applied to all implicit transactions. This produces the same behavior as setting READ_COMMITTED_SNAPSHOT OFF (the default). When READ_COMMITTED_SNAPSHOT OFF is in effect, the Database Engine uses shared locks to enforce the default isolation level. If you set the READ_COMMITTED_SNAPSHOT database option to ON, the database engine uses row versioning and snapshot isolation as the default, instead of using locks to protect the data.
这是否意味着数据库只是将所有默认事务升级为 RCSI,因此如果未指定特定事务级别,它会将行版本控制应用于所有内容?所以 SqlConnection 只是默认为 RCSI 而不是默认的读取已提交。
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 服务器的连接发出的 Transact-SQL 语句的锁定和行版本控制行为并跨越批次(GO 语句)。以上所有工作与 SQL Server.
完全相同
此外,上面的语句"SET TRANSACTION ISOLATION LEVEL READ COMMITTED"会将隔离级别设置为读提交快照隔离(RCSI)。此隔离级别不同于已提交读 (RC)。换句话说,“SET TRANSACTION ISOLATION LEVEL READ COMMITTED”在本地 SQL 服务器中的默认行为是 RC,但在 Azure SQL 数据库中是 RCSI。如果你想使用精确的 RC(不是RCSI) Azure SQL 数据库中的行为,您必须将锁 hint READCOMMITTEDLOCK 设置为 SQL 语句。
在 Azure SQL 中,默认隔离级别是 RCSI。我理解这种行为。据我了解,对我来说,打破它的是,当通过简单的 ADO.NET SqlConnection selecting 我的数据时,我需要使用 read committed。我很难理解在执行简单 select 时是否应用了行版本控制。使用 SqlConnection 时应用的默认隔离级别是什么?
我读了
The READ_COMMITTED_SNAPSHOT database option determines the behavior of the default READ COMMITTED isolation level when snapshot isolation is enabled in a database. If you do not explicitly specify READ_COMMITTED_SNAPSHOT ON, READ COMMITTED is applied to all implicit transactions. This produces the same behavior as setting READ_COMMITTED_SNAPSHOT OFF (the default). When READ_COMMITTED_SNAPSHOT OFF is in effect, the Database Engine uses shared locks to enforce the default isolation level. If you set the READ_COMMITTED_SNAPSHOT database option to ON, the database engine uses row versioning and snapshot isolation as the default, instead of using locks to protect the data.
这是否意味着数据库只是将所有默认事务升级为 RCSI,因此如果未指定特定事务级别,它会将行版本控制应用于所有内容?所以 SqlConnection 只是默认为 RCSI 而不是默认的读取已提交。
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 服务器的连接发出的 Transact-SQL 语句的锁定和行版本控制行为并跨越批次(GO 语句)。以上所有工作与 SQL Server.
完全相同此外,上面的语句"SET TRANSACTION ISOLATION LEVEL READ COMMITTED"会将隔离级别设置为读提交快照隔离(RCSI)。此隔离级别不同于已提交读 (RC)。换句话说,“SET TRANSACTION ISOLATION LEVEL READ COMMITTED”在本地 SQL 服务器中的默认行为是 RC,但在 Azure SQL 数据库中是 RCSI。如果你想使用精确的 RC(不是RCSI) Azure SQL 数据库中的行为,您必须将锁 hint READCOMMITTEDLOCK 设置为 SQL 语句。