[SQL][Tools]SQL Server 2012 Database Engine Tuning Advistor

  • 2095
  • 0

[SQL][Tools]SQL Server 2012 Database Engine Tuning Advistor

以往在 SQL Server 2005/2008/2008R2 版本在使用 Database Engine Tuning Advistor 的時候,通常就是把 SQL Server Profile 上把錄製下來的 TRC 檔案倒進去,讓他來分析相關的 SQL 命令,然後建議該建立哪些 Index。而在 SQL Server 2012 出來的時候,也就沒有特別的去注意。但在前幾天的課程當中,看到講師有介紹到這個工具的新功能,於試想說花點時間來測試一下。

 

在開啟 Database Engine Tuning Advistor 並且連接資料庫主機之後,就可以在畫面上看到一個新的選項「計畫快取」( Plan Cache )。

image

 

 

當我們選擇「計畫快取」後,還可以再選擇針對特定的資料庫和特定的 Table 來做分析。選擇好之後,再按下上方的開始分析,就可以針對目前 SQL Server 內的 Plan Cache 來做分析,而這個最大的好處就是可以不必要先設定 SQL Server Profile,就可以直接使用了。當然如果您想要更多的功能,也可以在「微調選項」內還有更多的的細項設定,看是只要產生索引建議,還是也要針對資料分割作建議,此部分就看您的實際狀況來選擇。

image

 

在我的測試過程中,故意去針對一些沒有 Index 的欄位去查詢,因此當我分析完畢之後,我就可以在「建議」內,看到一些建議的索引和資料分割建議,

image

 

基本上所收集的資料是從 SQL Server 啟動就開始了,就看 Memory 的大小來決定可以放多少,此部分可以在 MSDN 上面看到 Plan Cache 記憶體上限的公式 ( http://msdn.microsoft.com/zh-tw/library/ee343986(v=sql.100).aspx )。而這些建議也要稍微注意,不是每個建議都一定要使用,此部份我們可以配合「報表」頁簽內所提供的各類報表,來看這些建議是用在哪些指令上,重複發生多少次等資料之後,再來做判斷是否要立即建立,亦或者是在特定的時間內去動態建立,使用完畢之後再去做 Disable 或者是 Drop Index。

 

然而由於這個方式是直接使用計畫快取內的資料,因此也就沒有辦法讓我們決定只讀取某個特定時間點之後的計畫快取來做分析,只能設定到某個時間點為主。因此如果要達到類似的功能,而又不想要去重開機的話,那麼我們也可以另外用個變通的方式,可以利用 DBCC FREEPROCCACHE 的指令,強迫清空 Plan Cache 內的資料,這樣我們就可以從某個時間點之後開始做分析。