Database Engine Tuning Advisor 和索引微調精靈之間的差異

另外,除了處理 Microsoft SQL Server 2005 的新增資料庫功能之外,Database Engine Tuning Advisor 的行為也與 Microsoft SQL Server 2000 索引微調精靈不同。雖然這兩個工具都有圖形化使用者介面 (GUI) 和命令提示字元介面,但熟悉索引微調精靈的使用者應該考慮下列變更。

如需 Database Engine Tuning Advisor 新功能的完整清單,請參閱<Database Engine Tuning Advisor 功能>。

微調資料庫所需要的權限

在 SQL Server 2000 中,只有系統管理員 (sysadmin) 固定伺服器角色的成員可以利用索引微調精靈來微調資料庫。在 SQL Server 2005 中,當使用 Database Engine Tuning Advisor 時,sysadmin 角色的成員仍可以微調資料庫,但現在 db_owner 固定資料庫角色的成員使用者也可以微調他們所擁有的資料庫。

ms173448.note(zh-tw,SQL.90).gif附註:
在第一次使用時,必須由具備系統管理員權限的使用者來啟動 Database Engine Tuning Advisor,以初始化應用程式。初始化之後,系統管理員 (sysadmin) 固定伺服器角色的成員和 db_owner 固定資料庫角色的成員便可以利用 Database Engine Tuning Advisor 來微調資料庫。不過,請記住,db_owner 角色成員只能微調他們所擁有的資料庫。如需詳細資訊,請參閱<初始化 Database Engine Tuning Advisor>。

工作負載內容

索引微調精靈會利用所選進行微調的資料庫來評估工作負載中的每個陳述式,不論這些陳述式最初是否在資料庫內容中執行,都是如此。在微調工作階段期間,索引微調精靈只能微調一個資料庫。在 SQL Server 2005 中,Database Engine Tuning Advisor 可以在單一微調工作階段期間微調多個資料庫。Database Engine Tuning Advisor 利用指令碼中的資訊來確定執行陳述式的資料庫,且會針對這個資料庫來評估陳述式。所選進行微調的資料庫不會影響陳述式的評估方式。

例如:

  • AdventureWorks 資料庫有一份含有 FirstNameLastName 資料行的 Person.Contact 資料表。

  • TuneQuery.sql 工作負載包含下列查詢:

    SELECT FirstName, LastName
    FROM Person.Contact
    WHERE LastName = 'Abercrombie';
    GO
    
  • 依預設,User1 會連接到 MyDB 資料庫。

在 SQL Server 2000 中,User1 會從命令列中發出下列命令,或利用索引微調精靈 GUI 來執行類似的步驟:

Itwiz -D AdventureWorks -I TuneQuery.sql –o rec.sql –U <username> –P <password>

這個方式能夠運作是因為 TuneQuery.sql 中的每個陳述式都是因命令列 (-D AventureWorks) 指定了 AdventureWorks 資料庫,而針對這個資料庫來進行剖析。TuneQuery.sqlAdventureWorks 資料庫中有效,微調繼續進行,沒有任何問題。

在 SQL Server 2005 中,這個行為已改變。Database Engine Tuning Advisor 命令列的語法如下:

dta -s Session1 –D AdventureWorks –if TuneQuery.sql –of rec.sql –U username –P password

由於 User1 預設連接到 MyDB 資料庫,因此,系統會將資料庫內容設為 MyDB。其次,Transact-SQL 陳述式是針對 MyDB 資料庫來剖析,而不是針對 AdventureWorks。這個陳述式在 MyDB 中無效,因此,已忽略它。

為什麼出現這個情況?如果 User1 在未指定目標資料庫的情況下,利用 sqlcmd 或 SQL Server Management Studio 來執行 TuneQuery.sql,結果會針對 MyDB 來執行 TuneQuery.sql,作業會失敗。Database Engine Tuning Advisor 模擬這個相同的行為。

應該採取什麼行動?請依照下列方式,在 TuneQuery.sql 指令碼中,加入 USE <database> 陳述式:

USE AdventureWorks;
GO
SELECT FirstName, LastName
FROM Person.Contact
WHERE LastName = 'Abercrombie';
GO

Database Engine Tuning Advisor 會先查看 USE AdventureWorks 陳述式,且會利用這項資訊,將目前的資料庫設成 AdventureWorks。之後,當它看到 SELECT FirstName, LastName FROM Person.Contact WHERE LastName = 'Abercrombie' 這個陳述式時,它會針對 AdventureWorks 來剖析陳述式,因為目前的資料庫內容是 AdventureWorks。這會使 Database Engine Tuning Advisor 能夠順利微調資料庫。請注意,如果您利用 sqlcmd 或 SQL Server Management Studio 來執行上述指令碼,就會針對 AdventureWorks 來執行陳述式,因為第一個 USE <database> 陳述式會將資料庫內容從 MyDB 改成 AdventureWorks

USE <database> 陳述式可用來指定執行陳述式時所針對的資料庫。一般而言,如果每個陳述式都使用完整的資料表名稱,就不需要它。

由於 Database Engine Tuning Advisor 會嘗試尋找每個陳述式執行時所針對的個別資料庫 (模擬執行環境),因此,在 Database Engine Tuning Advisor 如何處理不同輸入類型的理解上,下列資訊非常重要。

SQL 檔案/內嵌工作負載

如上一節所說明,Database Engine Tuning Advisor 會利用在 Transact-SQL 查詢前面的 USE <database> 陳述式來識別查詢執行時所應針對的資料庫。Database Engine Tuning Advisor 會從 Transact-SQL 指令碼檔案的第一個陳述式開始查看輸入。它會先假設目前的資料庫是預設資料庫。當使用 USE <database> 陳述式時,它會改變剖析陳述式時所針對的目前資料庫內容。

追蹤檔和追蹤資料表

Database Engine Tuning Advisor 在通過追蹤檔時,會模擬重新執行 SQL Server Profiler。它會依照列出的順序來使用追蹤檔的下列資訊:

  • 如果追蹤檔有擴展 [DatabaseName] 資料行的事件,Database Engine Tuning Advisor 會利用這個資料行來尋找執行事件時所針對的資料庫。
  • 如果追蹤檔擴展了 [DatabaseID] 資料行,Database Engine Tuning Advisor 會利用這個資料行來尋找執行事件時所針對的資料庫。它會查詢系統目錄來找出對應於 [DatabaseID] 的資料庫名稱。
ms173448.note(zh-tw,SQL.90).gif附註:
如果在收集追蹤之後卸離、附加、卸除或建立資料庫,[DatabaseID][DatabaseName] 的對應可能與建立追蹤檔之時不同。Database Engine Tuning Advisor 無法判斷這項資訊。如果發生這個情況,您應該從追蹤中,徹底移除 [DatabaseID],以防止 Database Engine Tuning Advisor 微調不正確的資料庫。
  • 如果追蹤既沒有 [DatabaseName] 資料行,也沒有 [DatabaseID] 資料行,Database Engine Tuning Advisor 會依照它針對追蹤檔中的每個 [SPID] 資料行處理 Transact-SQL 指令碼的相同方式,來判斷每個陳述式要用的資料庫。如果沒有 [SPID] 資料行,就會完全依照 Transact-SQL 指令碼檔案的相同方式來判斷。

另外,Database Engine Tuning Advisor 也會在剖析每個陳述式時,使用登入資訊 (如同重新執行 SQL Server Profiler)。伺服器中的預設資料庫可以根據追蹤檔中的 [LoginName] 資料行值而改變。

ms173448.note(zh-tw,SQL.90).gif附註:
如果系統中已沒有追蹤中的登入,Database Engine Tuning Advisor 會忽略它,依預設,它會使用目前在執行微調程序的登入。如果發生這個情況,便會在 Database Engine Tuning Advisor 微調記錄中寫入一則訊息。

微調時間限制

在 SQL Server 2005 中,Database Engine Tuning Advisor 可讓您指定微調時間,或指定無限的微調時間。索引微調精靈無法使用這項功能。如需詳細資訊,請參閱<限制微調持續期間和事件>。

請參閱

其他資源

Database Engine Tuning Advisor 教學課程
微調實體資料庫設計

說明及資訊

取得 SQL Server 2005 協助