【问题标题】:sql server cache tuningsql server 缓存调优
【发布时间】:2016-03-09 15:59:17
【问题描述】:

我有 2 个关于 sql server 缓存的问题,这有助于我调整性能问题。

我在一篇文章中读到,当我查询 COUNT() 时,表的所有页面都被加载到缓存中。是真的吗??这是否意味着我们使用 'select coun() ...' 和 'select * ...' 加载相同数量的数据??

当我在没有 order by 的情况下查询 'select top ...' 时,查询的结果被加载到缓存中或所有数据都被加载到缓存中,然后优化器在缓存中执行顶部操作以选择想要的数据?

提前致谢

【问题讨论】:

  • 我不确定您要优化什么。但是在缓存中加载东西听起来不对。特别是因为缓存不是太大并且请求之间的内容会发生变化
  • 我的第一个问题是,当我查询一个 select count(*) 时,哪些数据会加载到缓存中?

标签: sql-server caching


【解决方案1】:

我不禁想知道为什么您需要知道,您是否有特定的性能问题,或者这是理论上的问题?像往常一样,答案是“视情况而定”——sql server 将根据查询进行各种缓存和优化。也不清楚您是指内存数据缓存还是查询计划缓存,但假设您的意思是有多少数据从磁盘加载到内存中并因此被“缓存”。回答这类问题的最简单方法是在打开一些统计信息的情况下运行查询

SET STATISTICS IO ON

然后运行您的查询并比较结果。输出将显示“逻辑读取”和“物理读取”。例如

Table 'ProductCostHistory'. Scan count 1, logical reads 5, physical 
reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, 
lob read-ahead reads 0.

每次读取都是正在加载的一页数据,其中物理是从磁盘读取,逻辑是从内存读取。从磁盘(物理)加载页面后,SQL Server 会将其保存在内存中,直到它认为适合将其从缓存中逐出,因此对相同数据的第二次读取将被认为是合乎逻辑的。使用它,您应该能够测量您的查询并自己确定哪些将更多数据读入/从内存缓存中读取。请注意,如果服务器可以使用索引来回答您的查询,它会,通常意味着读取的数据要少得多。

更多信息:https://msdn.microsoft.com/en-us/library/ms184361.aspx

【讨论】:

    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2011-03-06
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多