最近在测试查询功能,需要对查询语句的执行效率进行测试,暂时我也没找到比较好用的方法,下面是我在测试时用的笨办法,记录下来,权当是一次profiler探索之旅:
“在程序这个功能模块中用到的查询语句是什么?”
这个可以直接 问开发人员,也可以自己找。因为有时候开发自己有时候也不记得自己用到了多少查询,用到了哪些语句。因此,如果程序能自己找到是最好了。在无法看到源程序的时候,可以使用SQL Server工具菜单下自带有SQL Server Profiler跟踪某个功能模块的全部SQL 语句。操作步骤如下:
1、打开profiler需要输入数据库的账号密码,打开界面后会自动显示新建跟踪。
2、在常规选项卡中选择跟踪结果的保存位置(也可以不选);
3、在事件选择中挑选你的跟踪项目。在不清楚自己该如何筛选的时候,可以把以下选项勾上
stored procedures下的
RPC:completed (RPC表示存储过程中使用远程过程调用通过OLEDB执行),
SP:completed (存储完成事件)
SP stmtcompleted (存储过程中一条SQL完成的事件)
TSQL下的
SQL:BatchCompleted (T-SQL 批完成事件)
SQL:stmtCompleted (一条T-SQL语句完成事件)
4、点击运行它就开始跟踪数据库的所有操作了。
5、运行一次需要查找SQL语句的功能模块。
为了在profiler跟踪到的大量的SQL操作中找到自己需要的那个,首先要了解自己的操作的特征。比如我需要寻找的SQL语句是一个根据关键字(如“白天”)查找的查询语句,那么这个SQL语句一定类似
select……from……where XXX='白天'
那么在查找工具中输入关键字“白天”,就可以找到相关的查询语句(TextData中)。同时可以得到该查询的相关信息:登录名,读取数据的次数,占用时间,开始时间,结束时间等。由于该功能模块相关的所有SQL语句的SPID是一致的,那么就可以点击文件中的属性菜单通过事件筛选中的列筛选器取出所有SPID与刚刚找到的查询语句相同的,就是该功能模块的SQL语句了。
实际在刚刚的过程中,Duration(单位毫秒)就是执行时间了。多个用户并发也可以找到执行时间。
当然也可以通过LoadRunner的录制,但是LoadRunner录制的脚本只能得到单个用户的运行时间,对并发测试需要惠普的license,估计对大多数的公司这个还是有点困难的。