SQL Server提供了一个被称为数据库引擎调整顾问的工具。这个工具帮助为一个给定的工作负载确认一组最优的索引,而不需要对数据库结构或SQL Server内部结构的深入了解。它还能为一小部分有问题的查询建议调整选项。除了好处该工具也有坏处。应该正确地使用。
一、数据库引擎调整顾问机制
可以直接选择SQL Server 2008=》性能工具=》数据库引擎调整顾问来使用它。
从Management Studio运行一个查询(选中所需查询,选择查询=》在数据库引擎调整顾问中分析查询),或者从Management Studio=》选择=》数据库引擎调整顾问中运行它。一旦该工具被打开并且连接到一个服务器,将看到如下所示窗口:
数据引擎调整顾问已经连接到一个服务器。从这里,开始概述工作负载以及希望调整的对象。创建一个会话名称是有必要的,可以为会话添加一个用于归档的标注。然后,必须选择一个工作负载(一个文件或一个表),并浏览到合适的位置。工作负载根据启动数据库调整顾问的方式定义。如果从查询窗口启动,将看到一“查询”无线按钮,“文件”和“表”按钮将被禁用。还必须为“工作负载分析”设置定义数据库并最终选择一个需要调整的数据库。
另外,通过“优化选项”选项卡,如下图所示:
选择“限制优化时间”定义希望数据库引擎调整顾问运行的时间,然后定义调整停止的日期和时间。数据库引擎调整顾问运行的时间越长,就越能提供更好的建议。可以选择考虑由数据库引擎调整顾问创建的物理设计结构类型,还可以设置分区策略,这样,调整顾问可以知道是否应该考虑将表和索引分区作为分析的一部分。如果数据和结构不能保证,分区不一定是个理想的结果。最后,可以定义所希望在数据库中保持的物理设计结构。
更改这些选项将使数据库引擎调整顾问用于改进性能的选择变宽或变窄。
单击“高级选项”按钮还有更多选项。
这个对话框中,可以限制建议的空间和包含在一个索引中的列数。最后可以确定,新的索引或索引中的改动是作为在线还是离线的索引操作完成。
一旦适当地定义了所有这些设置,就可以单击“开始分析”按钮开启动数据库调整顾问。所创建的会话保存在所针对的所有服务器实例的msdb数据库中,它显示正在分析的内容和所取得进展的细节。
数据库引擎调整顾问报告:
报告名称 | 报告描述 |
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、调整一个查询
选中一个查询语句,右键=》数据库引擎优化顾问中分析查询。
设置基础如下:
设置时间:
虽然默认设置为1小时,但是本次建议1分钟就完成了。
最终建议如下,单击最右侧的定义,SQL Server优化顾问建议的优化如下:
SQL Server优化顾问建议我在Name列上建立一个非聚集索引。对于该查询来说,这是一个完全正确的建议。
有时候,对于单个查询的优化,SQL Server会建议卸载一些用不到的索引。但是优化应该是针对整个数据库的优化。
因此,在优化项目里,应该设置数据引擎调整顾问不能卸载任何已有的结构,这个优化选项里把“数据库中保持的物理设计结构”设置“从不保持任何现有的PDS”变为保持现有的PDS。这样就优化顾问就不会建议卸载现有的OBJECT了。
另外,在得到建议之后,可以在操作上面直接操作,评估建议,保存建议,以及应用建议。
单击应用建议:
单击确定后:
数据库引擎优化顾问将自动将建议执行到SQL Server:
2、调整一个跟踪工作负载
调整一个跟踪工作负载首先得有一个跟踪文件或跟踪表:
很遗憾,生成的建议居然为空:
这不意味着没有其他可能的改进,只是意味着调整顾问不总是能够发现所有可能的改进。
三、数据库引擎调整顾问的局限性
数据库引擎调整顾问建议基于输入工作负载。如果输入的工作负载不是实际工作负载的真实表现,那么建议的索引有时候可能对一些在这个工作负载中丢失的查询有负面的影响。
对于一个生产服务器,应该确保SQL跟踪包含数据库工作负载的一个完整表现。对于大部分数据库应用程序,捕捉完整的一天的跟踪通常包含大部分数据库上执行的查询。其他一些数据库引擎调整顾问所需要考虑的事项/局限性如下:
- 使用SQL:BatchCompleted事件跟踪输入:输入到数据库引擎调整顾问的SQL跟踪必须包含SQL:BatchCompleted事件;否则,该向导不能确定工作负载中的查询;
- 工作负载中的查询分布:在一个工作负载中,查询可能以相同的参数值执行多次。以对只执行一次的查询做出较大改进相比,对最常用的查询,即使很小的性能改进都对整个工作负载的性能做出更大的贡献;
- 索引提示:SQL查询中的索引提示可能阻止数据库引擎调整顾问选择更好的执行计划。该向导将所有SQL查询中使用的索引提示作为建议的一部分。因为这些索引对该表来说可能不是最佳的,所以把工作负载提交到该向导之前删除所有查询中的索引提示;