SQL Server 优化笔记

      最近调优了一个使用JBuilder + JBoss + SQL Server构建的系统,典型的三层结构,前端由JBoss搭建的web服务器构成,后端使用SQL Server作为数据库。在调优之前,系统表现出的问题就是基本上没有并发访问,涉及到数据量大的操作反应特别慢,在多个用户同时访问时可能web服务奔溃。

  与运维人员深入了解之后,针对最严重的case进行了深入了解,从web端的日子,代码分析,发现主要的问题集中在两块,一是代码逻辑的问题,而是数据库访问的耗时。

     SQL Server的版本是2005.其中几张表数据量特别大,大小都在700-800M,记录已经达到200百万行左右。

     SQL Server 2005 提供了SQL Server Profiler来跟踪数据库内部执行的sql语句,以及Sql语句执行的耗时等等信息,可以很好的来分析对于表的读写性能。在仔细分析SQL Server Profiler的数据之前,先准备一点关于存储过程的知识。 

1.存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。主要是提高了sql语句的执行效率,数据的查找还是需要做索引

2.一是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它;

3.创建

create proc sp_name
  @[参数名] [类型],@[参数名] [类型]
  as
  begin
  .........
  end

4.调用
exec sp_name [参数名]

5.显示存储过程
show procedure status

     使用存储过程之后,可以加速SQL语句执行的前期准备。

   对于一张表数据在10万行左右,在好的索引下,对这张表执行select语句,耗时基本上可以低于1ms。

 

在同样的表上建立索引之后的查询结果对比,表的大小在20M,行数在10万行左右,建立了好的索引,查询时间基本上为1ms一下。

 

这张表大小在近800M,数据记录在160万行,建立好的索引之后,查询时间下降到了230ms。

posted @ 2012-09-19 21:25  臭蛋  阅读(326)  评论(0编辑  收藏  举报