[SQL Server]善用Database Engine Tuning Advisor改善SQL效率

[SQL Server]善用Database Engine Tuning Advisor改善SQL效率

摘要

在處理資料庫效能問題時,我們常常會朝向幾個點去找尋問題點:

1. SQL指令是否使用過多的運算?

2. SQL指令是否有子查詢?

3. SQL的Where條件是否過度複雜?

4. Table是否有建立索引鍵?

5. Transaction是否包的太大,導致執行過長?

6. 資料量是否太大?

以上大致是我們在處理資料庫效能時很常見到的一些問題,但若需要一句SQL一句SQL去分析,如果我們的系統SQL指令有上萬句,該從何處去分析呢?以下介紹一個很常使用的SQL Tuning工具—SQL Server Database Engine Tuning Advisor

 

SQL Server Database Engine Tuning Advisor

利用此工具我們可以做到以下效果:

  • 利用查詢最佳化工具來分析工作負載中的查詢,以建議資料庫索引的最佳混合情況。
  • 針對工作負載所參考的資料庫來建議對齊或非對齊的資料分割。
  • 建議工作負載所參考之資料庫的索引檢視。
  • 分析所提出之變更的效果,其中包括索引用法、資料表之間的查詢分佈,以及工作負載中的查詢效能。
  • 建議針對一小組問題查詢來微調資料庫的方式。
  • 可讓您指定磁碟空間條件約束之類的進階選項來自訂建議。
  • 提供報表來總結針對給定工作負載來實作建議的效果。
  • 設想替代方案,讓您以假設性組態的形式來提供可能的設計選項,供 Database Engine Tuning Advisor 進行評估。

其實從以上的說明中,我們簡單一句話說明:Tuning Advisor這工具可以幫我們分析我們對資料庫運行的SQL指令,並給予索引的最佳化建議

詳細資料請參考:Database Engine Tuning Advisor 概觀

 

如何開始?

要分析SQL指令,那我們總應該告訴它應該分析哪些指令,若要把指令一句一句收集起來,相信大家都會很火大,因此這邊我們建議最好也最切近實際的做法是透過SQL Profiler去收集某個時段內所執行的所有指令,並對這些指令加以分析,因此這邊我們先使用SQL Profiler來收集SQL吧,首先開啟SQL Server Profiler:

clip_image002

按下左上角的clip_image004新增追蹤,跳出以下視窗後請輸入要分析的資料庫資訊:

clip_image006

這一頁可不管,直接按下執行

clip_image008

接著就可以看到SQL Profiler會攔到所有針對資料庫執行的SQL指令與操作囉:

clip_image010

接下來要作的動作就是等待,等到收集到的SQL指令與觀察的時間區間已足夠我們排除我們所遭遇的效能問題,這段時間可長可短,到也不一定。

若進行完後,我們按下左上角的clip_image012停止追蹤,接著選擇檔案-->儲存檔案,將此次追蹤到的SQL指令集合存檔,下例中我將檔案存成mytrace.trc檔:

clip_image014

 

開始分析

前頭我們已經收集好我們所需要的基本資料了,接下來就是開始進行SQL指令的分析囉,首先我們先打開Database Engine Tuning Advisor,仍然需要我們進行登入,請輸入與前頭SQL Profiler所對應的資料庫相同的連線資料:

clip_image016

登入後出現下方的畫面,請在Workload中選擇File,然後按下clip_image018選擇前頭存下來的mytrace.trc檔:

clip_image021

選擇Database for workload analysis,選到我們系統中最主要的資料庫:

clip_image023

選擇要Tuning的資料庫,這邊可以選擇多個,若有多個資料我們在過程中都會使用到,建議都選擇進來一起tune…

clip_image025

設定完成後請按下左上角的clip_image027開始進行分析:

clip_image029

分析完成後我們可以看到以下的結果,我們可以看到Tuning後它所建議的索引會被全部列出來,另外還有提供估計的改善比例(Estimated Improvement)clip_image031

clip_image033

當分析已完成,也已經取得改善的建議後,我們可以選擇工具列中的Actions,看你是要直接將它的建議套用到資料庫(會自動建立好索引)或者是將這次建議的索引內容存成*sql檔,找時間再進行:

clip_image035

 

結語

這個工具十分方便,且使用上也非常簡單,但建立索引不保證總是能解決我們遭遇到的SQL效能問題,後續若有機會,我們再做其他分享。

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。