資料庫引擎調整顧問

發糞塗牆發表於2012-06-08


資料庫效能很大程度上取決於表上是否有合適的索引。但是工作負載和資料隨時變化,現有的索引可能不完全合適,可能需要新的索引。

但是決定索引又是非常困難的,因為對某個查詢有提升作用,卻會對其他查詢或者其他操作有負面影響。

SQLServer提供了【資料庫引擎顧問】(DTA)工具來幫助為一個給定的工作負載確認一組最優的索引。而不需要對資料庫和SQLServer結構深入瞭解。它還能為一小部分問題查詢提供建議調整選項。

 

 

資料庫引擎調整顧問機制

在開啟引擎並登入以後:

首先,要做的就是新建一個會話。可以為會話新增一個用於歸檔的標註。

然後,必須選擇一個工作負載(檔案或一個表)

第三步,選擇Tuning Options(調整選項/優化選項)選項卡。

選擇Limit Tuning Time(限制調整事件),定義希望DTA執行的時間。然後定義停止的日期和時間。因為DTA執行時間越長,建議越好。可以選擇選項卡里的選項。增加建議的可靠性。

也可以點選“Advanced Options(高階選項)”來檢視更多選項。

最後,在定義完後點選(Start Analysis)開始分析。

 

所有的會話會儲存在對應例項的msdb中。

 

DTA報告

報告名稱

報告描述

Column Access(列訪問)

列出工作負載中引用的列和表

Database Access(資料庫訪問)

列出工作負載中引用的每個資料庫和每個資料庫工作負載語句的百分比

Event Frequency(事件頻率)

按照發生頻率列出工作負載中的所有事件

Index Detail(Current)(索引細節(當前))

定義索引及工作負載引用的屬性

Index Detail(Recommended)(索引細節(建議))

和索引細節(當前)相同,但顯示資料庫引擎調整顧問所建議的索引資訊。

Index Usage(Current)(索引使用(當前))

列出索引和工作負載引用的百分比

Index Usage(Recommended)(索引使用(建議))

和索引使用(當前)報告相同,但是出於建議的索引

Statement Cost(語句開銷)

列出的建議實施的情況下每個語句的效能改進

Statement Cost Range(語句開銷範圍)

將開銷的改進分為百分比,以顯示可以從給定的每組修改中得到多少益處

Statement Detail(語句細節)

列出工作負載中的語句、開銷以及如何建議實施減少的開銷

Statement-to-Index Relationship(語句與索引的關係)

列出單個語句引用的索引。有當前和建議的版本

Table Access(表訪問)

列出工作負載引用的表

View-to-Table Relationship(檢視與表的關係)

列出事物化索引引用的表

Workload Analysis(工作負載分析)

給出工作負載的細節,包括語句數量、開銷降低的語句數量、開銷保持不變的語句數量。

 

 

資料庫引擎調整顧問例項

下面以例子為說明:

1、  調整一個查詢:

SELECT soh.DueDate,soh.CustomerID

FROM Sales.SalesOrderHeaderAS soh

WHERE DueDateBETWEEN '1/1/2002'AND '1/1/2003' AND Status>4

右鍵→【在資料庫引擎顧問中分析查詢】

配置選項卡如下:


然後執行,執行結果如下:


可以看出,建議中很多沒用的索引建議刪除。這一步其實可以在所有資料庫上執行,保證資料庫索引的有效性。

你可以評估並選擇是否接受建議,也會生成相應的語句

2、 調整一個跟蹤工作負載

可以使用powershell或者sqlProfiler來建立一個跟蹤檔案並進行分析。

 

資料庫引擎顧問的侷限性

DTA基於輸入工作負載,如果不是實際負載,那麼建議會有可能帶有負面影響。

在生產環境中,應該確保跟蹤包含資料庫工作負載的一個完整表現。通常需要一天的跟蹤時間。還有其他的侷限性和考慮事項:

l  使用SQL:BatchCompleted事件跟蹤輸入:輸入到D他的跟蹤必須包含SQL:BatchCompleted事件,否則該向導不能確定工作負載中的查詢。

l  工作負載中的查詢分佈:在一個工作負載中,查詢可能以相同的引數值執行多次。應該優先對最常用的查詢做改進。

l  索引提示:SQL查詢中的索引提示可能阻止DTA選擇更好的執行計劃。

相關文章