dta 公用程式

dta 公用程式是 Database Engine Tuning Advisor 的命令提示字元版本。dta 公用程式的設計,是為了讓您在應用程式和指令碼中使用 Database Engine Tuning Advisor 功能。

如同 Database Engine Tuning Advisor,dta 公用程式也會分析工作負載,以及提供實體設計結構方面的建議,來增進這個工作負載的伺服器效能。工作負載可能是 SQL Server Profiler 追蹤檔或資料表,也可能是 Transact-SQL 指令碼。實體設計結構包括索引、索引檢視和分割。分析好工作負載之後,dta 公用程式會產生關於資料庫實體設計的建議,且能夠產生必要的指令碼來實作這項建議。您可以在命令提示字元之下,利用 -if-it 引數來指定工作負載。您也可以在命令提示字元之下,利用 -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 }
              { -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 ]
                  [ -m minimum_improvement ]
                          [ -fa physical_design_structures_to_add ]
                          [ -fi ]
                          [ -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 ]
     ]

引數

  • -?
    顯示使用方式資訊。

  • -Atime_for_tuning_in_minutes
    指定微調時間限制 (以分鐘為單位)。dta 會利用指定的時間量來微調工作負載,以及產生含有建議的實體設計變更的指令碼。依預設,dta 假設微調時間是 8 小時。指定 0 會接受無限的微調時間。dta 可能會在時間限制過期之前,完成整個工作負載的微調。不過,為了確保整個工作負載都得到微調,我們建議您指定無限的微調時間 (-A 0)。

  • -a
    不發出提示,直接微調工作負載和套用建議的內容。

  • -Bstorage_size
    指定建議的索引和分割所能使用的最大空間 (以 MB 為單位)。當微調多個資料庫時,所有資料庫的建議內容都考量了空間的計算。依預設,dta 會採用下列中較小的儲存體大小:

    • 目前的原始資料大小的三倍,其中包括資料庫中各資料表的堆積和叢集索引的總大小。

    • 所有相連硬碟的可用空間,加上原始資料大小。

    預設儲存體大小不包括非叢集索引和索引檢視。

  • -Cmax_columns_in_index
    指定 dta 所提出之索引中的最大資料行數目。最大值會隨著 SQL Server 的版本而不同。SQL Server 2000 的最大值是 16,SQL Server 2005 和 SQL Server 2008 的最大值是 1024。依預設,引數設定為 16。

  • -cmax_key_columns_in_index
    指定 dta 所提出之索引中的最大索引鍵資料行數目。預設值是 16,為所允許的最大值。這個引數僅適用於 SQL Server 2005 和 SQL Server 2008。dta 也會考慮使用內含資料行建立索引。具備內含資料行的建議索引可能超出這個引數所指定的資料行數目。

  • -Ddatabase_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...
    

    不過,如果您使用相同的工作負載,且使用下列會用到 -d 引數的 dta 指令,就會產生一項建議:

    dta -D db_name1, db_name2 -d db_name1
    
  • -ddatabase_name
    指定微調工作負載時,dta 所連接的第一個資料庫。這個引數只能指定一個資料庫。例如:

    dta -d adventureworks ...
    

    如果指定了多個資料庫名稱,dta 就會傳回錯誤。-d 引數是選擇性的。

    如果使用 XML 輸入檔,您可以利用 TuningOptions 元素下的 DatabaseToConnect 元素來指定 dta 所要連接的第一個資料庫。如需詳細資訊,請參閱<XML 輸入檔參考 (Database Engine Tuning Advisor)>。

    如果您只微調一個資料庫,-d 引數會提供類似 sqlcmd 公用程式中的 -d 引數的功能,但它不會執行 USE database_name 陳述式。如需詳細資訊,請參閱<sqlcmd 公用程式>。

  • -E
    使用信任連接,不要求密碼。必須使用指定登入識別碼的 -E 引數或 -U 引數。

  • -etuning_log_name
    指定 dta 用來記錄它無法微調的事件之資料表或檔案的名稱。資料表建立在執行微調的伺服器中。

    如果使用某份資料表,請依照下列格式來指定它的名稱:[database_name].[owner_name].table_name。下表顯示各個參數的預設值:

    參數

    預設值

    database_name

    database_name 同時指定 –D 選項

    owner_name

    dbo

    附註附註
    owner_name 必須是 dbo。如果指定了任何其他值,dta 便會執行失敗,且會傳回錯誤。

    table_name

    如果使用檔案,請指定 .xml 副檔名。例如,TuningLog.xml。

    [!附註]

    如果工作階段遭到刪除,dta 公用程式不會刪除使用者指定的微調記錄資料表的內容。在微調超大型工作負載時,我們建議您對微調記錄指定資料表。由於微調大型工作負載會產生大量微調記錄,因此,在使用資料表時可以更快刪除工作階段。

  • -F
    允許 dta 覆寫現有的輸出檔。如果含相同名稱的輸出檔已存在,且未指定 -Fdta 會傳回錯誤。您可以搭配 -of-or-ox 來使用 -F

  • -faphysical_design_structures_to_add
    指定 dta 應該將它們包含在建議內容中的實體設計結構類型。下表列出和描述這個引數所能指定的值。如果未指定任何值,dta 會使用預設的 -faIDX。

    描述

    IDX_IV

    索引和索引檢視。如需有關哪些 SQL Server 版本不支援這個微調選項的資訊,請參閱<不支援的微調選項>。

    IDX

    只有索引。

    IV

    只有索引檢視。如需有關哪些 SQL Server 版本不支援這個微調選項的資訊,請參閱<不支援的微調選項>。

    NCL_IDX

    只有非叢集索引。

  • -fi
    指定應該針對新建議考量篩選索引。如需詳細資訊,請參閱<篩選索引設計指導方針>。

  • -fkkeep_existing_option
    指定 dta 在產生建議時,必須保留的現有實體設計結構。下表列出和描述這個引數所能指定的值:

<div class="caption">

</div>

<div class="tableSection">

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="header">
<th><p>值</p></th>
<th><p>描述</p></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>NONE</p></td>
<td><p>無現有結構。</p></td>
</tr>
<tr class="even">
<td><p>ALL</p></td>
<td><p>所有現有結構。</p></td>
</tr>
<tr class="odd">
<td><p>ALIGNED</p></td>
<td><p>所有資料分割對齊結構。</p></td>
</tr>
<tr class="even">
<td><p>CL_IDX</p></td>
<td><p>資料表的所有叢集索引。</p></td>
</tr>
<tr class="odd">
<td><p>IDX</p></td>
<td><p>資料表的所有叢集和非叢集索引。</p></td>
</tr>
</tbody>
</table>

</div>
  • -fppartitioning_strategy
    指定是否應該分割 dta 所提出的新實體設計結構 (索引和索引檢視) 及其分割方式。下表列出和描述這個引數所能指定的值:

    描述

    NONE

    沒有資料分割。

    FULL

    完整的資料分割 (選擇這個項目,可以增進效能)。

    ALIGNED

    只有對齊的資料分割 (選擇這個項目,管理會更容易)。

    ALIGNED 表示在 dta 所產生的建議中,每個提出的索引都完全依照索引定義基礎資料表的相同方式來分割。索引檢視中的非叢集索引會對齊索引檢視。這個引數只能指定一個值。預設值是 -fpNONE。

  • -fxdrop_only_mode
    指定 dta 只考慮卸除現有的實體設計結構。不考慮任何新的實體設計結構。當指定這個選項時,dta 會評估現有實體設計結構的用處,且會建議您卸除不常使用的結構。這個引數沒有任何值。它不能搭配 -fa-fp-fk ALL 等引數一起使用。

  • -IDsession_ID
    指定微調工作階段的數值識別碼。若未指定,dta 會產生一個識別碼。您可以利用這個識別碼來檢視現有微調工作階段的資訊。如果您沒有指定 -ID 值,就必須利用 -s 來指定工作階段名稱。

  • -ifworkload_file
    指定微調輸入所用的工作負載檔案的路徑和名稱。檔案必須是下列格式之一:.trc (SQL Server Profiler 追蹤檔)、.sql (SQL 檔) 或 .log (SQL Server 追蹤檔)。您必須指定一個工作負載檔案或一份工作負載資料表。

  • -itworkload_trace_table_name
    指定包含微調工作負載追蹤的資料表名稱。名稱以此格式指定:[database_name].[owner_name]**.**table_name。

    下表顯示各項目的預設值:

    參數

    預設值

    database_name

    database_name 同時指定 –D 選項。

    owner_name

    dbo

    table_name

    無。

    [!附註]

    owner_name 必須是 dbo。如果指定了任何其他值,dta 便會執行失敗,且會傳回錯誤。另外,也請注意,您必須指定一份工作負載資料表,或指定一個工作負載檔案。

  • -ixinput_XML_file_name
    指定包含 dta 輸入資訊的 XML 檔案名稱。這必須是符合 DTASchema.xsd 的有效 XML 文件集。在命令提示字元之下指定給微調選項的衝突引數會覆寫這個 XML 檔中對應的值。XML 輸入檔中以評估模式輸入的使用者指定組態是唯一例外。例如,如果在 XML 輸入檔的 Configuration 元素中輸入了某項組態,EvaluateConfiguration 元素也指定成一個微調選項,XML 輸入檔所指定的微調選項會覆寫在命令提示字元之下輸入的任何微調選項。

  • -mminimum_improvement
    指定建議的組態必須符合的最小改進百分比。

  • -Nonline_option
    指定是否在線上建立實體設計結構。下表列出和描述這個引數所能指定的值:

    描述

    OFF

    不能在線上建立任何建議的實體設計結構。

    ON

    可以在線上建立所有建議的實體設計結構。

    MIXED

    Database Engine Tuning Advisor 嘗試建議在可能的情況下,能夠在線上建立的實體設計結構。

    如果在線上建立索引,就會在它的物件定義上附加 ONLINE = ON。

  • -nnumber_of_events
    指定在 dta 應該微調的工作負載中的事件數目。如果指定了這個引數,且工作負載是包含持續時間資訊的追蹤檔,dta 就會依持續時間的遞減順序來微調事件。這個引數可用來比較實體設計結構的兩個組態。若要比較兩個組態,請依照下列方式,先指定相同的微調事件數目給這兩個組態,之後,兩個組態都指定無限的微調時間:

    dta -n number_of_events -A 0
    

    在這個情況下,指定無限微調時間 (-A 0) 非常重要。否則,Database Engine Tuning Advisor 會預設 8 小時的微調時間。

  • -ofoutput_script_file_name
    指定 dta 將建議當作一份 Transact-SQL 指令碼,寫入指定的檔案名稱和目的地中。

    您可以搭配這個選項來使用 -F。請確定檔案名稱是唯一的,當您同時使用 -or-ox 時,尤其如此。

  • -oroutput_xml_report_file_name
    指定 dta 將建議寫入 XML 輸出報告中。如果提供了檔案名稱,建議便會寫入這個目的地。否則,dta 會利用工作階段名稱來產生檔案名稱,並將它寫入目前的目錄中。

您可以搭配這個選項來使用 **-F**。請確定檔案名稱是唯一的,當您同時使用 **-of** 和 **-ox** 時,尤其如此。
  • -oxoutput_XML_file_name
    指定 dta 將建議當作一份 XML 檔,寫入提供的檔案名稱和目的地中。請確定 Database Engine Tuning Advisor 有寫入目的地目錄的權限。

    您可以搭配這個選項來使用 -F。請確定檔案名稱是唯一的,當您同時使用 -of-or 時,尤其如此。

  • -Ppassword
    指定登入識別碼的密碼。如果未使用這個選項,dta 會提示您輸入密碼。

  • -q
    設定無訊息模式。不會將任何資訊寫入主控台中,進度和標頭資訊都包括在內。

  • -rlanalysis_report_list
    指定要產生的分析報表清單。下表列出這個引數所能指定的值:

    報表

    ALL

    所有分析報表

    STMT_COST

    陳述式成本報表

    EVT_FREQ

    事件頻率報表

    STMT_DET

    陳述式詳細資料報表

    CUR_STMT_IDX

    陳述式-索引關聯性報表 (目前組態)

    REC_STMT_IDX

    陳述式-索引關聯性報表 (建議組態)

    STMT_COSTRANGE

    陳述式成本範圍報表

    CUR_IDX_USAGE

    索引使用方式報表 (目前的組態)

    REC_IDX_USAGE

    索引使用方式報表 (建議的組態)

    CUR_IDX_DET

    索引詳細資料報表 (目前的組態)

    REC_IDX_DET

    索引詳細資料報表 (建議的組態)

    VIW_TAB

    檢視-資料表關聯性報表

    WKLD_ANL

    工作負載分析報表

    DB_ACCESS

    資料庫存取報表

    TAB_ACCESS

    資料表存取報表

    COL_ACCESS

    資料行存取報表

    請用逗號將各個值分隔來指定多份報表,例如:

    ... -rl EVT_FREQ, VIW_TAB, WKLD_ANL ...
    
  • -Sserver_name[ \instance]
    指定電腦名稱及要連接的 SQL Server 執行個體。如果未指定 server_name,dta 會連接到本機電腦上的 SQL Server 預設執行個體。當連接到具名執行個體或從網路遠端電腦執行 dta時,需要這個選項。

  • -ssession_name
    指定調整工作階段的名稱。如果未指定 -ID,就需要這個選項。

  • -Tftable_list_file
    指定要微調的資料表清單所在的檔案名稱。檔案中所列出的每份資料表,都應該從新的一行中開始。資料表名稱應該採用三部份命名,例如 adventureworks.dbo.department。另外,如果您要叫用資料表調整功能,現有資料表的名稱後面可以接著一個指示預計資料表列數的數字。當微調或評估工作負載中參考這些資料表的陳述式時,Database Engine Tuning Advisor 會考量預計的列數。請注意,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) 的替代方案。如果您使用 -Tl,請勿使用資料表清單檔案 (-Tf)。如果同時使用這兩個引數,dta 會失敗,且會傳回錯誤。

    如果省略 -Tf-Tl 引數,指定資料庫中的所有使用者資料表都會被視為要進行微調。

  • -Tltable_list
    在命令提示字元之下,指定要微調的資料表清單。請在資料表名稱之間加上逗號,將它們分開。如果只用 -D 引數指定了一個資料庫,就不需要用資料庫名稱來指定資料表名稱。否則,每份資料表都需要完整的名稱格式:database_name.schema_name.table_name。

    這個引數是使用資料表清單檔案 (-Tf) 的替代方案。如果同時使用 -Tl-Tfdta 會失敗,且會傳回錯誤。

  • -Ulogin_id
    指定用來連接 SQL Server 的登入識別碼。

  • -u
    啟動 Database Engine Tuning Advisor GUI。所有參數都會當作使用者介面的初始設定來處理。

  • -x
    啟動微調工作階段並結束。

備註

請按一下 CTRL+C 來停止微調工作階段,並產生基於 dta 目前所完成的分析建議。系統會提示您決定是否要產生建議。請再按一下 CTRL+C 來停止微調工作階段,不產生建議。

範例

A. 微調建議中包括索引和索引檢視的工作負載

這個範例利用安全連接 (-E) 來連接 MyServer 中的 tpcd1G 資料庫,以分析工作負載和建立各項建議。它將輸出寫在名稱為 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 (-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 檔的內容如下:

adventureworks.dbo.customer  100000
adventureworks.dbo.store
adventureworks.dbo.product  2000000

table_list.txt 的內容指定:

  • 只應微調資料庫中的 customerstoreproduct 等資料表。

  • 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