数据库引擎调整顾问
数据库性能很大程度上取决于表上是否有合适的索引。但是工作负载和数据随时变化,现有的索引可能不完全合适,可能需要新的索引。
但是决定索引又是非常困难的,因为对某个查询有提升作用,却会对其他查询或者其他操作有负面影响。
SQLServer提供了【数据库引擎顾问】(DTA)工具来帮助为一个给定的工作负载确认一组最优的索引。而不需要对数据库和SQLServer结构深入了解。它还能为一小部分问题查询提供建议调整选项。
数据库引擎调整顾问机制
在打开引擎并登录以后:
首先,要做的就是新建一个会话。可以为会话添加一个用于归档的标注。
然后,必须选择一个工作负载(文件或一个表)
第三步,选择Tuning Options(调整选项/优化选项)选项卡。
选择Limit Tuning Time(限制调整事件),定义希望DTA运行的时间。然后定义停止的日期和时间。因为DTA运行时间越长,建议越好。可以选择选项卡里的选项。增加建议的可靠性。
也可以点击“Advanced Options(高级选项)”来查看更多选项。
最后,在定义完后点击(Start Analysis)开始分析。
所有的会话会保存在对应实例的msdb中。
DTA报告
报告名称 |
报告描述 |
Column Access(列访问) |
列出工作负载中引用的列和表 |
Database Access(数据库访问) |
列出工作负载中引用的每个数据库和每个数据库工作负载语句的百分比 |
Event Frequency(事件频率) |
按照发生频率列出工作负载中的所有事件 |
Index Detail(Current)(索引细节(当前)) |
定义索引及工作负载引用的属性 |
Index Detail(Recommended)(索引细节(建议)) |
和索引细节(当前)相同,但显示数据库引擎调整顾问所建议的索引信息。 |
Index Usage(Current)(索引使用(当前)) |
列出索引和工作负载引用的百分比 |
Index Usage(Recommended)(索引使用(建议)) |
和索引使用(当前)报告相同,但是出于建议的索引 |
Statement Cost(语句开销) |
列出的建议实施的情况下每个语句的性能改进 |
Statement Cost Range(语句开销范围) |
将开销的改进分为百分比,以显示可以从给定的每组修改中得到多少益处 |
Statement Detail(语句细节) |
列出工作负载中的语句、开销以及如何建议实施减少的开销 |
Statement-to-Index Relationship(语句与索引的关系) |
列出单个语句引用的索引。有当前和建议的版本 |
Table Access(表访问) |
列出工作负载引用的表 |
View-to-Table Relationship(视图与表的关系) |
列出事物化索引引用的表 |
Workload Analysis(工作负载分析) |
给出工作负载的细节,包括语句数量、开销降低的语句数量、开销保持不变的语句数量。 |
数据库引擎调整顾问实例
下面以例子为说明:
1、 调整一个查询:
SELECT soh.DueDate,soh.CustomerID
FROM Sales.SalesOrderHeaderAS soh
WHERE DueDateBETWEEN ‘1/1/2002‘AND ‘1/1/2003‘ AND Status>4
右键→【在数据库引擎顾问中分析查询】
配置选项卡如下:
然后运行,运行结果如下:
可以看出,建议中很多没用的索引建议删除。这一步其实可以在所有数据库上执行,保证数据库索引的有效性。
你可以评估并选择是否接受建议,也会生成相应的语句
2、 调整一个跟踪工作负载
可以使用powershell或者sqlProfiler来创建一个跟踪文件并进行分析。
数据库引擎顾问的局限性
DTA基于输入工作负载,如果不是实际负载,那么建议会有可能带有负面影响。
在生产环境中,应该确保跟踪包含数据库工作负载的一个完整表现。通常需要一天的跟踪时间。还有其他的局限性和考虑事项:
l 使用SQL:BatchCompleted事件跟踪输入:输入到DTA的跟踪必须包含SQL:BatchCompleted事件,否则该向导不能确定工作负载中的查询。
l 工作负载中的查询分布:在一个工作负载中,查询可能以相同的参数值执行多次。应该优先对最常用的查询做改进。
l 索引提示:SQL查询中的索引提示可能阻止DTA选择更好的执行计划。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。