OK, trở về nhà và thử nghiệm. Đây là sự quan sát.
CREATE DATABASE TEST;
GO
CREATE TABLE TABLE1
(
ID tinyint,
Details varchar(10)
);
GO
INSERT INTO TABLE1
VALUES (1, 'Original');
GO
SELECT
name,
snapshot_isolation_state_desc,
is_read_committed_snapshot_on
FROM sys.databases
WHERE name = 'TEST';
GO
Thử nghiệm đầu tiên với cả hai cài đặt được xác nhận là TẮT.
Truy vấn 1
USE TEST;
BEGIN TRAN
UPDATE TABLE1
SET Details = 'Update'
WHERE ID = 1;
--COMMIT;
--ROLLBACK;
GO
Truy vấn 2
USE TEST;
SELECT ID, Details
FROM TABLE1
WHERE ID = 1;
GO
Trong thử nghiệm này, truy vấn 2 đang chờ truy vấn 1 để xác nhận, dm_tran_locks DMV cho thấy khóa độc quyền trên TABLE1 phát sinh bởi truy vấn 1.
USE TEST;
SELECT
DB_NAME(tl.resource_database_id) AS DBName,
resource_type,
OBJECT_NAME(resource_associated_entity_id) AS tbl_name,
request_mode,
request_status,
request_session_id
FROM sys.dm_tran_locks tl
WHERE
resource_database_id = db_id('TEST')
AND resource_type = 'OBJECT'
Thử nghiệm thứ hai , phục hồi giao dịch trước đó, đặt READ_COMMITTED_SNAPSHOT BẬT nhưng để ALLOW_SNAPSHOT_ISOLATION TẮT.
ALTER DATABASE TEST
SET READ_COMMITTED_SNAPSHOT ON
WITH ROLLBACK IMMEDIATE;
GO
Chạy Truy vấn 1 và chạy truy vấn 2. DMV hiển thị truy vấn 1 phải chịu khóa độc quyền, nhưng truy vấn 2 trả về chi tiết với 'Bản gốc' mà không truy vấn 1 cam kết giao dịch. Có vẻ như phiên bản hàng READ_COMMITTED đã được đưa ra.
Thêm SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
vào truy vấn 1 và truy vấn 2 và chạy truy vấn 1 hoặc truy vấn 2 trả về lỗi - Giao dịch cách ly ảnh chụp không thành công khi truy cập cơ sở dữ liệu 'TEST' vì không cho phép cách ly ảnh chụp nhanh trong cơ sở dữ liệu này. Sử dụng ALTER DATABASE để cho phép cách ly ảnh chụp nhanh.
Thử nghiệm thứ ba , phục hồi giao dịch trước đó. Đặt READ_COMMITTED_SNAPSHOT TẮT và ALLOW_SNAPSHOT_ISOLATION BẬT.
ALTER DATABASE TEST
SET READ_COMMITTED_SNAPSHOT OFF
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE TEST
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
Chạy truy vấn 1, rồi truy vấn 2. DMV hiển thị khóa độc quyền phát sinh bởi truy vấn 1. Truy vấn 2 dường như đang chờ truy vấn 1 hoàn tất. Bật ALLOW_SNAPSHOT_ISOLATION ON không xuất hiện để bật phiên bản hàng ĐỌC.
Thêm SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
vào cả truy vấn 1 và truy vấn 2. Chạy truy vấn 1 và sau đó truy vấn 2. Trong khi DMV hiển thị truy vấn 1 phải chịu khóa độc quyền, truy vấn 2 trả về chi tiết với 'Bản gốc'. Ảnh chụp cách ly dường như được đặt ra.
Quan sát từ thử nghiệm cho thấy rằng READ_COMMITTED_SNAPSHOT
chính nó kích hoạt / vô hiệu hóa phiên bản hàng READ CAMITTED bất kể ALLOW_SNAPSHOT_ISOLATION
cài đặt và ngược lại.