使用存储过程读取数据绑定到DataGrid的性能测试

时间:2005/12/18 21:24:38      阅读:3133          

     这段时间对一个网站进行升级,由于原来在设计初期时间有限,没有对网站的性能上做测试,在运行了一年多的时间里发现了不少问题,在这一年多的时间里数据量慢慢增大,网站的运行速度越来越慢,在前一段时间里,为了网站的运行速度花了我不少的心思,首先是把网站从表格排版改为XTML+CSS排版,虽然速度上有了一些小小的改变,但是还远远不够,又把网站的数据绑定控件由原来的DataGrid改为Repeater,性能上始终只能有一小点的改变,始终没有达到我想要的效果,最近又为了这事在网上找了不少资料,最后把使用存储过程的方法列为最适合的解决方案,使用存储过程可以在100万级以上的数据量进行读取而性能上不会相差多少,反而数据量越大读取数据的性能就越好,以下我就做例子,使用存储过程和不使用存储过程进行把数据绑定到DataGrid的性能测试。

使用Application Center Test对单个表的数据绑定到DataGrid的性能测试(测试性能因机器的快慢而不定,我的机器配置C1.3G/256M)如图:

从上面图上(蓝色为使用存储过程,橙色是没有使用存储过程)可以看出,使用存储过程的性能明显比不使用存储过程的性能高,再看一下测试出来的详细数据:

属性
      (1) (2)
  测试类型: 动态 动态
  浏览器同时连接数: 1 1
  准备时间(秒):    
  测试持续时间: 00:00:05:00 00:00:05:00
  测试迭代次数: 3,545 111
  生成的详细测试结果:
 
摘要
    (1) (2)
  请求总数: 21,275 670
  连接总数: 21,274 670
 
  每秒平均请求数: 70.92 2.23
  首字节平均响应时间(毫秒): 10.16 444.30
  末字节平均响应时间(毫秒): 10.34 444.48
  每次迭代末字节平均响应时间(毫秒): 62.04 2,682.88
 
  测试中的唯一请求数: 3 3
  唯一响应代码数: 2 2
 
错误计数
    (1) (2)
  HTTP: 10,637 335
  DNS:    
  套接字:    
 
其他网络统计数据
      (1) (2)
  平均带宽(字节/秒): 380,145.32 11,914.62
 
  发送字节数(字节): 24,166,005 747,959
  接收字节数(字节): 89,877,591 2,826,426
 
  发送字节平均速率(字节/秒): 80,553.35 2,493.20
  接收字节平均速率(字节/秒): 299,591.97 9,421.42
 
  连接错误数:    
  发送错误数:    
  接收错误数:    
超时错误数:    
 
响应代码
      (1) (2)
  Response Code: 404 - 服务器找不到任何与请求的 URI(统一资源标识符)匹配的内容。
    计数: 10,637 335
    百分比(%): 50.00 50.00
 
  Response Code: 200 - 请求已成功完成。
    计数: 10,638 335
    百分比(%): 50.00 50.00
 


我们比较一下“每秒平均请求数”,使用存储过程和不使用存储过程的值分别为70.92和2.23,相关非常大,再对比一下网络统计数据都可以看得出来,我又测试了多表关联的性能,使用存储过程性能也相当的高,有兴趣的朋友们可以自己测试一下,我给出我用来测试存储过程代码大家参考,对于网上有多种存储过程的方法也有很多测试,至于用什么方法得具体在使用时进行测试才可知道。

 
   
CREATE PROCEDURE GetDataGridPage @tablename varchar(255), --表名 @col varchar(255), --按该列来进行分页(排序列的列名) @coltype int, --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型 @orderby bit, --排序,0-顺序,1-倒序 @collist varchar(4000),--要查询出的字段列表,*表示全部字段 @pagesize int, --每页记录数 @pageindex int, --指定页 @strwhere varchar(4000),--查询条件 @Totalpages int OUTPUT --总页数 AS /* 名称:GetDataGridPage 版本:1.0 作者:踢西 网站:http://web3.cn 声明: 此代码你可以无偿使用及转载,但在转载时,请勿移称本文字声明 功能描述:对指定表中满足条件的记录按指定列进行分页查询,分页可以顺序、倒序 查询可以指定页大小、指定查询任意页、指定输出字段列表,返回总页数 最后修改:2005-12-14(修正原版本的一些错误) */ DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800) IF @strwhere is null or rtrim(@strwhere)='' BEGIN--没有查询条件 SET @where1=' WHERE ' SET @where2=' ' END ELSE BEGIN--有查询条件 SET @where1=' WHERE ('+@strwhere+') AND '--本来有条件再加上此条件 SET @where2=' WHERE ('+@strwhere+') '--原本没有条件而加上此条件 END SET @sql='SELECT @Totalpages=CEILING((COUNT(*)+0.0)) FROM '+@tablename+@where2 EXEC sp_executesql @sql,N'@Totalpages int OUTPUT',@Totalpages OUTPUT--计算总页数 IF @orderby=0 SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+ ' FROM '+@tablename+@where1+@col+'>(SELECT MAX('+@col+') '+ ' FROM (SELECT TOP '+CAST(@pagesize*(@pageindex-1) AS varchar)+' '+ @col+' FROM '+@tablename+@where2+'ORDER BY '+@col+') t) ORDER BY '+@col ELSE SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+ ' FROM '+@tablename+@where1+@col+'<(SELECT MIN('+@col+') '+ ' FROM (SELECT TOP '+CAST(@pagesize*(@pageindex-1) AS varchar)+' '+ @col+' FROM '+@tablename+@where2+'ORDER BY '+@col+' DESC) t) ORDER BY '+ @col+' DESC' IF @pageindex=1--第一页 SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+' FROM '+@tablename+ @where2+'ORDER BY '+@col+CASE @orderby WHEN 0 THEN '' ELSE ' DESC' END EXEC(@sql) GO
评论
  • Re:使用存储过程读取数据绑定到DataGrid的性能测试  (2006/8/10 21:23:28) by 飘萍 
    存储过程在大数据上很有用。
标 题:
 
姓 名:
 
主 页:

验证码:

评论:
 

Because of the cache,you may see your comments several minutes later.