SQL Server 2005 缓存
Posted
技术标签:
【中文标题】SQL Server 2005 缓存【英文标题】:SQL Server 2005 Caching 【发布时间】:2009-11-23 16:31:14 【问题描述】:据我了解,SQL Server 2005 会进行某种结果或索引缓存。我目前正在分析复杂的选择语句,这些语句需要几秒钟到几分钟才能完成。我的问题是,即使我不更改它,第二次运行查询也不会花费超过一秒钟的时间。我目前正在使用 SQL Server Management Studio Express 对 SQL Server 2005 服务器执行查询。
我的问题是,有什么方法可以避免或清除导致我的查询在第二次运行时如此快速执行的缓存?
【问题讨论】:
【参考方案1】:这里有几个不同的事情可以发挥作用,最初想到的 3 个(按可能的顺序)如下 - 如果您需要一些帮助来解释结果,请按照以下说明进行操作并粘贴问题中的统计输出:
-
您的查询/批处理需要很长时间来编译执行计划。执行计划已确定并缓存(请参阅this post on serverfault 了解了解它们的时间长短、何时重建等)
要验证这一点,请打开statistics time output,它将为您提供有关引擎生成查询计划所需时间的信息。对于有问题的查询/批次:
-
DBCC FREEPROCCACHE
SET STATISTICS TIME ON
执行批处理,捕获统计输出
再次执行批处理,捕获统计输出
比较 2 个统计输出,特别注意 2 个执行之间的解析/编译时间差异。
-
DBCC DROPCLEANBUFFERS
SET STATISTICS IO ON
执行批处理,捕获统计输出
再次执行批处理,捕获统计输出
比较 2 个统计输出,特别注意 2 个执行之间的物理/预读和逻辑 IO 输出。
【讨论】:
感谢您提供详细信息。我绝对可以从这里弄清楚。【参考方案2】:我发现用于性能调整的唯一可靠指标来自 SQL Server 的 Profiler 应用程序。在查看 CPU 时间,尤其是读取时,您会更加远离“其他影响”。
例如,操作系统繁忙或多个用户处于活动状态会减少您的 CPU 份额,从而增加执行时间。而且您可能会或可能不会在多个 CPU 上获得并行性。但无论哪种方式,总 CPU 时间(相对于执行时间)将保持大致相同。
【讨论】:
【参考方案3】:这样做:
CHECKPOINT
DBCC DROPCLEANBUFFERS
【讨论】:
以上是关于SQL Server 2005 缓存的主要内容,如果未能解决你的问题,请参考以下文章
MS SQL Server 2005 - 存储过程“自发中断”