“dta”命令行工具
“dta”是图形化数据库引擎调优顾问的命令行版本。命令行工具和图形化工具都基于它们面对的负载提供性能优化建议。“dta”的语法如下:
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 } { -s session_name | -ID session_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 ] [ -m minimum_improvement ] [ -fa physical_design_structures_to_add ] [ -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 ] ] |
这款工具有大量的参数可用,然而这些参数有许多不需要进行基本的分析。但是至少,你需要使用那些提供连接到数据库,负载调优,优化会话识别符,以及存储优化建议位置的参数。连接涉及的参数有:“-S”指定服务名,“-D”指定数据库,而“-E”指定信任连接,“-U”和“-P”可以被用户指定用户名和密码。
待优化的负载既可以是负载文件,也可以是负载表。“-if”参数用来指定负载文件的位置,而“-it”参数用来指定负载表。负载文件必须是Profiler跟踪文件(.trc),包含T-SQL命令的SQL脚本(.sql),或者是SQL Server跟踪文件(.log)。负载表是包含来自负载跟踪的SQL输出的表。该表是以“数据库名.所有者名.表名”的形式来指定的。
优化会话必须被明确指定,可以用会话名称指定,也可以用会话ID指定。会话名称是基于字符的,可以用“-s”参数指定。如果会话名称没有提供,那么必须提供会话ID以作为替代。会话ID必须是数值型的,它是用“-ID”参数设置的。如果会话名称指定了,而没有使用会话ID,那么“dta”无论如何也会生成一个ID。
最后一个参数需要一个基本的“dta”执行,来指定存储“dta”性能建议的目标位置,它可以被存储为脚本文件或者XML。“-of”选项被用户指定输出脚本文件名。要生成XML输出文件,需要指定“-or”或者“-ox”参数。如果我们没有指定文件名,“-or”参数会生成一个文件名,“-ox”参数需要一个文件名。“-F”参数可以与任何输出参数一起使用,用来强制覆写存在的同名文件(如果存在的话)。
为了说明“dta”基本参数的用法,我们来看一个对简单的“SELECT”语句进行优化的例子,它使用的是“AdventureWorks2008R2 ”数据库。首先,你要使用下面这段T-SQL,它被存储在命名为“c:\myScript.sql”的负载文件中:
USE AdventureWorks2008R2 ;
GO select * from Production.transactionHistory where TransactionDate = ‘9/1/04’ |
下面的例子展示了基本的“dta”执行参数,它们可以被用来获取性能建议:
dta -S xpvirtual1 -E -D AdventureWorks2008R2 -if c:\MyScript.sql
-s MySessionX -of C:\MySessionOutputScript.sql -F |
前面的例子利用了连接到“AdventureWorks2008R2 ”数据库的信任连接,负载文件名为“c:\MyScript.sql”,会话名为“MySessionX”,它输出性能建议到一个名为“c:\MySessionOutputScript.sql”的文本文件。“-F”选项被用来覆盖输出文件(如果已经存在文件的话)。该输出文件包含下面性能建议:
se [AdventureWorks2008R2]
go CREATE NONCLUSTERED INDEX [_dta_index_TransactionHistory_5] ON [Production].[TransactionHistory] ( [TransactionDate] ASC ) INCLUDE ( [TransactionID], [ProductID], [ReferenceOrderID], [ReferenceOrderLineID], [TransactionType], [Quantity], [ActualCost], [ModifiedDate]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] go |
总之,“dta”输出推荐在“TransactionHistory ”表的“TransactionDate ”列上创建新的索引。这是一个可行的建议,考虑到在“TransactionHistory.TransactionDate”列没有索引,在负载文件中它被用作搜索参数。
许多其他参数(不只是基本执行的功能)可以控制“dta”提供推荐建议的方式。例如,可以提供一个列表来限定在调试期间“dta”会查看哪些表。还有参数可以设置“dta”调优的限制时间或者事件数量。这些参数超出了本章的范围,但是你可以通过查看图形化“DTA”来进行进一步了解,在图形化“DTA”中包含有许多相同类型的参数。在“DTA”中你可以优化你的调优参数,把参数导出成XML文件,然后在“dta”工具中利用“-ix”导入这些XML参数,然后运行分析。