共用方式為


使用 XML 輸入檔進行微調

能以 Database Engine Tuning Advisor 圖形化使用者介面 (GUI) 與 dta 命令列公用程式執行的所有微調作業,都可以在 Database Engine Tuning Advisor XML 輸入檔中定義。然而,除了透過 GUI 和命令列公用程式來使用的微調選項之外,XML 輸入檔也支援其他微調選項。

XML 輸入檔會使用發行的 Database Engine Tuning Advisor XML 結構描述,這個結構描述可以在您的 SQL Server 2008 安裝目錄的下列位置找到:

C:\Program Files\Microsoft SQL Server\10\Tools\Binn\schemas\sqlserver\2004\07\dta\dtaschema.xsd

也可以從下列 URL 下載:

https://schemas.microsoft.com/sqlserver/2004/07/dta

XML 輸入檔可讓您使用偏好的 XML 工具來進行資料庫的微調, 同時也為經驗豐富的資料庫管理員提供了更大的彈性。舉例來說,在使用 XML 輸入檔時,您可以指定同時包含現有與假設實體設計結構的組態 (索引、索引檢視和資料分割)。接著,如果已經實作這個現有與假設實體設計結構的組合,則可使用 dta 命令列公用程式來微調資料庫。如此即可在微調之前進行「假設」分析,同時不會因為實作實際的組態而造成負擔。

下列小節討論只能使用 Database Engine Tuning Advisor XML 輸入檔執行的微調作業。如需有關此檔案及其使用方式的詳細資訊,請參閱<XML 輸入檔參考 (Database Engine Tuning Advisor)>。

指定含有 Configuration 元素的組態

雖然可以透過 Database Engine Tuning Advisor GUI 執行有限範圍的使用者自訂組態功能,當您利用命令列 dta 公用程式搭配 XML 輸入檔時可以存取完整的功能。當您使用 XML 輸入檔時,您可以在檔案中指定完全假設的組態,也可以在指定的組態中包含現有與假設實體設計結構的組合。接著,當您使用 Database Engine Tuning Advisor XML 結構描述驗證輸入檔之後,您可以使用此檔案作為 dta 命令列公用程式的輸入。在微調工作階段中,Database Engine Tuning Advisor 會針對資料庫執行指定的工作負載。但是,Database Engine Tuning Advisor 不會評估現有索引、索引檢視與資料分割的組態。取而代之的是,Database Engine Tuning Advisor 會使用您的組態,此組態是假設性與現有結構的組合。使用假設組態可讓您分析特定組態對資料庫效能所產生的影響,同時避免因為實作實際的組態而造成負擔。

若要指定包含現有與假設定實際設計結構的組態,請在 Tuning Advisor XML 輸入檔的 TuningOptions 元素後使用 Configuration 子元素。如需詳細資訊,請參閱<如何:執行探勘分析>和<含使用者指定組態的 XML 輸入檔範例 (DTA)>。

以 EventString 元素微調內嵌工作負載

當您使用 Database Engine Tuning Advisor 搭配 XML 輸入時,可以完全避免使用工作負載。您可以在 XML 輸入檔中指定工作負載及其相關的加權內嵌。避免使用個別的工作負載檔案或資料表有下列好處:

  • 您可以更輕鬆地微調遠端伺服器,因為您不需要擔心 Database Engine Tuning Advisor 是否能夠對個別檔案或資料表進行微調。

  • 您可以更輕鬆地結合 Database Engine Tuning Advisor 功能到指令碼中,以便在企業環境中使用。

若要指定內嵌工作負載,請使用 EventString 子元素,另外也可以為其指定相關的加權。當您使用此子元素時,乃是針對 Workload 父元素指定子元素,而不是指定個別的工作負載檔案或資料表。下列程式碼範例,可說明透過 XML 輸入檔使用 EventString 元素,與透過 XML 輸入檔使用一般工作負載檔案之間,兩者有何不同:

範例

A. 以工作負載元素指定個別的工作負載檔案

<DTAInput>
...code removed
  <Workload>
    <File>MyWorkload.sql</File>
  </Workload>
...code removed
</DTAInput>

B. 以 EventString 元素指定內嵌工作負載

<DTAInput>
...code removed
  <Workload>
    <EventString Weight="100">
     SELECT * FROM MyTable1
     WHERE MyColumn1 &gt; 200
     ORDER BY MyColumn1
    </EventString>
    <EventString Weight="1">
     SELECT * FROM MyTable2
     WHERE MyColumn2 &gt; 200
     ORDER BY MyColumn2
    </EventString>
  </Workload>
...code removed
</DTAInput>

在上述範例中,EventString 元素中的每個查詢分別指定了不同的加權:加權 100 和加權 1。這表示當 Database Engine Tuning Advisor 微調這些查詢時,應用程式會將該查詢的權重視為 100,就如同查詢有 100 個執行個體相對於一個權重為 1 的查詢執行個體一樣。在以上範例中,就 Database Engine Tuning Advisor 評估用途而言,第一個查詢的重要性是第二個查詢的 100 倍。另外請注意,大於符號 (>) 已被轉換為 &gt,因為 > 在 XML 中是具有特殊意義的保留字元。

如需以 EventString 元素指定內嵌工作負載的範例,請參閱<含內嵌工作負載的 XML 輸入檔範例 (DTA)>。

以 IgnoreConstantsInWorkload 元素忽略工作負載中的常數

工作負載可包含參考常數的陳述式。Database Engine Tuning Advisor 可在工作負載中使用常數來提出建議,包括具有選擇條件的索引檢視或資料分割索引的定界資料分割函數。

不過,有時候 Database Engine Tuning Advisor 考量工作負載中的常數可能沒有好處。例如,假設有一個包含下列陳述式的工作負載:

UPDATE BankAccountTable
SET AccountBalance = AccountBalance - 1000.00
WHERE CustomerID = 
       (SELECT CustomerID FROM Customer WHERE CustomerName = 'Alice')

此工作負載可能包括 'Alice' 常數,因為此工作負載是在 Alice 進行交易時擷取的。如果 Database Engine Tuning Advisor 使用這個常數,它可能無法產生有效率的微調建議。在此情況下,指定 Database Engine Tuning Advisor 在使用此工作負載微調資料庫時忽略常數是合理的作法。

IgnoreConstantsInWorkload 元素位於 TuningOptions 元素之下,前者可指定在 XML 輸入檔中,以強迫 Database Engine Tuning Advisor 忽略工作負載中的所有常數。指定此元素時,Database Engine Tuning Advisor 可能建議的索引檢視將不包含選擇條件。此外,從資料中只衍生使用於資料分割函數中的常數,而不是工作負載中包含的常數。

使用測試伺服器為實際伺服器進行工作負載微調

微調大型的工作負載會在要微調的伺服器上造成大量負擔,因為 Database Engine Tuning Advisor 在微調過程中會對查詢最佳化工具發出許多呼叫。除了您的實際伺服器之外,請使用測試伺服器來排除這個問題。Database Engine Tuning Advisor 以一致的方式支援此案例:

  1. 確定要執行微調的使用者同時存在於實際伺服器與測試伺服器上。若您是系統管理員 (sysadmin) 固定伺服器角色的成員,即可略過此步驟。

  2. 在 XML 輸入檔中指定微調用的測試伺服器,以及其他用來定義微調工作階段的參數。

  3. 使用 dta 命令列公用程式來啟動微調工作階段,以及開始工作負載分析。

在此測試伺服器微調工作階段中,Database Engine Tuning Advisor 會對您的實際伺服器發出最少的呼叫,以擷取其硬體設定檔、資料庫中繼資料以及統計等資訊,以協助查詢最佳化工具正確地最佳化測試伺服器上的查詢。

在此案例中,您實際上微調的是複製出實際伺服器環境的測試伺服器。在測試伺服器的微調完成後,您會收到對於資料庫設計組態的建議,您可以在實際伺服器的維護期間實作這項建議。使用此程序可將 Database Engine Tuning Advisor 所造成的效能影響降到最低。此外,這項處理可省下實際將資料從實際伺服器複製到測試伺服器所需的時間,同時也可省下在測試環境中複製強大的實際伺服器硬體所需的費用。

若要指定測試伺服器,請使用 TuningOptions 父元素下的 TestServer 子元素,如以下範例所示:

範例

<DTAInput>
...code removed
  <TuningOptions>
    <TestServer>MyTestServer</TestServer>
    <FeatureSet>IDX_IV</FeatureSet>
    <Partitioning>NONE</Partitioning>
    <KeepExisting>NONE</KeepExisting>
  </TuningOptions>
...code removed
</DTAInput>

如需使用此功能與其他程式碼範例的詳細資訊,請參閱<降低生產伺服器的微調負載>。

請參閱

其他資源