分三步:
記錄慢查詢的語句到日志文件
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數據類型設計、優化誤區