在DBCC DROPCLEANBUFFERS / FREEPROCCACHE之后查询可怕的慢

时间:2017-05-30 06:33:42

标签: sql-server performance tsql sql-server-2012

我有一个在2秒内运行的复杂查询(没关系),但是如果我运行

DBCC DROPCLEANBUFFERS 
DBCC FREEPROCCACHE

首先查询性能为40秒。我应该担心吗?

1 个答案:

答案 0 :(得分:2)

不,Sql server正在执行 你刚刚告诉它的内容。你要求它清空掉所有难以获得的缓冲区。

之前首先运行,因为它已经存储了有关表和缓存中的查询的信息,并删除了执行计划。清除它们后,必须从头开始重建它们。

除非你有充分的理由,否则不要这样做。

使用DBCC FREEPROCCACHE仔细清除计划缓存。例如,释放计划高速缓存会导致重新编译存储过程,而不是从高速缓存中重用。这可能会导致查询性能突然暂时下降。对于计划缓存中每个已清除的缓存存储,SQL Server错误日志将包含以下信息性消息:“SQL Server遇到了'%s'缓存存储(计划缓存的一部分)的缓存存储刷新%d次'DBCC FREEPROCCACHE'或'DBCC FREESYSTEMCACHE'操作。“只要在该时间间隔内刷新缓存,就会每隔五分钟记录此消息。

使用DBCC DROPCLEANBUFFERS使用冷缓冲区缓存测试查询,而无需关闭并重新启动服务器。 要从缓冲池中删除干净缓冲区,首先使用CHECKPOINT生成冷缓冲区缓存。这会强制将当前数据库的所有脏页写入磁盘并清除缓冲区。执行此操作后,您可以发出DBCC DROPCLEANBUFFERS命令以从缓冲池中删除所有缓冲区。