數據庫引擎調整顧問
SQL Server提供了一個被稱為數據庫引擎調整顧問的工具。這個工具幫助為一個給定的工作負載確認一組最優的索引,而不需要對數據庫結構或SQL Server內部結構的深入了解。它還能為一小部分有問題的查詢建議調整選項。除了好處該工具也有壞處。應該正確地使用。
一、數據庫引擎調整顧問機制
可以直接選擇SQL Server 2008=》性能工具=》數據庫引擎調整顧問來使用它。
從Management Studio運行一個查詢(選中所需查詢,選擇查詢=》在數據庫引擎調整顧問中分析查詢),或者從Management Studio=》選擇=》數據庫引擎調整顧問中運行它。一旦該工具被打開並且連接到一個服務器,將看到如下所示窗口:
數據引擎調整顧問已經連接到一個服務器。從這裏,開始概述工作負載以及希望調整的對象。創建一個會話名稱是有必要的,可以為會話添加一個用於歸檔的標註。然後,必須選擇一個工作負載(一個文件或一個表),並瀏覽到合適的位置。工作負載根據啟動數據庫調整顧問的方式定義。如果從查詢窗口啟動,將看到一“查詢”無線按鈕,“文件”和“表”按鈕將被禁用。還必須為“工作負載分析”設置定義數據庫並最終選擇一個需要調整的數據庫。
另外,通過“優化選項”選項卡,如下圖所示:
選擇“限制優化時間”定義希望數據庫引擎調整顧問運行的時間,然後定義調整停止的日期和時間。數據庫引擎調整顧問運行的時間越長,就越能提供更好的建議。可以選擇考慮由數據庫引擎調整顧問創建的物理設計結構類型,還可以設置分區策略,這樣,調整顧問可以知道是否應該考慮將表和索引分區作為分析的一部分。如果數據和結構不能保證,分區不一定是個理想的結果。最後,可以定義所希望在數據庫中保持的物理設計結構。
更改這些選項將使數據庫引擎調整顧問用於改進性能的選擇變寬或變窄。
單擊“高級選項”按鈕還有更多選項。
這個對話框中,可以限制建議的空間和包含在一個索引中的列數。最後可以確定,新的索引或索引中的改動是作為在線還是離線的索引操作完成。
一旦適當地定義了所有這些設置,就可以單擊“開始分析”按鈕開啟動數據庫調整顧問。所創建的會話保存在所針對的所有服務器實例的msdb數據庫中,它顯示正在分析的內容和所取得進展的細節。
數據庫引擎調整顧問報告:
報告名稱 | 報告描述 |
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、調整一個查詢
選中一個查詢語句,右鍵=》數據庫引擎優化顧問中分析查詢。
設置基礎如下:
設置時間:
雖然默認設置為1小時,但是本次建議1分鐘就完成了。
最終建議如下,單擊最右側的定義,SQL Server優化顧問建議的優化如下:
SQL Server優化顧問建議我在Name列上建立一個非聚集索引。對於該查詢來說,這是一個完全正確的建議。
有時候,對於單個查詢的優化,SQL Server會建議卸載一些用不到的索引。但是優化應該是針對整個數據庫的優化。
因此,在優化項目裏,應該設置數據引擎調整顧問不能卸載任何已有的結構,這個優化選項裏把“數據庫中保持的物理設計結構”設置“從不保持任何現有的PDS”變為保持現有的PDS。這樣就優化顧問就不會建議卸載現有的OBJECT了。
另外,在得到建議之後,可以在操作上面直接操作,評估建議,保存建議,以及應用建議。
單擊應用建議:
單擊確定後:
數據庫引擎優化顧問將自動將建議執行到SQL Server:
2、調整一個跟蹤工作負載
調整一個跟蹤工作負載首先得有一個跟蹤文件或跟蹤表:
很遺憾,生成的建議居然為空:
這不意味著沒有其他可能的改進,只是意味著調整顧問不總是能夠發現所有可能的改進。
三、數據庫引擎調整顧問的局限性
數據庫引擎調整顧問建議基於輸入工作負載。如果輸入的工作負載不是實際工作負載的真實表現,那麽建議的索引有時候可能對一些在這個工作負載中丟失的查詢有負面的影響。
對於一個生產服務器,應該確保SQL跟蹤包含數據庫工作負載的一個完整表現。對於大部分數據庫應用程序,捕捉完整的一天的跟蹤通常包含大部分數據庫上執行的查詢。其他一些數據庫引擎調整顧問所需要考慮的事項/局限性如下:
- 使用SQL:BatchCompleted事件跟蹤輸入:輸入到數據庫引擎調整顧問的SQL跟蹤必須包含SQL:BatchCompleted事件;否則,該向導不能確定工作負載中的查詢;
- 工作負載中的查詢分布:在一個工作負載中,查詢可能以相同的參數值執行多次。以對只執行一次的查詢做出較大改進相比,對最常用的查詢,即使很小的性能改進都對整個工作負載的性能做出更大的貢獻;
- 索引提示:SQL查詢中的索引提示可能阻止數據庫引擎調整顧問選擇更好的執行計劃。該向導將所有SQL查詢中使用的索引提示作為建議的一部分。因為這些索引對該表來說可能不是最佳的,所以把工作負載提交到該向導之前刪除所有查詢中的索引提示;
數據庫引擎調整顧問