SQL Server มีตัวเลือกSET STATISTICS IO ON
ที่แสดงจำนวนหน้าตรรกะและฟิสิคัลที่อ่านสำหรับคิวรี สถิติเหล่านี้รวมถึงการอ่านที่เก็บเวอร์ชันสำหรับการสืบค้น SNAPSHOT และ RCSI หรือไม่
SQL Server มีตัวเลือกSET STATISTICS IO ON
ที่แสดงจำนวนหน้าตรรกะและฟิสิคัลที่อ่านสำหรับคิวรี สถิติเหล่านี้รวมถึงการอ่านที่เก็บเวอร์ชันสำหรับการสืบค้น SNAPSHOT และ RCSI หรือไม่
คำตอบ:
STATISTICS IO
ไม่รวมการอ่านที่เก็บรุ่นอย่างน้อยสำหรับการจัดเก็บรุ่นใน tempdb
นี่คือตัวอย่างของการพิสูจน์:
--setup script
USE master
GO
CREATE DATABASE TestDB
GO
ALTER DATABASE TestDB
SET ALLOW_SNAPSHOT_ISOLATION ON
GO
USE TestDB
GO
DROP TABLE IF EXISTS dbo.Test
GO
CREATE TABLE dbo.Test (ID int identity PRIMARY KEY, junk int)
INSERT dbo.Test
SELECT TOP (100000) 1
FROM master.dbo.spt_values a
CROSS JOIN master.dbo.spt_values b
เริ่มวนรอบการอัปเดต 30 วินาทีในหนึ่งแท็บ SSMS
--UPDATE loop
SET NOCOUNT ON
DECLARE @stop datetime = DATEADD(SECOND, 30, GETDATE())
WHILE GETDATE() < @stop
BEGIN
BEGIN TRAN
UPDATE dbo.Test
SET junk += 1
COMMIT
END
UPDATE dbo.Test
SET junk = 1
และในขณะที่วงกำลังจะเรียกใช้แบบสอบถามที่สองเหมือนกันในการSNAPSHOT
ที่มีการSTATISTICS IO ON
แยกจากกันโดย 15s ที่จะอนุญาตให้รุ่นที่จะสะสม
USE TestDB
SET STATISTICS IO ON
GO
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN
SELECT MAX(junk)
FROM dbo.Test
WAITFOR DELAY '00:00:15'
SELECT MAX(junk)
FROM dbo.Test
COMMIT
สถิติ IO แสดงการอ่านที่เหมือนกัน:
แต่แผนปฏิบัติการจริงแสดงการสแกนสำหรับคิวรีที่สองซึ่งใช้เวลานานกว่าเดิมเนื่องจากการอ่านที่เก็บเวอร์ชัน
เพื่อพิสูจน์ตัวคุณเองว่าแบบสอบถามนี้ส่งผลให้อ่าน tempdb คุณสามารถใช้เซสชัน Extended Events (ซึ่งเห็นได้ชัดว่าดีกว่า Profiler) ซึ่งถูกกรองไปยังเซสชันที่มีการเรียกใช้การอ่าน:
CREATE EVENT SESSION [file_reads] ON SERVER
ADD EVENT sqlserver.file_read_completed(
ACTION(sqlserver.session_id,sqlserver.sql_text)
WHERE ([sqlserver].[session_id]=(52)))
ADD TARGET package0.event_file(SET filename=N'file_reads')
GO
การดู "ข้อมูลสด" สำหรับเซสชัน XE นั้นในระหว่างการสาธิตคุณสามารถดูการอ่านกับฐานข้อมูล id 2 (tempdb) และจับข้อความข้อความค้นหาของแบบสอบถามที่เราอ่านเช่นกัน:
ขอขอบคุณเป็นพิเศษกับ Paul White ที่นำเสนอปัญหานี้ด้วยสถิติ IO