Sql 为什么即使在清理了各种缓存之后,逻辑读取也会出现在IO统计数据中?
我试图理解sql server(2014)中IO统计数据的输出,并使用AdventureWorks作为数据库 这是密码Sql 为什么即使在清理了各种缓存之后,逻辑读取也会出现在IO统计数据中?,sql,sql-server,Sql,Sql Server,我试图理解sql server(2014)中IO统计数据的输出,并使用AdventureWorks作为数据库 这是密码 DBCC FREESYSTEMCACHE('ALL') DBCC FREESESSIONCACHE DBCC FREEPROCCACHE DBCC FLUSHPROCINDB(7) CHECKPOINT DBCC DROPCLEANBUFFERS SET STATISTICS TIME ON SET STATISTICS IO ON SELECT * FROM [HumanR
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毫秒,运行时间=0毫秒
(受影响的290排)
表'Employee'。扫描计数1、逻辑读取9、物理读取1、预读读取7、lob逻辑读取0、lob物理读取0、lob预读读取0
SQL Server执行时间:
CPU时间=15毫秒,运行时间=105毫秒
即使在清理了所有缓存和缓冲区之后,为什么逻辑读取的结果不是0,物理读取的结果不是10(已经提到1+9页逻辑读取)?我对逻辑读取的理解是从数据缓存中读取的页数(换句话说,sql server中表的数据缓存) 所有页面读取都是从缓冲池中的页面读取的,并且是逻辑读取 单物理读取意味着查询只需等待一个页面从光盘读入缓冲池 其余部分由读取,并且在查询需要它们时已在缓存中
这仍然会留下一页的差异,因为7加1等于8而不是9。这里的机制可能是所有页面读取都是从缓冲池中的页面读取的,并且是逻辑读取 单物理读取意味着查询只需等待一个页面从光盘读入缓冲池 其余部分由读取,并且在查询需要它们时已在缓存中 这仍然会留下一页的差异,因为7加1等于8而不是9。可能是这里的机制