共用方式為


dta 公用程式

適用於:SQL Server

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

注意

Azure SQL Database 或 Azure SQL 受控執行個體不支援資料庫引擎微調顧問。 相反地,請考慮 Azure SQL Database 和 Azure SQL 受控執行個體中的監視和效能微調中建議的策略。 若為 Azure SQL Database,則另請參閱 Azure SQL Database 的 Database 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 }
      { -ce connection_encrypt_option }
      { -tc }
      { -hc hostname_in_certificate }
      { -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 ]
]

引數

-?

顯示使用資訊。

-一個 time_for_tuning_in_minutes

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

-a

調整工作負載並套用建議,不需提示。

-B storage_size

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

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

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

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

-C 最大索引欄位數

指定 dta 所提出之索引內的資料行數目上限。 最大值為 1024。 依預設,引數設定為 16。

-c max_key_columns_in_index

指定 dta 所提議之索引中關鍵欄位的最大數量。 預設值是 16,這是允許的最大值。 dta 也會考慮使用內含資料行建立索引。 建議包含直欄的索引可能會超過此引數中指定的直欄數目。

-ce connection_encrypt_option

適用於:SQL Server 2025(17.x)及更新版本

規定伺服器與用戶端之間的連線是加密的。 可能的值:yes、、 nostrict和 。 預設選項為 yes。 更多資訊請參閱 TDS 8.0

-TC

適用於:SQL Server 2025(17.x)及更新版本

指定是否信任伺服器憑證。 此參數是可選的,類似於其他工具和連接字串中使用的HostnameInCertificate

更多資訊請參閱 TDS 8.0

-hc hostname_in_certificate

適用於:SQL Server 2025(17.x)及更新版本

在伺服器憑證驗證過程中,指定一個不同且預期的 CN 或 SAN 以便使用。 更多資訊請參閱 TDS 8.0

-D database_name

指定要微調的每個資料庫的名稱。 第一個資料庫是預設資料庫。 您可以指定多個資料庫,以逗號分隔各個資料庫名稱,例如:

dta -D database_name1, database_name2...

或者,您可以使用每個資料庫名稱的引數來 -D 指定多個資料庫,例如:

dta -D database_name1 -D database_name2... n

-D 論點是強制性的。 如果未指定參數,-dDTA 會先連接到工作負載中第一個USE database_name子句指定的資料庫。 如果工作負載中沒有明確 USE database_name 子句,您必須使用 -d 引數。

例如,如果您的工作負載不包含明確 USE database_name 子句,且您使用下列 dta 命令,則不會產生建議:

dta -D db_name1, db_name2...

但是,如果您使用相同的工作負載,並使用下列使用引數的 -d 命令,則會產生建議:

dta -D db_name1, db_name2 -d db_name1

-d 資料庫名稱

指定 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 database_name 使用-D
owner_name dbo owner_name 必須是 dbo。 如果指定了任何其他值, dta 的執行便會失敗並傳回錯誤。
table_name 沒有

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

注意

如果刪除工作階段, dta 公用程式不會刪除使用者指定的調整記錄資料表的內容。 調整大型工作負載時,建議您為調整記錄指定資料表。 由於調整大型工作負載可能會產生大量調整日誌,使用資料表可以更快地刪除會話。

-F

允許 dta 覆寫現有的輸出檔。 如果具有相同名稱的輸出檔案已存在且 -F 未指定,則 dta 會傳回錯誤。 您可以搭配 -F-of、 或 。-or-ox

-法 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 會評估現有實體設計結構的可用程度,並建議您卸除不常使用的結構。 這個引數沒有任何值。 它不能與 、 -fa-fp引數一起使用-fk ALL

-識別碼 session_ID

指定微調工作階段的數值識別碼。 若未指定,則 dta 會產生一個識別碼。 您可以利用這個識別碼來檢視已存在的調整工作階段的資訊。 如果您未指定 的 -ID值,則必須使用 -s指定工作階段名稱。

-ip

指定使用計劃快取作為工作量。 針對明確選定的資料庫排名前 1000 個計畫快取事件,進行分析。 可以使用選項 -n 變更此值。

-智商

指定查詢存放區作為工作負載。 系統會針對專門選定的資料庫分析查詢存放區前 1000 個事件。 可以使用選項 -n 變更此值。 如需詳細資訊,請參閱查詢 存放區如何收集資料 ,以及 使用資料庫引擎微調顧問從查詢存放區使用工作負載來調整資料庫

適用於:SQL Server 2016 (13.x) 和更新版本。

-如果 workload_file

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

-它 workload_trace_table_name

指定包含用於調整工作負載追蹤的資料表名稱。 名稱的格式為:[database_name]。[owner_name]。table_name

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

參數 預設值
database_name database_name 使用選項指定 -D
owner_name dbo
table_name 無。

注意

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

-ix input_XML_file_name

指定包含 dta 輸入資訊的 XML 檔案名稱。 此 XML 文件必須符合結構規範 DTASchema.xsd 。 微調選項的命令提示字元所指定的衝突引數會覆寫這個 XML 檔案中的對應值。 XML 輸入檔中以評估模式輸入的使用者指定組態是唯一例外。 例如,如果在 XML 輸入檔的 Configuration 元素中輸入配置,且 EvaluateConfiguration 元素也指定為其中一個調整選項,則 XML 輸入檔中指定的調整選項會置換從指令提示字元輸入的任何調整選項。

-k 最大總索引

建議的索引數上限。

-K 最大總索引

每一資料表的索引數上限。

-m minimum_improvement

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

-N online_option(線上選項)

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

描述
OFF 不能在線上建立任何建議的實體設計結構。
ON 可以在線上建立所有建議的實體設計結構。
MIXED Database Engine Tuning Advisor 嘗試建議在可能的情況下,能夠在線上建立的實體設計結構。

如果索引是在線上建立, ONLINE = ON 則會附加至其物件定義。

-n number_of_events

指定在工作負載中 dta 應微調的事件數目。 如果指定了此引數,且工作負載是包含持續時間資訊的追蹤檔, dta 就會依據持續時間的遞減順序來微調事件。 這個引數可用來比較實體設計結構的兩個組態。 要比較兩種配置,請指定兩個配置需調整相同數量的事件,然後對兩者設定無限次調諧時間,具體如下:

dta -n number_of_events -A 0

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

-l time_window_in_hours

指定查詢必須執行的時間窗(以小時為單位),以便在使用 -iq 選項(來自查詢存儲的工作負載)時被考慮進行調整。

dta -iq -l 48

在此情況下,DTA 會使用查詢存放區作為工作負載的來源,並只考慮過去 48 小時內執行的查詢。

適用於:SQL Server 2016 (13.x) 和更新版本。

- output_script_file_name

指定 dta 將建議以 Transact-SQL 指令碼形式寫入指定的檔案名稱與目的地。

您可以與此選項一起使用 -F 。 請確定檔案名稱是唯一的,特別是如果您也使用 -or and -ox

-或 output_xml_report_file_name

指定 dta 將建議以 XML 格式寫入輸出報表。 如果提供了檔案名稱,建議便會寫入該目的地。 否則, dta 將使用該工作階段名稱來產生檔案名稱,並將其寫入目前的目錄。

您可以與此選項一起使用 -F 。 請確定檔案名稱是唯一的,特別是如果您也使用 -of and -ox

-牛 output_XML_file_name

指定 dta 將建議以 XML 檔案格式寫入提供的檔案名稱與目的地。 請確定 Database Engine Tuning Advisor 有寫入目的地目錄的權限。

您可以與此選項一起使用 -F 。 請確定檔案名稱是唯一的,特別是如果您也使用 -of and -or

-P 密碼

指定 登入識別碼的密碼。 如果未使用此選項, dta 會提示輸入密碼。

-q

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

-rl analysis_report_list

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

報告
全部 所有分析報表
STMT_COST 陳述式成本報表
EVT_FREQ 事件頻率報表
STMT_DET 報表詳細報告
CUR_STMT_IDX 陳述式-索引關聯性報表 (目前組態)
REC_STMT_IDX 陳述式-索引關聯性報表 (建議組態)
STMT_COSTRANGE 陳述式成本範圍報表
CUR_IDX_USAGE 索引使用方式報表 (目前的組態)
記錄索引使用 索引使用方式報表 (建議的組態)
CUR_IDX_DET 索引詳細資料報表 (目前的組態)
REC_IDX_DET 索引詳細資料報表 (建議的組態)
VIW_TAB 視圖表-資料表關聯性報表
WKLD_ANL 工作負載分析報表
資料庫訪問 資料庫存取報表
標籤存取 資料表存取報表
COL_ACCESS 欄存取報表

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

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

-S server_name [ \實例 ]

指定要連線的電腦名稱及 SQL Server 執行個體。 若未指定 server_name,則 dta 會連線到本機電腦的預設 SQL Server 執行個體。 連接至具名的執行個體或透過網路從遠端電腦執行 dta 時,必須使用此選項。

-S session_name

指定調整工作階段的名稱。 如果未指定,則 -ID 為必要。

-TF table_list_file

指定包含要微調的資料表清單之檔案名稱。 檔案中所列出的每份資料表,都應該從新的一行中開始。 表格名稱應該以三部分命名來限定,例如 AdventureWorks2022.HumanResources.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 中輸入表格清單的替代方法。 如果您使用 -Tf,請勿使用表格清單檔案 (-Tl)。 如果同時使用這兩個引數, dta 會失敗並傳回錯誤。

如果省略 and -Tf-Tl 引數,則會考慮指定資料庫中的所有使用者表格進行調整。

-TL table_list

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

此引數是使用表格清單檔案 ()-Tf 的替代方案。 如果同時 -Tl 使用 and -Tf ,則 dta 會失敗並傳回錯誤。

-U login_id

指定用來連線至 SQL Server 的登入識別碼。

-u

啟動 Database Engine Tuning Advisor GUI。 所有參數都會視做為使用者介面的初始設定。

-x

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

備註

按一次 Ctrl+C 即可停止調校會話,並根據 dta 迄今為止完成的分析產生建議。 系統會提示您決定是否要產生建議。 再次按 Ctrl+C 以停止調整工作階段,而不產生建議。

範例

A。 微調推薦中包含索引和索引檢視的工作負載

此範例使用安全連線 (-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 (-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 指定:

  • Customer應調整資料庫中的 、 StoreProduct 資料表。

  • 假設 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

E. 連接工作負載文件,覆寫輸出文件,並提供調整選項

這個範例展示了如何在不加密的情況下連接、包含工作負載檔案、覆蓋輸出檔案、調整 60 分鐘,改進 5%,且只用索引。 用有效的值替換 <server><database>

dta -S <server> -E -ce no -D <database> -if workload_file.sql -F -of output_script.sql -A 60 -m 5 -fa IDX

這個範例與前述指令相同,但使用連線加密。 用有效的值替換 <server><database>

dta -S <server> -E -ce yes -tc -D <database> -if workload_file.sql -F -of output_script.sql -A 60 -m 5 -fa IDX