Чи включає висновок IST STATISTICS IO Store Store читання?


9

У SQL Server є опція, SET STATISTICS IO ONяка показує кількість логічних та фізичних зчитувань сторінки для запиту. Чи включають ці статистичні дані зчитування магазину версій для запитів SNAPSHOT та RCSI?

Відповіді:


10

STATISTICS IO не включає читання версій Store Store, принаймні для зберігання версій у 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 показує однакові показання: Статистика IO

Але власне план виконання показує, що сканування другого запиту займає набагато більше часу, завдяки прочитанню сховища версій. Фактичні плани

Щоб довести собі, що цей запит призвів до зчитування tempdb, ви можете використовувати цей розширений сеанс подій (що, очевидно, краще, ніж 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 під час демонстрації, ви можете побачити читання проти ідентифікатора бази даних 2 (tempdb), і він також фіксує текст запиту нашого запиту читання:

скріншот XE сеансу, на якому показано tempdb

Особлива подяка Полю Уайту за те, що він вирішив цю проблему зі СТАТИСТИКИ ІО.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.