為何不微調事件
此主題列出為何不微調事件的常見原因,以及 Database Engine Tuning Advisor 如何選擇正確的資料庫來執行微調事件。
不微調事件的常見原因
假設原本執行事件的資料庫已正確識別出來 (請參閱以下章節),則符合下列條件時就不微調事件:
事件所參考的資料表,尚未選取以進行微調。
事件所參考的資料表,是少於 10 頁的極小型資料表。
[!附註]
若要尋找 Microsoft SQL Server 2000 資料表的頁數,請使用 sysindexes 系統資料表的 dpages 資料行。若要針對 Microsoft SQL Server 2005 及之後的版本尋找資料表中的頁數,請使用 sys.dm_db_partition_stats 目錄檢視的 used_page_count 資料行。
Database Engine Tuning Advisor 沒有足夠的時間,可在使用者所指定的時間內微調查詢。
事件所參考的資料表,已接近索引的最大數目上限,並已選取維持現有索引的選項。在這種情況下,這些資料表無法再新增其他索引。
許多資料管理語言 (DML) 陳述式 (INSERT、UPDATE 和 DELETE),都是針對事件的基礎資料表來執行的。新增更多索引或索引檢視,會造成這些基礎資料表的效能降低。
已指定下列微調選項:
最大資料行數目有限制。
指定的儲存磁碟空間太小,或是資料庫中有許多現存的索引和索引檢視,且指定用來微調的磁碟空間不適當。
[!附註]
您可使用 Database Engine Tuning Advisor 圖形化使用者介面 (GUI) 中的 [進階微調選項] 對話方塊,或在使用 dta 命令列公用程式時指定 -B 引數的值,來指定微調建議的磁碟空間限制。
Database Engine Tuning Advisor 如何決定微調事件的正確資料庫
Database Engine Tuning Advisor 會根據您所使用的微調工作負載檔案類型,以及微調工作負載時所指定的選項,來選擇要執行微調事件的正確資料庫,如下所示:
若是 SQL 指令碼 (.sql) 微調工作負載檔案
如果您以下列其中一個項目來指定資料庫名稱:
Dta 命令列公用程式的 -d 引數
XML 輸入檔中的 DatabaseToConnect 元素
這些選項會設定在開始微調工作階段時,Database Engine Tuning Advisor 所優先連接的預設資料庫。連接到初始資料庫之後,Database Engine Tuning Advisor 會使用指令碼中的每個 USE database_name 陳述式,來變更後續陳述式的資料庫內容。
如果您未明確指定微調工作階段的初始資料庫連接,則 Database Engine Tuning Advisor 會針對您在發生微調之伺服器上所指定的登入身分,使用其中定義的預設資料庫。連接到初始資料庫之後,Database Engine Tuning Advisor 即會變更後續陳述式的資料庫內容,其變更方式與您明確指定初始連接時的方式相同。Database Engine Tuning Advisor 會使用 USE database_name 陳述式來決定資料庫內容。
若是追蹤 (.trc) 微調工作負載檔案
當您使用追蹤檔案時,Database Engine Tuning Advisor 會根據追蹤中指定的每一個伺服器處理序識別碼 (SPID),來選擇要對其執行事件的資料庫。如果追蹤中未指定任何 SPID,則 Database Engine Tuning Advisor 會假設該追蹤中包含的所有事件,其 SPID 都相同。Database Engine Tuning Advisor 針對各個 SPID 選擇資料庫的方式如下:
DatabaseName 在追蹤內。
如果 DatabaseName 欄位出現在追蹤檔案中,Database Engine Tuning Advisor 會使用該欄位來決定要用於剖析事件的資料庫。所有其他資訊會被忽略。如果 DatabaseName 欄位不存在,則 Database Engine Tuning Advisor 會前往步驟 2。
DatabaseID 在追蹤內,但是DatabaseName 不是。
如果 DatabaseID 欄位出現在追蹤檔案中,Database Engine Tuning Advisor 會使用該欄位來決定要用於剖析事件的資料庫。DatabaseID 欄位會對應到資料庫名稱。不過,Database Engine Tuning Advisor 不會驗證 DatabaseID 欄位在收集追蹤之後是否有變更。若您不確定 DatabaseID 對 DatabaseName 的對應是否為最新的,請從追蹤工作負載檔案中移除 DatabaseID 欄位。所有其他資訊會被忽略。如果 DatabaseName 或 DatabaseID 都不存在,則 Database Engine Tuning Advisor 會前往步驟 3。
兩者皆非DatabaseName 和 DatabaseID 都在追蹤內。
如果 DatabaseName 和 DatabaseID 都沒有出現在追蹤中,Database Engine Tuning Advisor 會採用 SQL 指令碼微調工作負載檔案的相同方式,來決定執行事件的資料庫。這個處理程序描述於先前的<若是 SQL 指令碼 (.sql) 微調工作負載檔案>該節中。