dta”命令行工具

时间:2021-10-17 17:43:21
本系列文章关注SQL Server数据库调优命令行工具,比如:“dta”命令行工具。我们会关注它的用法以及它对应的图形化工具,我们会基于给定负载进行分析并提供一些建议。另外我们还将了解到“tablediff”命令行工具,它支持你比较两个表的内容。

  “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参数,然后运行分析。