查询调优通常是提高SQL Server性能的最快方法。大多数情况下,系统级服务器性能(内存,处理器等)的改进措施无效且昂贵。专家开发人员认为,大多数性能问题都可以归因于查询质量不佳和索引编制效率低下,而不是硬件约束。实际上,某些性能问题只能通过查询调整来解决。
但是,当涉及到SQL Server性能查询调优时,DBA通常会从何处着手解决这个问题。您如何评估查询?您如何发现查询编写方式中的缺陷?您如何发现潜在的改进机会?查询调优是科学的一半,也是艺术的一半,因为没有正确或错误的答案,只是给定情况下最合适的解决方案。
这里有12个快速提示,可以帮助DBA以可衡量的方式提高查询性能,同时可以确定特定的更改实际上提高了查询速度。
1.基本查询分析
DBA需要对所有层具有可见性,并需要有关昂贵查询的信息,以便找出根本原因。有效的调优需要了解最重要的SQL语句,最重要的等待类型,SQL计划,阻塞的查询,资源争用以及缺少索引的影响。从基础开始-在潜入之前准确了解您要处理的内容会有所帮助。
技巧1:了解表和行数
首先,请确保您确实在对表进行操作,而不是对视图或表值函数进行操作。表值函数有其自身的性能影响。您可以使用SSMS将鼠标悬停在查询元素上以检查这些详细信息。通过查询DMV检查行数。
技巧2:检查查询过滤器,WHERE和JOIN子句,并注意过滤后的行数
如果没有过滤器,并且返回了大多数表,请考虑是否需要所有这些数据。如果根本没有过滤器,这可能是一个危险信号,需要进一步调查。这确实会降低查询速度。
技巧3:了解表的选择性
根据前两个技巧中的表和过滤器,您将了解要使用的行数或实际逻辑集的大小。我们建议将SQL图表用作评估查询和查询选择性的强大工具。
提示4:分析其他查询列
请仔细检查SELECT *或标量函数,以确定是否涉及其他列。您带回的列越多,执行计划使用某些索引操作的最佳列可能越少,这反过来又可能降低性能。
2.高级查询分析
技巧5:了解和使用约束
会有所帮助在开始进行调整时,了解和使用约束会有所帮助。查看现有的键,约束,索引,以确保避免重复工作或避免已经存在的索引重叠。要获取有关索引的信息,请运行sp_helpindex存储过程:
提示6:检查实际的执行计划(而不是估计的计划)。
估计的计划使用估计的统计信息来确定估计的行;实际计划在运行时使用实际统计信息。如果实际计划和估计计划不同,则可能需要进一步调查。
提示7:记录结果,重点放在逻辑I / O的数量上
如果不记录结果,则无法确定更改的真正影响。
提示8:根据您的发现调整查询并一次进行小的,单个更改,一次进行
太多更改可能是无效的,因为它们可以相互抵消!首先寻找最昂贵的操作。没有正确或错误的答案,只有针对给定情况的最佳选择。
技巧9:重新运行查询并记录所做更改的结果
如果您看到逻辑I / O有所改善,但是改善还不够,请返回技巧8,以检查可能需要调整的其他因素。一次进行一次更改,重新运行查询并比较结果,直到对您已解决所有可能的昂贵操作感到满意为止。
技巧10:如果仍然需要改进,请考虑调整索引以减少逻辑I / O
添加或调整索引并不总是最好的选择,但是如果您不能更改代码,则可能是唯一的选择你可以做。您可以考虑现有索引,覆盖索引和筛选索引以进行改进。
提示11:重新运行查询并记录结果
如果进行了调整,请重新运行查询并再次记录这些结果。
提示12:设计愚蠢的
Lookout,以查找经常遇到的性能抑制因素,例如:代码优先生成器,通配符滥用,标量函数,嵌套视图,游标和逐行处理。
3.使用数据库性能监视工具来简化查询调整。
传统的数据库监视工具着重于健康指标。当前的应用程序性能管理工具提供了提示,但并不能帮助找到根本原因。