SQL Server:同一个查询以不同的执行时间运行多次

时间:2013-12-26 23:31:02

标签: sql-server performance-testing execution-time query-tuning

我有一个非常简单的查询

SELECT count(*) FROM MyTable

其中有508,000行。当我第一次运行上述查询时,返回结果大约需要53秒。如果我再次重新运行查询,则返回结果需要几毫秒。

我相信SQL Server正在缓存查询/结果?是否有可能告诉SQL Server不要缓存查询/结果,或以某种方式清除缓存/结果?

在我的应用程序中,我正在尝试进行一些性能调整,但上面的问题并没有帮助我。

1 个答案:

答案 0 :(得分:2)

是的,您可以像这样刷新数据缓冲区(但严重的是,不要!):

DBCC DROPCLEANBUFFERS
  

使用DBCC DROPCLEANBUFFERS使用冷缓冲区缓存测试查询   没有关闭并重新启动服务器。

     

要从缓冲池中删除干净的缓冲区,首先使用CHECKPOINT   生成一个冷缓冲区缓存。这会强制所有脏页面   要写入磁盘并清理缓冲区的当前数据库。后   你这样做,你可以发出DBCC DROPCLEANBUFFERS命令来删除所有   来自缓冲池的缓冲区。

Ref

您已经排除了数据库作为瓶颈(通常是这样),因此我建议您不要释放数据缓冲区缓存,而是建议您对代码进行分析。