कुछ मामलों में क्वेरी स्टोर चुनिंदा कथन के प्रभाव के रूप में और उसी सत्र में लिखने का कारण बन सकता है।
इसे निम्नानुसार पुन: प्रस्तुत किया जा सकता है:
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';
निगरानी के लिए एक विस्तारित ईवेंट सत्र बनाएँ:
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);
अगला निम्नलिखित चलाएँ:
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
एक प्रत्यारोपित लेनदेन इसे पुन: पेश करने के लिए आवश्यक हो सकता है या नहीं भी हो सकता है।
डिफ़ॉल्ट रूप से, अगले घंटे के शीर्ष पर क्वेरी स्टोर की सांख्यिकी संग्रह नौकरी डेटा लिख देगी। यह (कभी-कभी) घंटे के दौरान निष्पादित पहली उपयोगकर्ता क्वेरी के भाग के रूप में प्रकट होता है। विस्तारित ईवेंट सत्र निम्न के जैसा कुछ दिखाएगा:
लेन-देन लॉग में हुए लेखन को दिखाता है:
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];
पृष्ठ के निरीक्षण से DBCC PAGE
पता चलता है कि लिखना है sys.plan_persist_runtime_stats_interval
।
USE Foo;
DBCC TRACEON(3604);
DBCC PAGE(5,1,344,1); SELECT
OBJECT_NAME(229575856);
ध्यान दें कि लॉग प्रविष्टियाँ तीन नेस्टेड लेनदेन दिखाती हैं लेकिन केवल दो प्रतिबद्ध रिकॉर्ड हैं। उत्पादन में इसी तरह की स्थिति में, यह एक निश्चित रूप से दोषपूर्ण क्लाइंट लाइब्रेरी का कारण बना, जिसने अप्रत्याशित लेनदेन का उपयोग अप्रत्याशित रूप से एक लेखन लेनदेन शुरू करने के लिए किया, जिससे लेन-देन लॉग को समाशोधन से रोक दिया गया। लाइब्रेरी को केवल अपडेट, इंसर्ट या डिलीट स्टेटमेंट चलाने के बाद कमिट जारी करने के लिए लिखा गया था, इसलिए इसने कभी भी एक कमिट जारी नहीं किया और एक लिखित लेनदेन खुला रह गया।