SQL Server2014。我第一次运行查询需要44秒。此后需要6秒钟。我确定这是因为数据缓存在内存中(可能还因为查询计划也缓存了)。我想找到加快查询速度的方法,因此第一次需要6秒,但是很难测试所有内容何时被缓存。
如何强制查询不使用缓存的数据?还是换一种说法,我该如何强制我的查询像第一次一样运行?
我尝试添加选项recompile
,但这没什么区别。
谢谢!
答案 0 :(得分:3)
您似乎正在寻找SQL Server DBCC DROPCLEANBUFFERS
command。从文档中:
使用DBCC DROPCLEANBUFFERS使用冷缓冲区高速缓存来测试查询,而无需关闭并重新启动服务器。
此命令可以与DBCC FREEPROCCACHE
结合使用:
清除过程(计划)缓存会导致所有计划被驱逐,并且传入查询执行将编译一个新计划,而不是重新使用任何先前缓存的计划。
免责声明:请在运行该命令之前考虑该命令的影响;只能在非生产环境中用于测试目的!
答案 1 :(得分:2)
这是一个经典的问题,有时您在PD环境中,可能不希望像这样清除缓存。
始终最好查看查询计划,而不用担心查询花费了多长时间。分析计划,然后查看可能出了问题的地方。查询是好的,因为计划是好的,执行时间应该是次要的。只需相信用户的说法,那就是它很慢,并且切勿出现[现在运行良好]的切线。如果计划看起来不错,那就运行良好。