Đầu ra IO của THỐNG KÊ có bao gồm các phiên bản Store Store không?


9

SQL Server có một tùy chọn SET STATISTICS IO ONhiển thị số lần đọc trang logic và vật lý cho một truy vấn. Các số liệu thống kê này có bao gồm các lần đọc của cửa hàng phiên bản cho các truy vấn SNAPSHOT và RCSI không?

Câu trả lời:


10

STATISTICS IO không bao gồm các phiên bản Store Store, ít nhất là cho phiên bản lưu trữ trong tempdb.

Đây là bản demo để chứng minh:

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

Bắt đầu vòng lặp cập nhật 30 giây trong một tab 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

Và trong khi vòng lặp được đi, chạy hai truy vấn giống hệt nhau trong SNAPSHOTvới STATISTICS IO ON, cách nhau bằng 15s để cho phép các phiên bản để tích lũy.

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

Số liệu thống kê IO hiển thị các lần đọc giống hệt nhau: Số liệu thống kê IO

Nhưng kế hoạch thực hiện thực tế cho thấy quá trình quét tìm truy vấn thứ hai mất nhiều thời gian hơn, do đọc cửa hàng phiên bản. Kế hoạch thực tế

Để tự chứng minh rằng truy vấn này dẫn đến việc đọc tempdb, bạn có thể sử dụng phiên Sự kiện mở rộng này (rõ ràng là tốt hơn Profiler), được lọc đến phiên nơi các truy vấn đọc đang chạy:

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

Xem "dữ liệu trực tiếp" cho phiên XE đó trong bản demo, bạn có thể thấy các lần đọc đối với cơ sở dữ liệu id 2 (tempdb) và nó cũng nắm bắt văn bản truy vấn của truy vấn đọc của chúng tôi:

ảnh chụp màn hình phiên XE hiển thị số lần đọc tempdb

Đặc biệt cảm ơn Paul White đã đưa ra vấn đề này với STATISTICS IO.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.