我有一个非常简单的查询
SELECT count(*) FROM MyTable
其中有 508,000 行。当我第一次运行上述查询时,返回结果大约需要 53 秒。如果我再次重新运行查询,则返回结果需要几毫秒。
我相信 SQL Server 正在缓存查询/结果?我是否可以告诉 SQL Server 不要缓存查询/结果,或者以某种方式清除缓存/结果?
在我的应用程序中,我正在尝试进行一些性能调整,但上述问题对我没有帮助。
我有一个非常简单的查询
SELECT count(*) FROM MyTable
其中有 508,000 行。当我第一次运行上述查询时,返回结果大约需要 53 秒。如果我再次重新运行查询,则返回结果需要几毫秒。
我相信 SQL Server 正在缓存查询/结果?我是否可以告诉 SQL Server 不要缓存查询/结果,或者以某种方式清除缓存/结果?
在我的应用程序中,我正在尝试进行一些性能调整,但上述问题对我没有帮助。
是的,您可以像这样刷新数据缓冲区(但说真的,不要!):
DBCC DROPCLEANBUFFERS
使用 DBCC DROPCLEANBUFFERS 使用冷缓冲区缓存测试查询,而无需关闭并重新启动服务器。
要从缓冲池中删除干净的缓冲区,首先使用 CHECKPOINT 生成冷缓冲区高速缓存。这会强制将当前数据库的所有脏页写入磁盘并清理缓冲区。完成此操作后,您可以发出 DBCC DROPCLEANBUFFERS 命令从缓冲池中删除所有缓冲区。
您已经排除了数据库是您的瓶颈(通常是瓶颈),因此我建议您对代码进行分析,而不是释放数据缓冲区缓存。