使用 XML 输入文件进行优化
可以使用数据库引擎优化顾问图形用户界面 (GUI) 和 dta 命令行实用工具执行的所有优化操作都可以在数据库引擎优化顾问 XML 输入文件中定义。但是,XML 输入文件除了支持 GUI 和命令行实用工具中提供的优化操作以外,还支持优化选项。
XML 输入文件使用已发布的数据库引擎优化顾问 XML 架构,该架构可以在 SQL Server 2008 安装目录的以下位置中找到:
C:\Program Files\Microsoft SQL Server\10\Tools\Binn\schemas\sqlserver\2004\07\dta\dtaschema.xsd
也可以从以下 URL 下载:
https://schemas.microsoft.com/sqlserver/2004/07/dta
XML 输入文件允许您在优化数据库时使用自己最喜爱的 XML 工具,也可以向有经验的数据库管理员提供更大的灵活性。例如,可以使用 XML 输入文件来指定一个配置,使其包含现有物理设计结构和假设物理设计结构(索引、索引视图和分区)的组合。然后,可以使用 dta 命令行实用工具来优化数据库,就像已经实施此现有物理设计结构和假设物理设计结构的组合一样。这将启用“假设”分析,而不会在优化前引起实施实际配置所带来的开销。
下列小节介绍了只能使用数据库引擎优化顾问 XML 输入文件执行的优化操作。有关此文件以及如何使用此文件的详细信息,请参阅 XML 输入文件引用(数据库引擎优化顾问)。
使用 Configuration 元素指定配置
虽然通过数据库引擎优化顾问 GUI 只能在一定范围内使用用户指定的配置功能,但只有通过命令行 dta 实用工具来使用 XML 输入文件时,才能完全支持此功能。使用 XML 输入文件时,可以在其中指定完全假设的配置,也可以指定包含现有物理设计结构和假设物理设计结构的组合配置。然后,在根据数据库引擎优化顾问 XML 架构验证输入文件后,就可以将该文件用作 dta 命令行实用工具的输入。在优化会话期间,数据库引擎优化顾问对数据库运行指定的工作负荷。但是,数据库引擎优化顾问不会评估索引、索引视图和分区的现有配置,而是使用假设结构和现有结构的组合配置。使用假设配置使您能够分析特定配置对数据库性能的影响,而不会引起实施实际配置所带来的开销。
若要指定包含现有物理设计结构和假设物理设计结构的配置,请在数据库引擎优化顾问 XML 输入文件中的 TuningOptions 元素后使用 Configuration 子元素。有关详细信息,请参阅如何执行探索性分析和使用用户指定配置 (DTA) 的 XML 输入文件示例。
使用 EventString 元素优化内联工作负荷
通过数据库引擎优化顾问使用 XML 输入可以完全避免使用工作负荷文件。而改为在 XML 输入文件中指定内联的工作负荷及其关联权重。避免使用单独的工作负荷文件或表具有下列优点:
由于不需要担心数据库引擎优化顾问是否可以使用单独的文件或表进行优化,因此可以更轻松地优化远程服务器。
可以更轻松地将数据库引擎优化顾问功能并入可在整个企业环境中移植的脚本。
若要指定内联工作负荷,请使用 EventString 子元素。使用此子元素,还可以为内联工作负荷指定关联的权重。使用此子元素时,请为 Workload 父元素指定此子元素,而不是指定单独的工作负荷文件或表。下列代码示例显示了将 XML 输入文件与 EventString 元素结合使用以及与常规工作负荷文件结合使用的比较情况:
示例
A. 使用 Workload 元素指定单独的工作负荷文件
<DTAInput>
...code removed
<Workload>
<File>MyWorkload.sql</File>
</Workload>
...code removed
</DTAInput>
B. 使用 EventString 元素指定内联工作负荷
<DTAInput>
...code removed
<Workload>
<EventString Weight="100">
SELECT * FROM MyTable1
WHERE MyColumn1 > 200
ORDER BY MyColumn1
</EventString>
<EventString Weight="1">
SELECT * FROM MyTable2
WHERE MyColumn2 > 200
ORDER BY MyColumn2
</EventString>
</Workload>
...code removed
</DTAInput>
在上面的示例中,为 EventString 元素中的每个查询指定了不同的权重:权重 100 和权重 1。这意味着当数据库引擎优化顾问优化这些查询时,应用程序将使用权重 100 处理该查询,这与使用权重 1 处理该查询的一个实例相比较,就像有 100 个该查询的实例一样。在上面的示例中,对于数据库引擎优化顾问评估目的而言,第一个查询的重要性是第二个查询的 100 倍。还需要注意大于符号 (>) 已经转换为 >,因为 > 是保留字符,在 XML 中有特殊含义。
有关使用 EventString 元素指定内联工作负荷的示例,请参阅内联工作负荷的 XML 输入文件示例 (DTA)。
使用 IgnoreConstantsInWorkload 元素忽略工作负荷中的常量
工作负荷可能包含引用常量的语句。数据库引擎优化顾问可能使用工作负荷中的常量提出建议,请求包含带选择条件的索引视图,或用于已分区索引的范围分区函数。
但是,有时数据库引擎优化顾问对工作负荷中常量的考虑不会带来益处。例如,看一下包含以下语句的工作负荷:
UPDATE BankAccountTable
SET AccountBalance = AccountBalance - 1000.00
WHERE CustomerID =
(SELECT CustomerID FROM Customer WHERE CustomerName = 'Alice')
此工作负荷可能包括常量 'Alice',因为工作负荷是在 Alice 执行事务时捕获的。如果数据库引擎优化顾问使用了此常量,则可能无法给出有效的优化建议。在此情况下,当使用此工作负荷优化数据库时,应该明智地指定数据库引擎优化顾问忽略常量。
可以在 XML 输入文件中指定 TuningOptions 元素之下的 IgnoreConstantsInWorkload 元素,以强制数据库引擎优化顾问忽略工作负荷中的所有常量。当指定了该元素后,数据库引擎优化顾问建议的索引视图将不包含选择条件。另外,分区函数中使用的常量将仅从数据中派生,不是工作负荷中包含的常量。
使用测试服务器为生产服务器优化工作负荷
由于数据库引擎优化顾问通常在优化过程中会大量调用查询优化器,因此优化大量工作负荷会在所优化的服务器上造成很大的开销。除了生产服务器之外,还可以使用测试服务器来消除此问题。数据库引擎优化顾问通过一种独特的方式来支持此方案:
确保生产服务器和测试服务器上都存在要执行优化的用户。如果您是 sysadmin 固定服务器角色的成员,则不需要执行此步骤。
在 XML 输入文件中指定要优化的测试服务器以及定义优化会话的其余参数。
使用 dta 命令行实用工具启动优化会话并开始工作负荷分析。
在此测试服务器优化会话期间,数据库引擎优化顾问对生产服务器进行最少次数的调用来检索其硬件配置文件、数据库元数据和统计信息的相关信息,帮助查询优化器在测试服务器上准确优化查询。
在此方案中,实际优化的是与生产服务器环境相同的测试服务器。在收到优化测试服务器所生成的数据库设计配置建议后,就可以在维护窗口期间在生产服务器上实施它。使用此过程可将数据库引擎优化顾问造成的性能影响降到最低。另外,此过程可以节省从生产服务器向测试服务器实际复制数据的时间,也可以节省在测试环境中复制强大的生产服务器硬件所需的开销。
若要指定测试服务器,请在 TuningOptions 父元素下使用 TestServer 子元素,这将在下例中说明:
示例
<DTAInput>
...code removed
<TuningOptions>
<TestServer>MyTestServer</TestServer>
<FeatureSet>IDX_IV</FeatureSet>
<Partitioning>NONE</Partitioning>
<KeepExisting>NONE</KeepExisting>
</TuningOptions>
...code removed
</DTAInput>
有关使用此功能的详细信息以及其他代码示例,请参阅减轻生产服务器优化负荷。