Sql server 寻找一种方法来衡量跟踪和错误查询的替代方案

Sql server 寻找一种方法来衡量跟踪和错误查询的替代方案,sql-server,Sql Server,我想优化我的查询,但我发现我无法正确测量执行时间,因为SQL正在使用缓存和其他一些优化,所以每次执行同一查询时,我都会得到不同的统计数据 每次执行相同的查询时,我都希望找到一个方法来获得相同的统计数据 每次执行前我都尝试运行以下程序,但每次执行都没有成功,时间不同: DBCC FreeSystemCache DBCC FreeProcCache DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS 我通常在测试环境中使用此选项: DBCC FreeProcCache

我想优化我的查询,但我发现我无法正确测量执行时间,因为SQL正在使用缓存和其他一些优化,所以每次执行同一查询时,我都会得到不同的统计数据

每次执行相同的查询时,我都希望找到一个方法来获得相同的统计数据

每次执行前我都尝试运行以下程序,但每次执行都没有成功,时间不同:

DBCC FreeSystemCache 
DBCC FreeProcCache 
DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS

我通常在测试环境中使用此选项:

DBCC FreeProcCache;
DBCC DROPCLEANBUFFERS;
结合这些因素:

SET STATISTICS IO, TIME ON;
然后,在SQL Server Management Studio的消息选项卡中,您将获得以下详细信息:

在你的情况下,你将有许多统计数据,这可能是太难分析。因此,您只需复制“消息”选项卡的详细信息并将其跳过,向下滚动并在最后分析总计:

您可以看到每个对象的总数,因此这是一个很好的步骤,可以查看执行最多读取的位置。由于我们正在清除缓冲区,因此当存在许多物理读取时,您将遇到最坏的情况-基本上,这是分析索引是否丢失或查询是否有问题的一个良好开端,例如,表变量或函数被联接,而未使用最佳执行计划

注意,由于SQL实例上的其他活动,您可以在SSMS中获得不同的执行时间。你也可以用它来实时检查谁在做这件事。此外,如果这是虚拟机并且资源共享,则可以获得不同的执行时间

因此,我建议清除缓冲区,查看在哪里执行大多数读取,并检查它们是否可以减少