8.10.1 使用.NET Vuser测试SQL Server 2008数据库性能
我们使用.NET来测试一下使用ADO.NET连接SQL Server 2008读取一张表的响应时间。
使用VS 2010开打Vugen新建的项目,完成转换格式后,首先在项目上选择属性,修改编译目标版本从2.0升级到3.5(4.0的编译对象无法在Vugen中运行)。接着为该项目添加system、system.data、system.xml的对象引用。编写下面的代码:
using System; using System.Data.SqlClient; using System.Data; namespace Script { public partial class VuserClass { public int Action() { string title; title="cloud"; lr.start_transaction("ado"); SqlConnection con = new SqlConnection("server='(local)'; database='cloudsample';uid='sa';pwd='51testing'"); con.Open(); //打开数据连接 string strsql = "select * from webservicetable where chartitle like '" + title + "%'"; //生成SQL语句 lr.start_transaction("search"); SqlDataAdapter da = new SqlDataAdapter(strsql, con); //创建适配器 lr.end_transaction("search", lr.AUTO); DataSet ds = new DataSet(); //创建数据集 int i = da.Fill(ds, "mytable"); //填充数据集 con.Close(); lr.end_transaction("ado", lr.AUTO); return 0; } } } |
在数据库的表中有10000条随机记录,当我们运行该脚本时就可以得到准确的SQL执行时间和.NET部分ADO连接时间,Vugen日志如下:
Notify: Transaction "ado" started. Notify: Transaction "search" started. Notify: Transaction "search" ended with "Pass" status (Duration: 0.0006). Notify: Transaction "ado" ended with "Pass" status (Duration: 0.0984). |
可以看到查询数据库的时间只有0.0006秒,而ADO连接是整个查询中开销最大的部分,同时我们还可以在SQL Server Managerment Studio中对该语句做一个单独的查询分析,结果如图8.36所示。
图8.36 查看SQL语句的客户端统计
通过SQL执行客户端统计信息可以看到执行一次这样的SQL语句需要开销的时间大概在14毫秒左右;和我们通过ADO连接得到的事务时间基本接近。在确认脚本的正确性后我们可以使用Controller进行多用户负载,得到系统在面临多用户ADO连接时数据库端和应用端的响应时间,从而定位性能瓶颈。
所以使用.NET Vuser用户开发脚本相当于我们自己重写了一个富客户端,从而可以方便地在其中插入各种探针和分离各种干扰因素。