資料庫引擎優化顧問與索引優化的差別
除了可以處理 Microsoft SQL Server 的新資料庫功能以外,資料庫引擎優化顧問在具體操作方面也不同於 Microsoft SQL Server 2000 索引優化嚮導。儘管這兩個工具都提供了圖形使用者介面 (GUI) 和命令提示符介面,但熟悉索引優化嚮導的使用者應注意以下更改。
有關資料庫引擎優化顧問的新功能的完整列表,請參閱資料庫引擎優化顧問功能。
優化資料庫所需的許可權
在 SQL Server 2000 中,只有 sysadmin 固定伺服器角色的成員可以使用索引優化嚮導來優化資料庫。在 SQL Server 中,通過使用資料庫引擎優化顧問,sysadmin 角色的成員仍可以優化資料庫,但目前 db_owner 固定資料庫角色的成員同樣可以優化自己所擁有的資料庫。
注意:
首次使用時,必須由具有系統管理員許可權的使用者啟動資料庫引擎優化顧問以初始化應用程式。初始化後,sysadmin 固定伺服器角色的成員和 db_owner 固定資料庫角色的成員都可以使用資料庫引擎優化顧問來優化資料庫。但請注意,db_owner 角色成員只可以優化自己所擁有的資料庫。有關詳細資訊,請參閱初始化資料庫引擎優化顧問。
工作負荷上下文
索引優化嚮導使用選定要優化的資料庫來評估工作負荷中的每條語句,而不管該語句最初是否是在該資料庫的上下文中執行的。索引優化嚮導在一個優化會話中只能優化一個資料庫。資料庫引擎優化顧問可以在一個優化會話期間優化多個資料庫。資料庫引擎優化顧問使用指令碼中的資訊確定語句執行所在的資料庫,並針對該資料庫評估此語句。選定要優化的資料庫不會影響評估語句的方式。
例如:
AdventureWorks 資料庫包含一個 Person.Contact 表,該表中包含 FirstName 和 LastName 列。
工作負荷 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
使用資料庫引擎優化顧問時,命令列語法為:
dta -s Session1 –D AdventureWorks –if TuneQuery.sql –of rec.sql –U username –P password由於預設情況下,User1 連線到 MyDB 資料庫,因此係統將資料庫上下文設定為 MyDB。然後,對 MyDB 資料庫而不是對 AdventureWorks 分析 Transact-SQL 語句。該語句在 MyDB 中無效,因此被忽略。
為什麼會出現這種情況?如果 User1 在未指定目標資料庫的情況下使用 sqlcmd 或 SQL Server Management Studio 來執行 TuneQuery.sql,則 TuneQuery.sql 將針對 MyDB 執行分析,這將導致分析失敗。資料庫引擎優化顧問的操作與此類似。
應執行什麼操作?採用以下方法將 USE
USE AdventureWorks;
GO
SELECT FirstName, LastName
FROM Person.Contact
WHERE LastName = 'Abercrombie';
GO資料庫引擎優化顧問首先檢視語句 USE AdventureWorks 並使用該資訊將當前資料庫設定為 AdventureWorks。然後,資料庫引擎優化顧問在檢視語句 SELECT FirstName, LastName FROM Person.Contact WHERE LastName = 'Abercrombie' 時將針對 AdventureWorks 分析該語句(因為當前資料庫上下文為 AdventureWorks)。這樣,資料庫引擎優化顧問就可以成功優化資料庫。請注意,如果使用 sqlcmd 或 SQL Server Management Studio 執行以上指令碼,則系統將針對 AdventureWorks 執行該語句,這是因為第一個 USE
USE
由於資料庫引擎優化顧問嘗試查詢每條語句執行所針對的相應資料庫(以模擬執行環境),因此以下資訊對於瞭解資料庫引擎優化顧問如何處理不同型別的輸入很重要。
SQL 檔案/內聯工作負荷
正如在前面部分中提到的,資料庫引擎優化顧問使用 USE
跟蹤檔案和跟蹤表
資料庫引擎優化顧問在分析跟蹤檔案時模仿 SQL Server Profiler的重播。它按照列出的順序使用跟蹤檔案中的下列資訊:
如果跟蹤檔案包含填充了 DatabaseName 列的事件,則資料庫引擎優化顧問將使用該列查詢對其執行該事件的資料庫。
如果跟蹤檔案填充了 DatabaseID 列,則資料庫引擎優化顧問將使用該列查詢對其執行該事件的資料庫。它將查詢系統目錄以找到與 DatabaseID 相對應的資料庫名稱。
注意:
如果在收集跟蹤檔案後分離、附加、刪除或建立了資料庫,則 DatabaseID 和 DatabaseName 對映可能不會保持與建立跟蹤檔案時相同的狀態。資料庫引擎優化顧問無法確定此資訊。如果出現這種情況,則應從跟蹤檔案中完全刪除 DatabaseID,以防止資料庫引擎優化顧問優化錯誤的資料庫。
如果跟蹤檔案中不存在 DatabaseName 或 DatabaseID 列,則資料庫引擎優化顧問確定要用於每條語句的資料庫的方式與確定要用於跟蹤檔案中的每個 SPID 列的 Transact-SQL 指令碼的方式相同。如果不存在 SPID 列,則將以與確定 Transact-SQL 指令碼完全相同的方式確定資料庫。
資料庫引擎優化顧問在分析每條語句的過程中還使用登入資訊(如同在 SQL Server Profiler 重播中)。伺服器上的預設資料庫隨跟蹤檔案中顯示的 LoginName 列值的改變而改變。
注意:
如果跟蹤檔案中存在的登入不再出現在系統中,則資料庫引擎優化顧問將忽略該登入,並在預設情況下使用當前正在執行優化過程的登入。如果出現這種情況,則系統將在資料庫引擎優化顧問的優化日誌中寫入一條訊息。
優化時間限制
使用資料庫引擎優化顧問可指定優化時間,或指定無限制的優化時間。索引優化嚮導尚未提供此功能。有關詳細資訊,請參閱限制優化的持續時間和事件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-520812/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫引擎優化顧問功能資料庫優化
- 資料庫效能優化-索引與sql相關優化資料庫優化索引SQL
- 比較SQL Server 2008資料庫引擎優化和索引優化SQLServer資料庫優化索引
- 資料庫優化 - SQL優化資料庫優化SQL
- 效能調優-Mysql索引資料結構詳解與索引優化MySql索引資料結構優化
- ORACLE 9i資料庫優化案例(2) --- 單列索引變複合索引的優化Oracle資料庫優化索引
- mysql優化 | 儲存引擎,建表,索引,sql的優化建議MySql優化儲存引擎索引
- MySQL 資料庫與 SQL 優化MySql資料庫優化
- 資料庫優化資料庫優化
- 【資料庫優化】面向程式設計師的資料庫訪問效能優化法則資料庫優化程式設計師
- Oracle資料庫訪問效能優化Oracle資料庫優化
- 資料庫優化之臨時表優化資料庫優化
- 【效能優化】ORACLE資料庫效能優化概述優化Oracle資料庫
- MSSQL優化之索引優化SQL優化索引
- 資料庫的優化需要資料庫優化
- 資料庫索引設計與優化讀書筆記--《一》概述資料庫索引優化筆記
- SQL Server 2008資料庫引擎優化SQLServer資料庫優化
- 資料庫系列:MySQL索引優化總結(綜合版)資料庫MySql索引優化
- MySQL資料庫優化MySql資料庫優化
- 資料庫優化SQL資料庫優化SQL
- Oracle資料庫優化Oracle資料庫優化
- 資料庫效能優化資料庫優化
- 資料庫優化流程資料庫優化
- 【資料庫】查詢優化之子連線優化資料庫優化
- 資料庫效能優化之SQL語句優化資料庫優化SQL
- MySQL 效能優化之索引優化MySql優化索引
- MySql的資料庫優化到底優化啥了都(3)MySql資料庫優化
- 資料庫sql的優化問題的面試題資料庫SQL優化面試題
- MySQL資料庫的索引原理、與慢SQL優化的5大原則MySql資料庫索引優化
- 資料庫結構的優化資料庫優化
- 資料庫的優化和效率資料庫優化
- 資料庫優化的步驟資料庫優化
- 優化資料庫EXP的效率優化資料庫
- 理解索引:索引優化索引優化
- MongoDB索引與優化詳解MongoDB索引優化
- MySQL索引與查詢優化MySql索引優化
- 理解 MySQL(2):索引與優化MySql索引優化
- 資料庫SQL優化大總結之 百萬級資料庫優化方案資料庫SQL優化