限制优化的持续时间和事件

可以通过限制应用程序优化的时间或事件数来控制数据库引擎优化顾问的优化会话。需要在维护窗口中优化生产服务器时,限制优化分析持续时间非常有用。通过优化每个假设配置的相同工作负荷来比较两个假设配置时,限制优化的事件数非常有用。

对于任何给定配置,数据库引擎优化顾问可能不会优化工作负荷中的所有事件。如果指定要优化的事件数,请确保每个配置的优化会话使用相同的可优化事件数,以便结果更容易比较。

控制优化的持续时间

数据库引擎优化顾问对工作负荷进行分析,直至找到对指定数据库来说最佳的一组物理性能结构。这一过程需要的时间取决于工作负荷的长度。数据库引擎优化顾问可能需要数天才能完成对包含数百个事件的工作负荷的彻底分析。尽管在整个分析过程中数据库是可用的,但其性能仍可能会受到影响。

若要控制数据库引擎优化顾问分析工作负荷的时间,请设置最大时间。最大时间是用户希望数据库引擎优化顾问花在分析工作负荷上的小时和分钟数。如果采用最大时间设置,则得到的建议是根据数据库引擎优化顾问在此时间到期之前可以生成的最佳解决方案给出的。

在数据库引擎优化顾问图形用户界面 (GUI) 中,此参数默认设置为 1 小时。在 dta 命令行实用工具中,此默认限制设置为 8 小时。如果完成分析的时间少于设置限制,优化将在分析完成时终止。可以指定无限制的优化时间,以便在这两种工具界面中生成可能的最佳建议。

以下部分说明如何在 GUI 中和在命令提示符下设置此优化选项。

在图形用户界面中设置优化时间

在数据库引擎优化顾问 GUI 中设置优化时间限制的方法为:在**“优化选项”选项卡中选择“限制优化时间”,然后在“结束时间”**中设置日期和时间。

请考虑以下详细信息:

  • 通常,如果指定更长的优化时间,将获得更佳的总体结果,因为可以分析更多工作负荷。建议基于更完整的信息。

  • 默认情况下,最大优化限制设置为 1 小时。

  • 若要不限制优化时间,请清除**“限制优化时间”**复选框。

在 dta 命令行实用工具中设置优化时间

您可以通过 dta 命令行实用工具为 -A 参数指定一个值来设置优化时间限制。例如,请参阅以下 dta 命令:

dta -E -s MySession -D AdventureWorks2008R2 -if MyWorkloadScript.sql -fa IDX -A 120

其中,-E 指定可信连接,-D 指定要优化的数据库,-if 指定工作负荷文件,-fa IDX 指定数据库引擎优化顾问应只考虑在其建议中添加索引,-A 120 表示必须在 120 分钟内完成优化。

从命令提示符运行 dta 实用工具(而不是在自动优化的脚本中调用它)时,可以按 Ctrl+C 来停止优化。然后,数据库引擎优化顾问将根据此时已处理的工作负荷返回最佳建议。

请考虑以下详细信息:

  • 通常,如果指定更长的优化时间,将获得更佳的总体结果,因为可以分析更多工作负荷。因此,建议基于更完整的信息。

  • 若要指定无限制的优化时间,请使用命令行参数 -A 0。使用此参数可以获得整个工作负荷的最佳建议。

  • 如果未指定 –A 选项,则它默认为 –A 480(优化时间为 8 小时)。

  • 即使按 Ctrl+C,dta 实用工具也会花一段时间来填充分析报表,然后才退出。

在 XML 输入文件中设置优化时间

还可以在能够与 dta 命令行实用工具一起使用的 XML 输入文件中设置最大优化时间限制。若要在 XML 输入文件中指定优化时间限制(以分钟计),请使用 TuningOptions 父元素下的 TuningTimeInMin 子元素。有关 XML 输入文件的详细信息,请参阅XML 输入文件引用(数据库引擎优化顾问)

控制要优化的事件数

您可以控制工作负荷中数据库引擎优化顾问优化的事件数。仅当在 dta 命令行实用工具中使用 –n 参数时,此选项才可用。使用 -n 参数时 dta 实用工具的行为取决于为 -A 参数指定的值(即指定优化时间限制),如下所示:

  • 在优化了指定数量的事件或指定的优化时间限制已过(以二者中最先发生的为准)时,dta 将停止。如果未指定 -n 参数,默认情况下,dta 将优化工作负荷中的所有事件。如果未指定 -A 参数,dta 将假定默认优化时间限制为 8 小时。

  • 若要确保优化 -n 参数指定的事件数,还需将 -A 参数指定为 0(即指定无限制的优化时间)。例如,-n 250 -A 0。

在 XML 输入文件中指定要优化的事件数

还可以在能够与 dta 命令行实用工具一起使用的 XML 输入文件中指定要优化的事件数。若要在 XML 输入文件中指定要优化的事件数,请使用 TuningOptions 父元素下的 NumberOfEvents 子元素。有关 XML 输入文件的详细信息,请参阅 XML 输入文件引用(数据库引擎优化顾问)

限制优化时间和事件数的最佳方法

下面给出了限制优化时间和事件数的建议:

  • 对于单个查询和小型工作负荷(少于 100 个事件),请指定无限制的优化时间。如果指定不限制优化时间,数据库引擎优化顾问将给出最佳建议,并且在大多数情况下,优化会在相对较短的时间内完成。

  • 对于大型工作负荷(多于 100 个事件),请考虑以下方案,其优先级以其列出顺序为准。首先考虑方案 1 到方案 3,最后考虑方案 (4)。

    1. 如果用户在时间上有约束,请限制优化时间。

    2. 如果优化固定数量的事件就足够了(例如,前 10,000 个事件可以代表其余工作负荷),请使用 dta 命令行实用工具,并通过 –n 参数指定事件数。

    3. 如果使用的是 dta 命令行实用工具,并希望进一步限制优化时间,则可以使用 –A–n 参数。例如,如果指定 -A 240 和 –n 1000,则数据库引擎优化顾问会在优化了 1000 个事件或进行了 4 个小时的优化(以先发生的为准)后立即停止优化。

    4. 优化所花的时间取决于查询的复杂性(引用表的数量)、选择的功能集(优化索引视图所花的时间比优化索引要多)以及数据(用于创建统计信息)大小。大多数情况下,数据库引擎优化顾问花在优化上的大部分时间都用在调用查询优化器上。以下是确定合适的数据库引擎优化顾问优化时间的一个简单经验法则:

      对于引用一到三个表的简单查询,如果只优化索引,则允许每个查询用时大约 1 秒,如果优化索引和索引视图,则允许每个查询用时大约 10 秒。对于引用三个以上表的复杂查询,如果只优化索引,则允许每个查询用时大约 10 秒,如果优化索引和索引视图,则允许每个查询用时大约 100 秒。

  • 如果数据库引擎优化顾问指示已处理 100% 的工作负荷,则表示已分析完全部工作负荷,但不一定进行了优化。若要确定是否优化整个工作负荷,请在优化日志的结尾搜索下列消息:

    “工作负荷中的所有事件均未优化。请考虑增大时间限制或者指定在输入 XML 中要考虑的事件数。”

    如果优化日志中存在这样一条消息,则表明数据库引擎优化顾问无法优化全部工作负荷。若要解决这种问题,请指定更长的优化时间。若要确保优化工作负荷中的所有事件,可以指定无限制的优化时间。如果选择不指定不限优化时间,数据库引擎优化顾问将设法在指定的优化时间内优化尽可能多的事件。

注意   Microsoft SQL Server 2000 索引优化向导中的“快”、“中”或“彻底”模式与数据库引擎优化顾问中的 -A-n 参数之间没有直接的映射关系。通常,如果在 SQL Server 2000 中以特定模式(“快”、“中”或“彻底”)进行优化需要一定的时间,则在 SQL Server 2005 数据库引擎优化顾问中,花同样的时间通常能给出与之相当或更好的建议。建议使用“彻底”模式的用户使用数据库引擎优化顾问,并指定不限制优化时间和工作负荷中要优化的事件数。

限制优化持续时间的其他方法

除了限制数据库引擎优化顾问的执行时间之外,还可以只优化数据库中的一部分表。

还提供了以下选项:

  • 保留现有的所有物理设计结构 (PDS)。

  • 仅保留索引。

  • 仅保留聚集索引。

数据库引擎优化顾问会在最终建议中包含所有索引提示或查询提示,即使索引不是表的最佳索引也是如此。推荐和建议中可能包括查询中引用的其他表的索引。但是,指定为提示的所有索引始终是最终建议的一部分。这些提示会妨碍数据库引擎优化顾问选择更好的执行计划。因此,可以考虑在分析工作负荷之前从查询中删除所有索引提示。