dta 实用工具

适用范围:SQL Server

dta 实用工具是数据库引擎优化顾问的命令提示符版。 通过 dta 实用工具,您可以在应用程序和脚本中使用数据库引擎优化顾问功能。

注意

Azure SQL 数据库或 Azure SQL 托管实例不支持数据库引擎优化顾问。 相反,请考虑 在 Azure SQL 数据库和 Azure SQL 托管实例中监视和性能优化中建议的策略。 对于 Azure SQL 数据库,另请参阅 Azure SQL 数据库的数据库顾问性能建议

与数据库引擎优化顾问一样, dta 实用工具可以分析工作负荷,并可为该工作负荷推荐可改进服务器性能的物理设计结构。 工作负载可以是计划缓存、SQL Server Profiler 跟踪文件或表,或者也可以是 Transact-SQL 脚本。 物理设计结构包括索引、索引视图和分区。 分析了工作负荷后, dta 实用工具将生成数据库物理设计结构建议,并可生成实现该建议所需的脚本。 可以使用或-it参数从命令提示符-if指定工作负荷。 还可以使用 -ix 参数从命令提示符指定 XML 输入文件。 在这种情况下,在 XML 输入文件中指定工作负荷。

语法

dta
[ -? ] |
[
      [ -S server_name [ \instance ] ]
      { { -U login_id [ -P password ] } | -E  }
      { -D database_name [ , ...n ] }
      [ -d database_name ]
      [ -Tl table_list | -Tf table_list_file ]
      { -if workload_file | -it workload_trace_table_name  |
        -ip | -iq }
      { -ssession_name | -IDsession_ID }
      [ -F ]
      [ -of output_script_file_name ]
      [ -or output_xml_report_file_name ]
      [ -ox output_XML_file_name ]
      [ -rl analysis_report_list [ , ...n ] ]
      [ -ix input_XML_file_name ]
      [ -A time_for_tuning_in_minutes ]
      [ -n number_of_events ]
      [ -l time_window_in_hours ]
      [ -m minimum_improvement ]
      [ -fa physical_design_structures_to_add ]
      [ -fi filtered_indexes ]
      [ -fc columnstore_indexes ]
      [ -fp partitioning_strategy ]
      [ -fk keep_existing_option ]
      [ -fx drop_only_mode ]
      [ -B storage_size ]
      [ -c max_key_columns_in_index ]
      [ -C max_columns_in_index ]
      [ -e | -e tuning_log_name ]
      [ -N online_option ]
      [ -q ]
      [ -u ]
      [ -x ]
      [ -a ]
]

参数

-?

显示用法信息。

-A time_for_tuning_in_minutes

指定调整时间限制(以分钟计)。 dta 使用指定的时间优化工作负荷,并生成一个包含建议的物理设计更改的脚本。 默认情况下,dta 设定的调试时间为 8 小时。 指定 0 允许不限制的调节时间。 dta 可能在限制时间之前完成整个工作负荷的优化。 但是,为确保整个工作负荷都得到优化,我们建议您指定不受限制的优化时间 (-A 0)。

-a

根据建议自动调整工作负荷,无需提示。

-B storage_size

指定推荐的索引和分区可消耗的最大空间,单位为兆字节。 当多个数据库被优化时,所有数据库的建议都会被考虑用于空间计算。 默认情况下, dta 采用下列存储大小中较小的一个:

  • 当前原始数据大小的三倍,包括数据库中表的堆和聚集索引的总大小。

  • 所有已附连磁盘驱动器的可用空间加上原始数据的大小。

默认存储大小不包括非聚集索引和索引视图。

-C max_columns_in_index

指定 dta 推荐的索引中的最大列数。 最大值为 1024。 默认情况下,此参数设置为 16。

-c max_key_columns_in_index

指定 dta 推荐的索引中的最大键列数。 默认值为 16,即允许的最大值。 dta 也会考虑创建带有包含列的索引。 建议使用包含列的索引可能超过此参数中指定的列数。

-D database_name

指定要优化的每个数据库的名称。 第一个数据库是默认数据库。 可以指定多个数据库,各数据库名称用逗号进行分隔。例如:

dta -D database_name1, database_name2...

或者,可以使用每个数据库名称的参数来指定多个数据库 -D ,例如:

dta -D database_name1 -D database_name2... n

参数 -D 是必需的。 -d如果未指定参数,则 dta 最初连接到在工作负荷中使用第一个USE database_name子句指定的数据库。 如果工作负荷中没有显式 USE database_name 子句,则必须使用 -d 参数。

例如,如果你有一个不包含显式 USE database_name 子句的工作负荷,并且你使用以下 dta 命令,则不会生成建议:

dta -D db_name1, db_name2...

但是,如果使用相同的工作负荷,并使用使用以下使用参数的 -ddta 命令,则会生成建议:

dta -D db_name1, db_name2 -d db_name1

-d database_name

指定优化工作负荷时 dta 连接到的第一个数据库。 只能为此参数指定一个数据库。 例如:

dta -d AdventureWorks2022 ...

如果指定多个数据库名称, dta 将返回错误。 参数 -d 是可选的。

如果使用 XML 输入文件,则可以使用位于 TuningOptions 元素下的 DatabaseToConnect 元素指定 dta 连接到的第一个数据库。 有关详细信息,请参阅 Database Engine Tuning Advisor

如果只优化一个数据库,该 -d 参数提供的功能类似于 -dsqlcmd 实用工具中的参数,但它不执行 USEdatabase_name 语句。 有关详细信息,请参阅 sqlcmd Utility

-E

使用可信连接而不请求密码。 -E必须使用参数或-U指定登录 ID 的参数。

-e tuning_log_name

指定表或文件的名称, 其中 dta 记录无法优化的事件。 表在执行优化的服务器上创建。

如果使用表,则用以下格式指定其名称: [database_name].[owner_name].table_name。 下表显示了每个参数的默认值:

参数 默认值 详细信息
database_name 使用-D选项指定的database_name
owner_name dbo owner_name 必须为 dbo。 如果指定了其他值,则 dta 执行将失败并返回错误。
table_name

如果使用文件,请指定 .xml 为其扩展名。 例如,TuningLog.xml

注意

删除会话时 ,dta 实用工具不会删除用户指定的优化日志表的内容。 优化大型工作负荷时,建议为优化日志指定表。 由于优化大型工作负荷可导致优化日志增大,因此使用表时删除会话的速度可快得多。

-F

允许 dta 覆盖现有的输出文件。 如果已存在同名且 -F 未指定输出文件, 则 dta 将返回错误。 可以与 -F-of-or-ox.

-fa physical_design_structures_to_add

指定 dta 应在建议中包括的物理设计结构的类型。 下表列出并说明了可为此参数指定的值。 如果未指定任何值, 则 dta 使用默认值 -fa IDX

说明
IDX_IV 索引和索引视图。
IDX 仅限索引。
IV 仅限索引视图。
NCL_IDX 仅限非聚集索引。

-fi

指定将在新建议中考虑筛选的索引。 有关详细信息,请参阅 “创建筛选索引”。

-fc

指定将在新建议中考虑的列存储索引。 DTA 同时考虑聚集列存储索引和非聚集列存储索引。 有关详细信息,请参阅 数据库引擎优化顾问(DTA)中的列存储索引建议

适用于:SQL Server 2016(13.x)及更高版本。

-fk keep_existing_option

指定 dta 在生成其建议时必须保留的现有物理设计结构。 下表列出并介绍了可以为此参数指定的值:

说明
NONE 无现有结构
所有现有结构
一致 所有分区对齐结构。
CL_IDX 表中的所有聚集索引
IDX 表中的所有聚集索引和非聚集索引

-fp partitioning_strategy

指定 dta 建议的新物理设计结构(索引和索引视图)是否应进行分区以及如何进行分区。 下表列出并介绍了可以为此参数指定的值:

说明
NONE 不分区
FULL 完全分区(选择该值可增强性能)
ALIGNED 仅限对齐分区(选择该值可增强可管理性)

ALIGNED 这意味着,在 dta 生成的建议中,每个建议索引的分区方式与定义索引的基础表完全相同。 索引视图中的非聚集索引与索引视图对齐。 只能为此参数指定一个值。 默认值为 -fp NONE

-fx drop_only_mode

指定 dta 仅考虑删除现有物理设计结构。 没有考虑任何新的物理设计结构。 如果指定此选项, dta 将评估现有物理设计结构的使用情况,并建议删除很少使用的结构。 此参数不带任何值, 它不能与参数-fp-fk ALL或参数一起使用-fa

-ID session_ID

为优化会话指定一个数字标识符。 如果未指定,则 dta 将生成一个 ID 号。 可以使用此标识符查看现有调优会话的信息。 如果未指定值 -ID,则必须使用 -s 指定会话名称。

-ip

指定计划缓存用作工作负荷。 分析显式选择的数据库的前 1000 个计划缓存事件。 可以使用此选项更改 -n 此值。

-智商

指定查询存储用作工作负荷。 对于显式选择的数据库,将分析查询存储中的前 1,000 个事件。 可以使用此选项更改 -n 此值。 有关详细信息,请参阅查询存储如何使用查询存储中的工作负荷和数据库引擎优化顾问收集数据和优化数据库

适用于:SQL Server 2016(13.x)及更高版本。

-if workload_file

指定用作优化输入的工作负荷文件的路径和文件名。 该文件必须具有以下格式之一: .trc (SQL Server Profiler 跟踪文件)、 .sql (Transact-SQL 文件)或 .log (SQL Server 跟踪文件)。 必须指定一个工作负荷文件或一个工作负荷表。

-it workload_trace_table_name

指定包含用于优化的工作负载跟踪的表名。 名称以 [database_name] 格式指定。[owner_name]。table_name

下表显示了每个参数的默认值:

参数 默认值
database_name 使用 选项指定 -D database_name。
owner_name dbo
table_name 无。

注意

owner_name 必须为 dbo。 如果指定了其他任何值,则 dta 执行将失败并返回错误。 另请注意,必须指定一个工作负荷表或一个工作负荷文件。

-ix input_XML_file_name

指定包含 dta 输入信息的 XML 文件的名称。 这必须是符合 DTASchema.xsd以下条件的有效 XML 文档。 在命令提示符中指定的优化选项参数将覆盖与其冲突的此 XML 文件中的相应值。 唯一的例外情况是:如果在 XML 输入文件中的评估模式下输入了用户指定的配置。 例如,如果在 XML 输入文件的 Configuration 元素中输入配置,并且 EvaluateConfiguration 元素也指定为优化选项之一,则 XML 输入文件中指定的优化选项将替代从命令提示符输入的任何优化选项。

-k maxtotalindexes

建议中的索引数上限。

-K maxtotalindexes

每表的索引数上限。

-m minimum_improvement

指定推荐的配置必须满足的最小改进百分比。

-N online_option

指定是否联机创建物理设计结构。 下表列出并说明了可为此参数指定的值:

说明
OFF 建议的物理设计结构都无法联机创建。
ON 所有建议的物理设计结构都可以联机创建。
MIXED 数据库引擎优化顾问会尝试建议可以联机创建的物理设计结构。

如果索引是联机创建的, ONLINE = ON 则追加到其对象定义中。

-n number_of_events

指定 dta 应在工作负载中优化的事件数。 如果指定此参数,并且工作负荷是包含持续时间信息的跟踪文件,则 dta 将按持续时间的降序优化事件。 此参数可用于比较物理设计结构的两个配置。 若要比较两个配置,请为这两个配置指定相同的要优化的事件数,再为这两个配置指定不受限制的优化时间。如下所示:

dta -n number_of_events -A 0

在这种情况下,必须指定无限制的优化时间(-A 0)。 否则,数据库引擎优化顾问将采用默认的 8 小时优化时间。

-l time_window_in_hours

指定查询必须执行的时间范围(以小时为单位),以便 DTA 在使用 -iq 选项(查询存储中的工作负荷)时进行优化。

dta -iq -l 48

在这种情况下,DTA 使用查询存储作为工作负荷的源,只考虑过去 48 小时内执行的查询。

适用于:SQL Server 2016 (13.x) 及更高版本。

-of output_script_file_name

指定 dta 将建议作为 Transact-SQL 脚本写入到指定的文件名和目标。

可以与此选项一起使用 -F 。 请确保文件名是唯一的,尤其是在使用和-ox-or

-或 output_xml_report_file_name

指定 dta 使用 XML 将建议写入输出报告。 如果提供了文件名,建议将被写入该文件所指的位置。 否则, dta 将使用会话名生成文件名,并将该文件名写入当前目录。

可以与此选项一起使用 -F 。 请确保文件名是唯一的,尤其是在使用和-ox-of

-ox output_XML_file_name

指定 dta 将建议写为 XML 文件,并写入提供的文件名和目标位置。 请确保数据库引擎优化顾问有写入目标目录的权限。

可以与此选项一起使用 -F 。 请确保文件名是唯一的,尤其是在使用和-or-of

-P 密码

指定 登录 ID 的密码。 如果未使用此选项, dta 会提示输入密码。

-q

设置静默模式。 不向控制台写入信息,其中包括进度和标题信息。

-rl analysis_report_list

指定要生成的分析报告列表。 下表列出并说明了可为此参数指定的值:

报表
所有分析报告
STMT_COST 语句开销报告
EVT_FREQ 事件频率报告
STMT_DET 语句详细报告
CUR_STMT_IDX 语句-索引关系报告(当前配置)
REC_STMT_IDX 语句-索引关系报告(建议配置)
STMT_COSTRANGE 语句开销范围报告
当前索引使用情况 索引使用报告(当前配置)
记录索引使用情况 索引使用报告(建议配置)
CUR_IDX_DET 索引详细报告(当前配置)
REC_IDX_DET 索引详细报告(建议配置)
VIW_TAB 视图-表关系报告
WKLD_ANL 工作负荷分析报告
数据库访问 数据库访问报告
标签访问 表访问报告
COL_ACCESS 列访问报告

指定多个报告时,用逗号分隔各个值。例如:

... -rl EVT_FREQ, VIW_TAB, WKLD_ANL ...

-S server_name [ \instance ]

指定要连接到的 SQL Server 计算机和实例的名称。 如果未指定 server_name ,则 dta 将连接到本地计算机上的默认 SQL Server 实例。 如果连接到命名实例或从网络中的远程计算机执行 dta ,则必须使用此选项。

-s session_name

指定优化会话的名称。 如果未 -ID 指定,则需要此作。

-Tf table_list_file

指定包含要优化的一组表的文件名。 文件中列出的每个表应另起一行。 表名应具有三部分命名的限定符,例如 AdventureWorks2022.HumanResources.Department。 为了调用表的扩展功能,可以选择在现有表名后加上一个数字,指示表中的预定行数。 数据库引擎优化顾问在优化或评估引用这些表的工作负载中的语句时,将考虑这些预定行数。 number_of_rows计数和table_name之间可以有一个或多个空格。

以下是 table_list_file的文件格式:

database_name。[schema_name]。table_name [number_of_rows]
database_name。[schema_name]。table_name [number_of_rows]
database_name。[schema_name]。table_name [number_of_rows]

此参数是在命令提示符处输入表列表的替代方法(-Tl)。 如果使用表列表文件 (-Tf) ,请不要使用 -Tl。 如果同时使用这两个参数, dta 将失败并返回错误。

-Tf如果省略了参数,-Tl则考虑指定数据库中的所有用户表进行优化。

-Tl table_list

在命令提示符中指定要优化的一组表。 各表名间用逗号分隔。 如果只有一个数据库使用 -D 参数指定,则无需使用数据库名称限定表名。 否则,每个表都必须使用格式为 database_name.schema_name.table_name 的完全限定名。

此参数是使用表列表文件 (-Tf) 的替代方法。 如果同时使用这两者-Tl-Tf则 dta 会失败并返回错误。

-U login_id

指定用于连接到 SQL Server的登录 ID。

-u

启动数据库引擎优化顾问 GUI。 所有参数均被视为用户界面的初始设置。

-x

启动优化会话,然后退出。

备注

Ctrl+C 一次停止优化会话,并根据分析 dta 生成建议,至此为止。 系统会提示你决定是否要生成建议。 再次按 Ctrl+C 以停止优化会话,而不生成建议。

示例

答: 在其建议中优化包含索引和索引视图的工作负载

此示例使用安全连接 (-E) 连接到 tpcd1G MyServer 上的数据库以分析工作负荷并创建建议。 它将输出写入名为 script.sql 的脚本文件。 如果 script.sql 已存在, 则 dta 会覆盖文件, -F 因为已指定参数。 优化会话的运行时间没有限制,以确保完成工作负荷分析 (-A 0)。 建议必须至少提供 5% 的改进 (-m 5)。 dta 应在其最终建议中包含索引和索引视图 (-fa IDX_IV)。

dta -S MyServer -E -D tpcd1G -if tpcd_22.sql -F -of script.sql -A 0 -m 5 -fa IDX_IV

B. 限制磁盘使用

此示例将包含原始数据和额外索引的总数据库大小限制为 3 GB(GB)(-B 3000),并将输出定向到 d:\result_dir\script1.sql。 该示例的运行时间不会超过 1 小时 (-A 60)。

dta -D tpcd1G -if tpcd_22.sql -B 3000 -of "d:\result_dir\script1.sql" -A 60

C. 限制优化的查询数

本示例将从文件 orders_wkld.sql 读取的查询数限制为最多 10 (-n 10),并运行 15 分钟(-A 15以第一个为准)。 要确保所有 10 个查询都得到优化,请用 -A 0 指定不受限制的优化时间。 如果时间紧迫,则通过用 -A 参数指定用于优化的分钟数来指定适当的时间限制,如本例所示。

dta -D orders -if orders_wkld.sql -of script.sql -A 15 -n 10

D. 优化文件中列出的特定表

此示例演示如何使用 table_list_file-Tf 参数)。 文件 table_list.txt 的内容如下所示:

AdventureWorks2022.Sales.Customer  100000
AdventureWorks2022.Sales.Store
AdventureWorks2022.Production.Product  2000000

指定的内容 table_list.txt

  • 只应优化数据库中的 CustomerStore表和 Product 表。

  • 假定表中CustomerProduct的行数分别为 100,000 和 2,000,000。

  • 假定表中 Store 的行数为当前行数。

    table_list_file中,行计数数与上表名之间可以有一个或多个空格。

    优化时间为 2 小时 (-A 120),输出将写入 XML 文件 (-ox XMLTune.xml)。

dta -D pubs -if pubs_wkld.sql -ox XMLTune.xml -A 120 -Tf table_list.txt