码迷,mamicode.com
首页 > 其他好文 > 详细

LK怎样的语句会被RML归纳为同一类型

时间:2016-06-25 20:24:57      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

我们知道使用RML工具分析跟踪数据(.TRC),很多存储过程调用或动态语句总体是一样的,只是带的参数会有不同,这个工具会把它们归类。
下图是筛选条件CPU>=30ms的跟踪文件,使用RML工具处理后,Top Unique Batches部分语句(这里使用报表语句在查询窗口得出,结果按NormText排序)
技术分享
可以看到**HISTORY_111_0存储过程没有完全合并到一起,这和存储过程执行所带参数个数及参数顺序有关。
我们把前两条的NormText复制出来,光标移动到语句的末尾:
技术分享
它们所带的参数个数不同,查证此存储过程定义了很多参数,部分带有默认值。
下面测试下存储过程执行所带参数个数与参数顺序,是否会影响到Unique Batches的分类。首先打开跟踪,用于收集存储过程的执行,在查询窗口运行下面语句:

技术分享
use TestDB
go
create proc CheckUnique
@parm1 int,
@parm2 int=2,
@parm3 int=3
as
begin
    select @parm1,@parm2,@parm3
end    
go
--传入一个参数
exec CheckUnique @parm1=1
exec CheckUnique @parm1=11
--传入两个参数
exec CheckUnique @parm1=1,@parm2=2
exec CheckUnique @parm1=1,@parm2=22
--调换参数顺序
exec CheckUnique @parm2=2,@parm1=1
--传入三个参数
exec CheckUnique @parm1=1,@parm2=2,@parm3=3
View Code

此时在Profiler客户端看到:
技术分享
另存为跟踪文件到CheckUnique.trc,使用RML分析:

ReadTrace -I"F:\TroubleShooting\Trace\CheckUnique.trc" -o"F:\TroubleShooting\Trace\output" -S"127.0.0.1,7777" -d"PerfAnalysis_CheckUnique" -E

处理完成后,点击报表上的"Unique Batches",就可以得到一个关于语句级别的报表:
技术分享
@parm1归为一类,@parm1,@parm2归为一类,@parm2,@parm1归为一类,@parm1,@parm2,@parm3归为一类。可见参数个数和参数顺序都会影响语句的归类。
那如果是普通的查询语句会是怎样呢?

技术分享
--where条件不同
select * from sys.tables
select * from sys.tables where type=U
select * from sys.tables where type=P
select * from sys.tables where type=U and schema_id=5
select * from sys.tables where type=P and schema_id=1
select * from sys.tables where schema_id=5 and type=U
--select字段不同
select name,create_date from sys.tables
select create_date,name from sys.tables
select name,object_id,create_date from sys.tables
View Code

Profiler客户端看到:
技术分享
RML处理结果:
技术分享
对比原始语句和处理后的语句,很容易知道RML同一类型的归类受以下条件影响:
对于存储过程,与传入参数个数及参数顺序有关
对于普通的SELECT,与返回字段、顺序及WHERE条件的字段、顺序都有关(UPDTAE、DELETE类似)

LK怎样的语句会被RML归纳为同一类型

标签:

原文地址:http://www.cnblogs.com/Uest/p/5616808.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!