Bazı durumlarda Sorgu Deposu, yazma işleminin select ifadesinin bir etkisi olarak ve aynı oturumda ortaya çıkmasına neden olabilir.
Bu, aşağıdaki gibi çoğaltılabilir:
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';
İzleme için bir Genişletilmiş Etkinlikler oturumu oluşturun:
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);
Sonra aşağıdakileri çalıştırın:
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
Bu işlemi çoğaltmak için örtük bir işlem gerekebilir veya olmayabilir.
Varsayılan olarak, sonraki saatin başında Query Store istatistik toplama işi veri yazacaktır. Bu (bazen?), Saat boyunca yürütülen ilk kullanıcı sorgusunun bir parçası olarak ortaya çıkar. Genişletilmiş Olaylar oturumu, aşağıdakine benzer bir şey gösterecektir:
İşlem günlüğü gerçekleşen yazmaları gösterir:
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];
Sayfayı incelemek DBCC PAGE
yazarların yapılacağını gösterir sys.plan_persist_runtime_stats_interval
.
USE Foo;
DBCC TRACEON(3604);
DBCC PAGE(5,1,344,1); SELECT
OBJECT_NAME(229575856);
Günlük girişlerinin iç içe geçmiş üç işlem gösterdiğini ancak yalnızca iki işlem kaydı gösterdiğini unutmayın. Üretimdeki benzer bir durumda, bu, beklenmedik bir şekilde yazma işlemine başlayan ve işlem günlüğünün temizlenmesini engelleyen gizli işlemleri kullanan tartışmasız hatalı bir müşteri kitaplığına yol açtı. Kütüphane, yalnızca bir güncelleme yaptıktan, bir ekleme yaptıktan veya silindikten sonra bir işlem yapmak için yazılmıştır, bu nedenle hiçbir zaman bir taahhüt komutu vermemiş ve bir yazma işlemi açık bırakmamıştır.