SQLServer数据库慢查询追踪

 

一、通过查询器查询当前慢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:

 

posted @ 2020-12-18 11:06  zzljh  阅读(5032)  评论(0编辑  收藏  举报