优化SQL Server 2008存储过程

Mat*_*den 3 .net t-sql sql-server sql-server-2008 reporting-services

更新25/03/2011 我已经将这个问题标记为已回答,而我还没有具体的答案来帮助改进系统我认为在我走得那么远之前推迟是不公平的.这个问题很广泛,答案给了我许多指导,帮助我顺利完成.当我有更具体的问题要问我会回来的时候.不幸的是,我只能用勾号标记一个答案,但我要感谢大家的意见,这一切都很有价值,谢谢你的时间.

原始问题

提前道歉,因为这个问题可能会非常广泛!

我真正准备介入一个项目,其中一个其他开发人员已经组建了一个基于SQL Server 2008企业版,Reporting Services和存储过程的大型系统.我们在VM系统上进行性能测试时发现的(即,在VMWare1 ESXi托管的Windows Server 2008 R2系统上运行SQL Server),它似乎没有利用额外的内存或内核.

当我进入这个项目时,我正在寻找关于一些初步大纲问题的一些指导:

  1. 在SQL Server 2008中优化使用更多内存和更多处理器内核的机会是什么?
  2. 是否有关于如何调用,结构化,开发等存储过程的规则会影响SQL Server如何并行化存储过程?

此外,我想下一个显而易见的一点是 - 我需要在代码中注意哪些事情可以为其他人提供更深入的了解如何构建它并允许我提供更具体的示例?系统中有很多代码行,但显然理想的是尝试查找演示用法的精简示例或模式.

我相信,存储过程是由Reporting Services调用的.

在我们的测试中,它似乎是线性执行 - 即如果我们配置具有2个内核,2ghz CPU分配和4GB内存的VM,如果1个报告在2分钟内同时运行,则2将花费将近4分钟(即两倍的时间)对于这两个报告而言,它不是那么线性但足够接近 - 一切都变慢了,几乎就好像它们并没有真正并行运行.

可能是SQL Server Reporting Services只是一次只运行一个报告或与之相关的东西吗?

存储过程都是在Transact-SQL中开发的.

再次,为广泛的问题道歉.如果有人在那里可以帮助教育我如何在这个领域获得更深入和更多的知识,那么这将是非常感激的!

马特.

SQL*_*ace 5

要记住几件事

  1. 内存是你的朋友,你拥有的越少,SQL Server必须转到磁盘上的速度要慢1000倍
  2. 您是否拥有正确的索引并使用它们?
  3. 您的where子句/订单是否由索引覆盖?
  4. where子句是sargable还是以SQL Server不使用索引的方式编写的?
  5. proc是使用基于SET的操作还是使用游标并循环遍历数据集(这种方式较慢)
  6. 当只需要2列时,procs是否使用SELECT*?
  7. 在自己的磁盘主轴上分离Log,tempdb和数据文件,如果您有非聚簇索引,也将它们放在自己的磁盘上
  8. 虽然procs正在运行使用性能监视器甚至任务管理器,但看看会发生什么...... CPU最大值是RAM最大值
  9. 一个报告阻止了另一个吗?运行EXEC sp_who2并查看BlkBy列
  10. 抓住其中一个触发器,在SSMS中运行它并查看执行计划..如果您看到大量扫描和总执行项目的百分比很高......首先关注那些,还要查看计划中的转换等内容

你能展示一些代码,我们可以快速查看它并告诉你我们是否看到了红旗