Trong một số trường hợp, Kho lưu trữ truy vấn có thể khiến việc ghi xảy ra như một hiệu ứng của câu lệnh chọn và trong cùng một phiên.
Điều này có thể được sao chép như sau:
USE master;
GO
CREATE DATABASE [Foo];
ALTER DATABASE [Foo] SET QUERY_STORE (OPERATION_MODE = READ_WRITE,
CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 30),
DATA_FLUSH_INTERVAL_SECONDS = 900,
INTERVAL_LENGTH_MINUTES = 60,
MAX_STORAGE_SIZE_MB = 100,
QUERY_CAPTURE_MODE = ALL,
SIZE_BASED_CLEANUP_MODE = AUTO);
USE Foo;
CREATE TABLE Test (a int, b nvarchar(max));
INSERT INTO Test SELECT 1, 'string';
Tạo một phiên Sự kiện mở rộng để theo dõi:
CREATE EVENT SESSION [Foo] ON SERVER
ADD EVENT sqlserver.rpc_completed(SET collect_data_stream=(1)
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.client_pid,sqlserver.database_name,sqlserver.is_system,sqlserver.server_principal_name,sqlserver.session_id,sqlserver.session_server_principal_name,sqlserver.sql_text)
WHERE ([writes]>(0))),
ADD EVENT sqlserver.sql_batch_completed(SET collect_batch_text=(1)
ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.client_pid,sqlserver.database_name,sqlserver.is_system,sqlserver.server_principal_name,sqlserver.session_id,sqlserver.session_server_principal_name,sqlserver.sql_text)
WHERE ([writes]>(0)))
ADD TARGET package0.event_file(SET filename=N'C:\temp\FooActivity2016.xel',max_file_size=(11),max_rollover_files=(999999))
WITH (MAX_MEMORY=32768 KB,EVENT_RETENTION_MODE=ALLOW_MULTIPLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF);
Tiếp theo chạy như sau:
WHILE @@TRANCOUNT > 0 COMMIT
SET IMPLICIT_TRANSACTIONS ON;
SET NOCOUNT ON;
GO
DECLARE @b nvarchar(max);
SELECT @b = b FROM dbo.Test WHERE a = 1;
WAITFOR DELAY '00:00:01.000';
GO 86400
Một giao dịch ngầm có thể hoặc không cần thiết để tái tạo điều này.
Theo mặc định, vào đầu giờ tiếp theo, công việc thu thập số liệu thống kê của Cửa hàng Truy vấn sẽ ghi dữ liệu. Điều này dường như (đôi khi?) Xảy ra như một phần của truy vấn người dùng đầu tiên được thực hiện trong giờ. Phiên Sự kiện mở rộng sẽ hiển thị một cái gì đó tương tự như sau:
Nhật ký giao dịch cho thấy việc ghi đã xảy ra:
USE Foo;
SELECT [Transaction ID], [Begin Time], SPID, Operation,
[Description], [Page ID], [Slot ID], [Parent Transaction ID]
FROM sys.fn_dblog(null,null)
/* Adjust based on contents of your transaction log */
WHERE [Transaction ID] IN ('0000:0000042c', '0000:0000042d', '0000:0000042e')
OR [Parent Transaction ID] IN ('0000:0000042c', '0000:0000042d', '0000:0000042e')
ORDER BY [Current LSN];
Kiểm tra trang với các DBCC PAGE
chương trình cho thấy sys.plan_persist_runtime_stats_interval
.
USE Foo;
DBCC TRACEON(3604);
DBCC PAGE(5,1,344,1); SELECT
OBJECT_NAME(229575856);
Lưu ý rằng các mục nhật ký hiển thị ba giao dịch lồng nhau nhưng chỉ có hai bản ghi cam kết. Trong một tình huống tương tự trong sản xuất, điều này dẫn đến một thư viện khách hàng bị lỗi được cho là đã sử dụng các giao dịch ngầm bất ngờ bắt đầu một giao dịch ghi, ngăn chặn nhật ký giao dịch bị xóa. Thư viện được viết để chỉ phát hành một cam kết sau khi chạy cập nhật, chèn hoặc xóa câu lệnh, vì vậy nó không bao giờ ban hành lệnh cam kết và để lại một giao dịch ghi.