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

Sql server SQL Server:同一查询以不同的执行时间多次运行,sql-server,performance-testing,execution-time,query-tuning,Sql Server,Performance Testing,Execution Time,Query Tuning,我有一个非常简单的问题 SELECT count(*) FROM MyTable 里面有508000行。当我第一次运行上述查询时,返回结果大约需要53秒。如果我再次运行查询,则返回结果需要毫秒 我相信SQL Server正在缓存查询/结果?我是否可以告诉SQL Server不要缓存查询/结果,或者以某种方式清除缓存/结果 在我的应用程序中,我试图进行一些性能调整,但上述问题对我没有帮助。是的,您可以像这样刷新数据缓冲区(但说真的,不要这样做!): 使用DBCC DROPCLEANBUFFERS

我有一个非常简单的问题

SELECT count(*) FROM MyTable
里面有508000行。当我第一次运行上述查询时,返回结果大约需要53秒。如果我再次运行查询,则返回结果需要毫秒

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


在我的应用程序中,我试图进行一些性能调整,但上述问题对我没有帮助。

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

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

要从缓冲池中删除干净的缓冲区,首先使用检查点 生成冷缓冲区缓存。这将强制所有的脏页 要写入磁盘并清除缓冲区的当前数据库。之后 若要执行此操作,可以发出DBCC DROPCLEANBUFFERS命令来删除所有 缓冲池中的缓冲区


您已经排除了数据库是您的瓶颈(通常是瓶颈),因此,与其释放数据缓冲区缓存,不如分析代码。

谢谢您的选择。我在很多地方都读到,正如你提到的,不要使用这种方法。为了分析我的应用程序代码,我必须清理缓冲区,看看哪些是瓶颈。另外,假设数据库将基于某些算法进行缓存以提供更好的性能,这样我就不必担心这些事情了,这安全吗?我应该总是在热运行的服务器上测试应用程序/代码,而不是冷运行,对吗?
DBCC DROPCLEANBUFFERS