我有一些查询导致我们的实时环境超时.(> 30秒)
如果我运行探查器并获取正在运行的SQL并从Management Studio运行它,那么它们需要很长时间才能运行第一次,然后在每次运行后降至几百毫秒.
这显然是SQL缓存数据并将其全部存储在内存中.
我确信可以对SQL进行优化,使其运行得更快.
我的问题是,如何在第二次运行时"修复"这些查询数据已经被缓存并且速度很快?
我建议您检查执行计划以查找导致性能不佳问题的查询.
您需要在执行计划中确定哪些步骤具有最高成本和原因.可能是您的查询正在执行表扫描,或者正在使用不适当的索引.
RedGate网站提供了一个非常详细的免费电子书,专门用于理解执行计划的内容.
https://www.red-gate.com/Dynamic/Downloads/DownloadForm.aspx?download=ebook1
您可能会发现有一个特定的执行计划,您希望将其用于查询.您可以使用查询提示强制在SQL Server中使用哪个执行计划进行查询.这是一个非常先进的概念,应谨慎使用.有关更多详细信息,请参阅以下Microsoft白皮书.
http://www.microsoft.com/technet/prodtechnol/sql/2005/frcqupln.mspx
我也不建议您清除生产环境中的过程缓存,因为这会对平台上当前没有遇到性能问题的所有其他查询的性能产生不利影响.
例如,如果要执行存储过程,则可以使用WITH RECOMPILE命令确保为每次执行过程计算新的执行计划.
对于整体性能调整信息,在Brent Ozar的博客上有一些优秀的资源.
http://www.brentozar.com/sql-server-performance-tuning/
希望这可以帮助.干杯.
根据http://morten.lyhr.dk/2007/10/how-to-clear-sql-server-query-cache.html,您可以运行以下命令来清除缓存:
DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE
编辑:我检查了我的SQL Server文档,这对SQL Server 2000至少是正确的.