一、通過查詢器查詢當前慢SQL
-- 查找CPU前100條
SELECT TOP 100
(total_elapsed_time / execution_count)/1000 N'平均時間ms' ,total_elapsed_time/1000 N'總花費時間ms' ,total_worker_time/1000 N'所用的CPU總時間ms' ,total_physical_reads N'物理讀取總次數' ,total_logical_reads/execution_count N'每次邏輯讀次數' ,total_logical_reads N'邏輯讀取總次數' ,total_logical_writes N'邏輯寫入總次數' ,execution_count N'執行次數' ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) N'執行語句' ,creation_time N'語句編譯時間' ,last_execution_time N'上次執行時間' FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY total_elapsed_time / execution_count DESC;
二、使用SQL Server Profiler進行追蹤
1、打開查詢器
打開 工具 》 SQL Server Profiler
2、點擊SQL Server Profiler(P),連接到服務器
3、設置要保存文件或表
根據需要評估合適的大小,值盡可能大點。根據需要選擇停止時間。
4、選擇 事件選擇
選擇事件:RPC:Completed 和 SQL:BatchCompleted。
RPC:Completed textdata要勾上,其他列使用默認就可以。
5、再選擇列篩選器
Duration:設置大於3000以上
6、選擇完成之后,點擊運行即可。
解讀:
TextData:依賴於跟蹤中捕獲的事件類的文本值
CPU:事件使用的CPU時間(單位毫秒)
NTUserName:Windows用戶名
Reads:由服務器代表事件讀取邏輯磁盤的次數
Writes:由服務器代表事件寫入物理磁盤的次數
Duration:事件占用的時間。盡管服務器以微秒計算持續時間,SQL Server Profiler確能以毫秒為單位顯示該值,具體情況取決於‘工具’>‘選項’對話框中的設置 (見下圖1)
SPID:SQL Server為客戶端的相關進程分配的服務器進程ID
StartTime:事件啟動事件
EndTime:事件結束事件。對指示事件開始的事件類。
圖1: