Azure-Sql-Database
在 SQL Server 2017 和 Azure SQL DB 中查找預設隔離級別
我正在閱讀與事務和並發相關的書。在一段中提到:
- 在本地 SQL Server 實例中,預設隔離級別是基於鎖定的已送出讀
下一句是:
- SQL 數據庫中的預設值是基於行版本控制的讀取送出快照
我的問題是:這兩個句子中的“本地 SQL Server 實例”和“SQL 數據庫”有什麼區別?
什麼是預設隔離級別,如何找到它?是否有任何特殊查詢可以找出預設隔離級別?
它指的是預設使用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
隔離級別的會話提供讀取一致性。