一、分析查詢執行計劃
執行計劃的閱讀順序為,從右到左,從上到下。
由執行計劃表示的查詢執行的一些特征如下:
如果查詢由多個查詢的批組成,每個查詢的執行計劃按照執行的順序顯示。批中的每個執行計劃将有一個相對的估算開銷,整個批的總開銷為100%。
執行計劃中的每個圖示代表一個操作符。它們每個都有一個相對的估算開銷,執行計劃中的所有節點的總開銷是100%。
執行計劃中的一個起始操作符通常表示一個資料庫對象(表或索引)的資料檢索機制。
資料檢索通常是一個表操作或一個索引操作。
索引上的資料檢索将是索引掃描或索引超找。
索引上的資料檢索的命名管理師[表名].[索引名]。
資料從右到左兩個操作符之間流動,由一個連接配接箭頭表示。
操作符之間連接配接箭頭的寬度是傳輸行數的圖形表示。
同一列的兩個操作符之間的連接配接機制将是嵌套的循環連接配接,Hash比對連接配接或者合并連接配接。
将光标防止在執行計劃的一個節點之上,顯示一個具有一些細節的彈出視窗。
在屬性視窗中有完整的一組關于操作符的細節,可以右鍵單擊操作符并選擇屬性。
操作符細節在頂部顯示實體和邏輯操作的類型。實體操作代表存儲實際使用的,而邏輯操作時優化器用于建立估算執行計劃的結構。如果邏輯和實體操作相同,那麼隻顯示實體操作。它還顯示其他有用資訊,如行數、I/O開銷、CPU開銷等。
操作符細節彈出視窗的參數部分在分析中特别有用,因為它顯示了優化器所使用的過濾或連接配接條件。
二、識别執行計劃中開銷較大的步驟
執行計劃中令人感興趣的主要是查找哪些步驟相對開銷較大。這些步驟是查詢優化的出發點。可以通過采用下面的技術來選擇開始的步驟。
執行計劃中的每個節點顯示其在整個執行計劃中的相對開銷,整個計劃的總開銷為100%。是以,關注有最高相對開銷的節點。
執行計劃可能來自于一批語句,是以可能也需要查找開銷最大的語句。
檢視節點之間連接配接箭頭的寬度。非常寬的連接配接箭頭表示對應節點之間傳輸大量的行。分析箭頭左邊的節點以了解其需要那麼多行的原因,還要檢查箭頭的屬性。可能看到估計的行和實際的行不一樣,這可能由過時的統計造成。
尋找Hash連接配接操作。對于小的結果集,嵌套的循環連接配接通常是首選的連接配接技術。
尋找書簽查找操作。對大結果集的書簽操作可能造成大量的邏輯讀。
可能由操作符之上有一個感歎号表示的警告,這是需要立刻注意的領域。這些警告可能是由各種問題造成的,包括沒有連接配接條件的連接配接或丢失統計的索引和表。通常解決警告的情況将對性能有幫助。
尋找執行排序操作的步驟。這表示資料沒有以正确的排序進行檢索。
三、分析索引的有效性
為了進一步研究執行計劃中的開銷較大的步驟,應該分析相關表或索引的資料檢索機制。
首先,應該檢查索引操作是查找這裡掃描。通常,為了最佳性能,應該從一個表中檢索盡量少的行,而索引查找通常是通路少量行的最有效方法。掃描操作通常代表着通路大量的行。是以,一般來說查找優先于掃描。
接下來,需要確定索引機制被正确建立。查詢優化器評估可用的索引以發現哪個索引将以最有效的方式從表中檢索資料。如果需要的索引不存在,優化器使用次佳的索引。為了最好的性能,應該始終確定在資料檢索操作中使用最佳的索引。可以通過分析以下操作的節點細節中的參數部分來判斷索引有效性:
資料檢索操作;
連接配接操作;
四、計劃緩存
最後一個通路執行計劃的地方就是直接從儲存它們的記憶體空間-計劃緩存中讀取。
SQL Server提供了動态管理視圖和函數來通路這一資料。為了檢視緩存中的執行計劃清單,運作以下查詢:
這個查詢傳回一個XML執行計劃連接配接的清單。打開任何一個連接配接将顯示執行計劃,進一步通過動态管理視圖處理可用的列,将使你能夠搜尋特定的過程或執行計劃。
