在sql server中清除数据缓存时逻辑读取为3?
我不明白当我在案例1中清除缓存时,它如何显示逻辑读取3,我读取的是逻辑读取意味着页数 从数据缓存中读取数据,但在执行sql语句之前,我正在清除案例1中的数据,但它仍然为我提供逻辑读取3 当数据缓存被清除时 为什么?注意“物理读数”的区别 简单地说在sql server中清除数据缓存时逻辑读取为3?,sql,sql-server,performance,sql-server-2008,Sql,Sql Server,Performance,Sql Server 2008,我不明白当我在案例1中清除缓存时,它如何显示逻辑读取3,我读取的是逻辑读取意味着页数 从数据缓存中读取数据,但在执行sql语句之前,我正在清除案例1中的数据,但它仍然为我提供逻辑读取3 当数据缓存被清除时 为什么?注意“物理读数”的区别 简单地说 物理读取=缓存中的数据 逻辑读取=访问缓存中的数据 清除缓存将强制进行物理读取,以便进行逻辑读取。逻辑读数不能为零(对于学究而言)。请注意“物理读数”的差异 简单地说 物理读取=缓存中的数据 逻辑读取=访问缓存中的数据 清除缓存将强制进行物理读
- 物理读取=缓存中的数据
- 逻辑读取=访问缓存中的数据
- 物理读取=缓存中的数据
- 逻辑读取=访问缓存中的数据
清除缓存将强制进行物理读取,以便进行逻辑读取。您不能有零逻辑读取(对于学究来说,)逻辑读取并不意味着在查询开始之前页面在缓存中。SQL Server必须访问的每一页都被计算为逻辑读取。如果页面必须被访问两次,则会计算两次逻辑读取。每次必须访问页面时,SQL Server都必须执行代码,以防止在读取页面时对该页面进行更改(它正在为此使用锁存)。因此,逻辑读取是一个相当昂贵的操作。因此,逻辑读取的数量可以很好地指示查询的开销 逻辑读取并不意味着该页在查询开始之前已在缓存中。SQL Server必须访问的每一页都被计算为逻辑读取。如果页面必须被访问两次,则会计算两次逻辑读取。每次必须访问页面时,SQL Server都必须执行代码,以防止在读取页面时对该页面进行更改(它正在为此使用锁存)。因此,逻辑读取是一个相当昂贵的操作。因此,逻辑读取的数量可以很好地指示查询的开销
dbcc FREEPROCCACHE
dbcc DROPCLEANBUFFERS
set STATISTICS IO ON--Case 1
SELECT * from Production.Suppliers s
--(30 row(s) affected)
--Table 'Suppliers'. Scan count 1, logical reads 3, physical reads 1, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
--again without clearing the cache I ran above
set STATISTICS IO ON
SELECT * from Production.Suppliers s
--(30 row(s) affected)
--Table 'Suppliers'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.