SQL server:清除缓存对IO统计数据没有影响

时间:2012-11-09 11:43:57

标签: sql sql-server sql-server-2012

使用的查询:

(已从某处在线复制了缓存清理代码)

CHECKPOINT; 
GO 
DBCC DROPCLEANBUFFERS; 
GO
DBCC DROPCLEANBUFFERS
GO

SET STATISTICS TIME ON;
SET STATISTICS IO ON;

select a.a,a.b from t1 a JOIN t1 b on a.i=b.i

t1的架构是

CREATE TABLE [dbo].[t1](
    [i] [int] NULL,
    [a] [varchar](1000) NULL,
    [b] [varchar](1000) NULL,
    [c] [varchar](1000) NULL
) ON [PRIMARY]

并且t1填充了随机数据(I范围为0-11,a,b,c填充了NEWID()个值

它包含大约900行(准确地说是934)

执行查询的结果是:

  

SQL Server解析和编译时间:CPU时间= 0 ms,经过时间=   0毫秒。

     

SQL Server执行时间:CPU时间= 0毫秒,已用时间= 55   女士。 SQL Server解析和编译时间:CPU时间= 0 ms,已过去   时间= 0毫秒。 DBCC执行完成。如果DBCC打印错误消息,   联系您的系统管理员。

     

SQL Server执行时间:CPU时间= 0毫秒,已用时间= 4毫秒。   SQL Server解析和编译时间:CPU时间= 0毫秒,已用时间=   0毫秒DBCC执行完成。如果DBCC打印错误消息,   联系您的系统管理员。

     

SQL Server执行时间:CPU时间= 0毫秒,已用时间= 1毫秒。   SQL Server解析和编译时间:CPU时间= 0毫秒,已用时间=   0毫秒。

     

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

     

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

     

(115974行受影响)表'工作台'。扫描计数0,逻辑   读取0,物理读取0 ,预读读取0,lob逻辑读取0,   lob物理读取0,lob预读读取0.表't1'。扫描计数   2,逻辑读取32,物理读取0 ,预读读取20,lob   逻辑读取0,lob物理读取0,lob预读读取0。

     

SQL Server执行时间:CPU时间= 79毫秒,已用时间=   15858 ms。

据我了解,干净的缓存应该会产生大量的物理读取,不应该吗?

(在Win 8主机上的Hyper V上运行的Win 8来宾VM上运行的SQL Server 2012)

1 个答案:

答案 0 :(得分:2)

您突出显示的项目适用于在查询过程中在Worktable中创建的tempdb(例如假脱机)。不是需要从光盘读入的预先存在的表。

t1的行应该显示一些物理读取和/或预读。

(编辑:没看到最初包含的内容)。以下显示来自t1

的20个预读
Table 't1'. Scan count 2, logical reads 32, physical reads 0, read-ahead reads 20

这意味着所有页面都通过预读机制进入缓存。