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: