博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql server08 查询优化系列 3-1 sql 查询性能分析 sql profiler
阅读量:6361 次
发布时间:2019-06-23

本文共 2192 字,大约阅读时间需要 7 分钟。

sql profiler 工具

此工具 是 可用于 一下目标 的一个 GUI和一组系统存储过程.

  • 图形化坚持sql server 查询
  • 在后台收集查询信息
  • 分析性能
  • 诊断像死锁这样的问题
  • 调试Transact-SQL语句
  • 模拟重放SQL Server活动

 

下面新建一个跟踪:

打开 sql server profiler

新建一个跟踪:

可以把检测的结果 保存到文件或者选择到 数据库中的表里,

这里面有很多的事件 供我们选择  来跟踪.

 

事件

  • 游标事件
  • 锁事件
  • 存储过程事件
  • T-Sql事件

对于性能分析,主要对帮助 判定 sql server上执行的各种活动的资源压力水平的 事件 倍感兴趣. 

那么资源压力主要是指:

  • sql server 活动涉及哪一类的cpu使用
  • 使用了多少内存
  • 涉及多少I/O操作
  • Sql 活动执行了多长时间
  • 特定的查询执行的频率多高
  • 查询面对哪类错误和警告

可以再事件完成后 计算 sql活动的资源压力,所以用于性能分析的主要时间 是 那些标示 sql 活动完成的事件. 如下:

事件类 事件 描述
Stored Procedures RPC:Completed RPC完成事件
  SP:Completed 存储过程完成事件
  SP: StmtCompleted 在存储过程内一条sql语句完成事件
TSQL SQL: BatchCompleted T-Sql批完成事件
  SQL: StmtComleted 一条sql语句完成事件

 

RPC事件表示 存储过程 使用远程调用(RPC)机制 通过 OLEDB命令执行.

如果应用程序 用T-SQL Execute执行存储过程,那么存储过程会被转换一个 sql 批 而不是一个RPC.

数据列:

事件 以不同的特性(被称为数据列) 来表现.下面看一下部分 数据列:

下面看一下数据存的真实数据:

 

过滤器:

可以在跟踪时  定义过滤,这样可以帮助 缩小跟组的的输出.

可以 列名,在右面 可以选择 过滤的条件. 就是这么简单.

 

上面讲的都是 使用GUI来跟踪,那么这样会有弊端.

profiler工具 捕捉的事件 进入内存中的缓冲 以便通过 网络反馈给 GUI.GUI依赖网络,网络流量会降低系统的速度

并导致缓冲区填满.当缓冲区没填满后,服务器将开始 丢弃事件已避免严重的影响服务器的性能.

 

那么我们就可以使用存储过程来 捕捉跟踪.

下面就用 这几个 拓展存储过程来完成这个操作.

1创建一个跟踪: (sp_trace_create )

DECLARE @RC int, @TraceID int, @on BITEXEC @rc = sp_trace_create @TraceID output, 0, N'd:\SampleTrace1.trc'

2。给跟踪添加事件(sp_trace_setevent )

SELECT @on = 1EXEC sp_trace_setevent @TraceID, 45, 1, @on -- 45 是代表SQL: StmtComleted

3.添加过滤器 (sp_trace_setfilter ) 

4.执行 (sp_trace_setstatus )

EXEC @RC = sp_trace_setstatus @TraceID, 1   --1开始 0结束 2 结束并删除

 

整体代码:

DECLARE @RC int, @TraceID int, @on BITEXEC @rc = sp_trace_create @TraceID output, 0, N'd:\SampleTrace1'-- Select the return code to see if the trace creation was successful.SELECT RC = @RC, TraceID = @TraceID-- Set the events and data columns you need to capture.SELECT @on = 1--添加事件EXEC sp_trace_setevent @TraceID, 45, 1, @on --开始跟踪
EXEC @RC = sp_trace_setstatus @TraceID, 1GO

执行后看如下信息:

看到traceId=2

那么查看 这个跟踪的详细信息

select * from sys.fn_trace_getinfo(2)

结果如下图:

以供五行数据.正好对应 创建跟踪的那个后面五个参数.

如果想 停止 该跟踪;

EXEC @RC = sp_trace_setstatus @TraceID, 0删除该跟踪:
EXEC @RC = sp_trace_setstatus @TraceID, 2

下面 把 生成的 跟踪文件 导入到数据表中:

select * into test from sys.fn_trace_gettable('d:\SampleTrace2.trc',default)
表的数据如图:  因为只加了一列 textdata 所以 后面的都是null

转载于:https://www.cnblogs.com/Mr-Joe/archive/2012/05/11/2496283.html

你可能感兴趣的文章
const与#define、结构体对齐、函数重载name mangling、new/delete 等
查看>>
BZOJ2054 疯狂的馒头
查看>>
关于echarts的那些事(地图标点,折线图,饼图)
查看>>
d3.js学习笔记
查看>>
(day10) 28. 实现strStr()
查看>>
MTT
查看>>
Mac搭建PHP Phalcon框架
查看>>
RabbitMQ系列之高可用集群
查看>>
[LeetCode]46. Permutations
查看>>
前端基础--javascript对象
查看>>
ASP.NET应用程序使用NLog记录日志
查看>>
Linux基础学习(意义、文件系统)
查看>>
easyUi 中 datagrid 的各种事件
查看>>
【HDOJ】2851 Lode Runner
查看>>
【HDOJ】2890 Longest Repeated subsequence
查看>>
c#执行并行任务之Parallel与TaskFactory
查看>>
Centos7安装 Hadoop(单节点)
查看>>
进程与线程基础
查看>>
leetcode 63 不同的路径2
查看>>
POJ2533 最长递增子序列
查看>>