使用非缓存数据测试查询速度?

时间:2019-03-22 20:52:34

标签: sql sql-server

SQL Server2014。我第一次运行查询需要44秒。此后需要6秒钟。我确定这是因为数据缓存在内存中(可能还因为查询计划也缓存了)。我想找到加快查询速度的方法,因此第一次需要6秒,但是很难测试所有内容何时被缓存。

如何强制查询不使用缓存的数据?还是换一种说法,我该如何强制我的查询像第一次一样运行?

我尝试添加选项recompile,但这没什么区别。

谢谢!

2 个答案:

答案 0 :(得分:3)

您似乎正在寻找SQL Server DBCC DROPCLEANBUFFERS command。从文档中:

  

使用DBCC DROPCLEANBUFFERS使用冷缓冲区高速缓存来测试查询,而无需关闭并重新启动服务器。

此命令可以与DBCC FREEPROCCACHE结合使用:

  

清除过程(计划)缓存会导致所有计划被驱逐,并且传入查询执行将编译一个新计划,而不是重新使用任何先前缓存的计划。

免责声明:请在运行该命令之前考虑该命令的影响;只能在非生产环境中用于测试目的!

答案 1 :(得分:2)

这是一个经典的问题,有时您在PD环境中,可能不希望像这样清除缓存。

始终最好查看查询计划,而不用担心查询花费了多长时间。分析计划,然后查看可能出了问题的地方。查询是好的,因为计划是好的,执行时间应该是次要的。只需相信用户的说法,那就是它很慢,并且切勿出现[现在运行良好]的切线。如果计划看起来不错,那就运行良好。