为什么即使清理了各种缓存后,逻辑读取也出现在IO STATISTICS中?

问题描述 投票:0回答:1

我试图了解sql server(2014)中IO STATISTICS的输出并使用AdventureWorks作为数据库。

这是代码

DBCC FREESYSTEMCACHE('ALL')
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE
DBCC FLUSHPROCINDB(7)
CHECKPOINT
DBCC DROPCLEANBUFFERS

SET STATISTICS TIME ON
SET STATISTICS IO ON
SELECT * FROM [HumanResources].[Employee]
SET STATISTICS TIME OFF
SET STATISTICS IO OFF

输出是

SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。

(290行受影响)表'员工'。扫描计数1,逻辑读取9,物理读取1,预读读取7,lob逻辑读取0,lob物理读取0,lob预读读取0。

SQL Server执行时间:CPU时间= 15毫秒,已用时间= 105毫秒。

即使在清理了所有缓存和缓冲区之后,为什么逻辑读取不是0,物理读取是10(1已经提到+ 9页逻辑读取)?我对逻辑读取的理解是从数据高速缓存读取的页数(换句话说是sql server中表的数据高速缓存)。

sql sql-server
1个回答
2
投票

所有页面读取都从缓冲池中的页面读取,并且是逻辑读取。

单个物理读取意味着查询只需等待从磁盘读入单个页面到缓冲池。

其余部分由read ahead mechanism读入,并且在查询需要时已经在缓存中。

这仍然留下单页差异,因为7加1是8而不是9.可能这里的机制https://blogs.msdn.microsoft.com/ialonso/2011/12/09/the-read-ahead-that-doesnt-count-as-read-ahead/

© www.soinside.com 2019 - 2024. All rights reserved.