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

我们知道使用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

此时在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

Profiler客户端看到:

RML处理结果:

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

时间: 2024-08-05 11:47:07

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

MySQL语句explain详解

我们一般再检查一个SQL语句执行效率的时候,通常会首先用explain来看下该语句的相关情况.虽然经常使用,但时候你深刻的理解了其结果中每个字段的含义呢?其中type字段是我们关注的重中之重.type字段的归纳:     连接类型     system          表只有一行     const           表最多只有一行匹配,通用用于主键或者唯一索引比较时     eq_ref          每次与之前的表合并行都只在该表读取一行,这是除了system,const之外最好的一

C++ Primer 学习笔记_29_操作符重载与转换(4)--转换构造函数和类型转换运算符归纳、operator new 和 operator delete 实现一个简单内存泄漏跟踪器

C++ Primer 学习笔记_29_操作符重载与转换(4)--转换构造函数和类型转换运算符归纳.operator new 和 operator delete 实现一个简单内存泄漏跟踪器 一.转换构造函数 可以用单个实参来调用的构造函数定义从形参类型到该类型的一个隐式转换.如下: class Integral { public: Integral (int = 0); //转换构造函数 private: int real; }; Integral A = 1; //调用转换构造函数将1转换为In

蓝鸥Unity开发基础——Switch语句学习笔记

一.Switch语法 属于多分支语句,通过判断表达式的值,来决定执行哪个分支 Break用于结束某个case,然后执行switch之外的语句 Switch-开关:case-情况开关决定发生的情况 二.Switch基本语法 Switch(表达式){ Case 值1: 语句1 Break: Case 值2: 语句2 Break: -- Case 值n: 语句n Break: Default: 语句 Break: } 三.注意事项 整个defaul语句都可以舍掉,default语句最多只能由一个 Sw

foreach语句

foreach语句他无非就是for循环的封装,为了提高开发速度才创造出来的.他其实跟for循环一样,只不过写起来比较简便,他是1.5版本才出来的一种封装语法.并没有什么奇特之处他里面的机制就是for循环.如图7.3所示: 图7.3 首先放在冒号后面的,他可以是数组的类型也可以是集合类型还可以是枚举类型,也就是说只要写上类似于这种容器,能够容乃多个的就是行. 那这个i是什么意思呢?每次循环的时候,i他取出一个值交给变量j,变量j就是接收者,接收从数组或者集合里拿出来的值交给接收者,每次循环重新接收

自己动手写处理器之第二阶段(3)——Verilog HDL行为语句

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第七篇,我尽量每周四篇 2.6 Verilog HDL行为语句 2.6.1 过程语句 Verilog定义的模块一般包括有过程语句,过程语句有两种:initial.always.其中initial常用于仿真中的初始化,其中的语句只执行一次,而always中语句则是不断重复执行的.此外,always过程语句是可综合的,initial过程语句是不可综合的.       1.always过程语句 always过程语句的格式如图2-10所示.

使用typedef语句定义数组类型

使用typedef语句定义数组类型     1. 一维数组类型的定义格式 typedef <元素类型关键字><数组类型名>[<常量表达式>]; 例如: (1) typedef int vector[10]; (2) typedef char strings[80]; (3) typedef short int array[N]; 第一条语句定义了一个元素类型为int,含有10个元素的数组类型vector,若不使用typedef保留字,则就变成了数组定义,它只定义了一个元

LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Avg (转)

Select/Distinct操作符 适用场景:o(∩_∩)o- 查询呗. 说明:和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也就是结果返回回来:延迟. Select/Distinct操作包括9种形式,分别为简单用法. 匿名类型形式.条件形式.指定类型形式.筛选形式.整形类型形式. 嵌套类型形式.本地方法调用形式.Distinct形式. 1.简单用法: 这个示例返回仅含客户联系人姓名的序列. var q = from c i

条件语句、循环、数组

一.条件语句 if语句 if (条件1){ 代码1 } else if (条件2){ 代码2 } ...... else{ 代码N } switch语句 不常用,仅支持以下类型的比较:String.char.boolean.枚举.整数 二.循环语句 while结构 while(循环条件){ 循环体 } 循环控制语句:break:立即结束整个循环 continue:立即结束当前次数的循环,运行下一次循环 do..while结构 do{循环体} while(循环条件): for结构 for(表达式1

Python2.3-原理之语句和语法

此节来自于<Python学习手册第四版>第三部分 一.python语句简介(第10章) 1.首先记得一个概念:a.程序由模块构成:b.模块包含语句:c.语句包含表达式:d.表达式建立并处理对象.python的语法是由语句和表达式组成,表达式处理对象并嵌套在语句中,语句编码实现程序操作中更大的逻辑关系,语句是对象生成的地方,有些语句会完全生成新的对象类型(函数.类).语句总是存在于模块中,而模块本身则又是由语句来管理的. 2.下面是一个python的语句表: a.赋值语句以不同的语法形式呈现,例