SQL性能優(yōu)化前期準備-清除緩存、開啟IO統(tǒng)計
如果需要進行SQl Server下的SQL性能優(yōu)化,需要準備以下內(nèi)容:
一、SQL查詢分析器設置:
1、開啟實際執(zhí)行計劃跟蹤。
2、每次執(zhí)行需優(yōu)化SQL前,帶上清除緩存的設置SQL。
平常在進行SQL Server性能優(yōu)化時,為了確保真實還原性能問題,我們需要關閉SQL Server自身的執(zhí)行計劃及緩存??梢酝ㄟ^以下設置清除緩存。
- DBCC DROPCLEANBUFFERS --清除緩沖區(qū)
- DBCC FREEPROCCACHE --刪除計劃高速緩存中的元素
3、開啟查詢IO讀取統(tǒng)計、查詢時間統(tǒng)計。
- SET STATISTICS TIME ON --執(zhí)行時間
- 2SET STATISTICS IO ON --IO讀取
開啟設置后,執(zhí)行SQL效果如下:
針對其中的每個圖標節(jié)點,鼠標滑上去的時候,可以看到具體的執(zhí)行信息。如下圖:
可以通過查看謂詞、對象、輸出列表,分析問題點或者創(chuàng)建優(yōu)化索引等。
當然你也可以換一種查看方式,點擊右鍵選擇顯示執(zhí)行計劃XML。
還有一點特別說明的是:當你SQL很長邏輯關系很復雜的時候,執(zhí)行計劃會是一個很大的網(wǎng)狀關系圖,你會發(fā)現(xiàn)在右下角有一個加號的按鈕,點擊后一個縮略圖。通過縮略圖你可以很方便的定位執(zhí)行節(jié)點,用起來還比較好用。
二、針對SQL Server Profile,SQL查詢跟蹤器進行分析。
1、打開方式:SQL Server查詢分析器->工具,SQL Profile。打開方式截圖:
2、連接&特殊設置:
打開后界面如下圖:
設置正確連接信息后,點擊連接,彈出如下界面。按照圖中操作步驟進行設置。
其中DatabaseId、HostName可以在查詢分析器中進行查詢,腳本如下:
- SELECT DB_ID()
- SELECT DB_NAME()
- SELECT HOST_ID()
- SELECT HOST_NAME()
實際上HostName就是你的本機計算機名。
最終設置完之后點擊運行。正常跟蹤的效果如圖:
重點關注其中的Duration、Writes、Reads、CPU,分析對象是TextData,及執(zhí)行的語句。其中Duration為毫秒數(shù),1000即為1秒。
應用總結(jié)&建議:
上面應用配合方式是:
1、先通過SQL查詢跟蹤器,跟蹤出你所以執(zhí)行的SQL,然后定位其中Duration比較的SQL 或者超過性能標準的SQl(比如頁面訪問3s、5s、8s)、報表30s等。
2、將問題SQL在查詢分析器中進行分析,主要通過執(zhí)行計劃及IO統(tǒng)計定位耗時占比高及IO讀取大的地方,然后逐步的調(diào)整SQL邏輯關系(比如添加業(yè)務條件過濾縮小集合,建立索引、調(diào)整like匹配等),優(yōu)化后再重新進行跟蹤看看是否有效果,最終達到SQL的優(yōu)化目的。
寫到這里,基本上我常用的SQL性能優(yōu)化的方式就已經(jīng)講完了,希望給大家能提供幫助。