SqlServer 慢查詢分析優化


分三步:

記錄慢查詢的語句到日志文件

1、首先在SSMS,工具菜單下打開Profiler。

2、輸入你用戶名密碼登陸。

3、常規,勾選保存到文件,選擇一個文件路徑,設置文件大小,這樣可以分文件存儲日志了

注意:在服務器本地,文件路徑可以隨便選擇;跟蹤遠程服務器時這個路徑設置需要使用\\ServerName\.......(應該是設置遠程服務器能訪問的本地一個共享路徑,比較麻煩)

4、事件選擇選擇,選擇以下兩列即可,

Stored Procedures RPC:Completed
TSQL                      SQL:BatchCompleted

5、點擊列篩選器,為Duration設置一個過濾值。本例子設置為3000(即3S)。

6、點擊運行。開始信息的收集。

分析日志文件

遠程分析時需要把日志文件*.trc拷貝到本地,打開SSMS連接本地數據庫,使用如下語句查詢:

SELECT a.TextData,a.StartTime,a.EndTime,Duration/1000000

FROM fn_trace_gettable('D:\QSWork\Sql跟蹤文件\慢查詢 - 1.trc', -1) a

注意:只有連接本地服務器,這個路徑才可以使用絕對路徑

數據庫優化

1.在查詢分析器里執行查看實際執行集合、IO和TIME占用情況

首先打開IO和TIME統計開關

SET STATISTICS TIME ON
SET  STATISTICS IO ON

打開后每次執行sql語句時在消息里就可以打出如下信息:

(1845345 行受影響)
表 'StockQuote'。掃描計數 1,邏輯讀取 14025 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

  為了保證每次都是從硬盤讀取數據,所以要先清空緩存

--清空緩存
checkpoint
DBCC DROPCLEANBUFFERS 
DBCC FREEPROCCACHE     

清空是否有效可以在先后兩次執行sql的信息中看物理讀取次數是否一樣區分。

最后,在執行前選定“包括實際的執行計划”。執行結果:

      執行計划

根據執行情況優化 sql語句,發現索引、外鍵設計存在的問題

2.使用“數據庫引擎優化顧問”執行sql得出性能優化建議

結論:有時候捕獲到的sql執行時間過長可能是數據庫的並發訪問,或者前后執行的語句中存在資源競用,這就得從業務邏輯上去查找一下原因。只有每次執行都比較耗時的,且調用比較頻繁的語句才需要特別優化。

參考鏈接:

      1.[MS Sql Server術語解釋]預讀,邏輯讀,物理讀 

      2.SQL Server datetime數據類型設計、優化誤區

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM