İSTATİSTİK IO çıkışı Version Store okumalarını içeriyor mu?


9

SQL Server, SET STATISTICS IO ONbir sorgu için mantıksal ve fiziksel sayfa okuma sayısını gösteren bir seçeneğe sahiptir . Bu istatistikler SNAPSHOT ve RCSI sorguları için sürüm deposunun okumalarını içeriyor mu?

Yanıtlar:


10

STATISTICS IO en azından tempdb'deki sürüm deposu için Version Store okumalarını içermez.

İşte kanıt için bir demo:

--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

Bir SSMS sekmesinde 30 saniyelik güncelleme döngüsü başlatma

--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

Ve döngü devam ederken, sürümlerin birikmesine izin vermek için 15 saniye SNAPSHOTile STATISTICS IO ONayrılmış iki özdeş sorgu çalıştırın .

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

ES istatistikleri aynı okumaları gösterir: İstatistikler ES

Ancak gerçek yürütme planı, sürüm deposunun okunması nedeniyle ikinci sorgunun taranmasının çok daha fazla zaman aldığını gösterir. Gerçek planlar

Bu sorgunun tempdb okumaları ile sonuçlandığını kendinize kanıtlamak için, okuma sorgularının çalıştığı oturuma filtre uygulanmış olan bu Genişletilmiş Etkinlikler oturumunu (Profiler'den açıkça daha iyi) kullanabilirsiniz:

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

Demo sırasında söz konusu XE oturumu için "canlı verileri" görüntüleyerek, veritabanı kimliği 2'ye (tempdb) göre okumaları görebilirsiniz ve okuma sorgumuzun sorgu metnini de yakalar:

tempdb okumaları gösteren XE oturumunun ekran görüntüsü

İSTATİSTİK IO ile bu sorunu gündeme getirdiği için Paul White'a özel teşekkürler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.