如何优化MSSQL数据库的性能?

我是一个具有〜280表的数据库的dba,总数据大小为〜1,5GB。 我想调整数据库,使其performance更好。

你如何保持你的SQL数据库的性能? 多less索引,统计和碎片整理你在做什么?

什么是最大的性能杀手/改进,以及如何解决问题以找出哪里优化?

编辑:这是来自第三方CRM系统的数据库,所以我无法控制代码。 他们已经添加了很多索引(在合理的地方),但我想知道如何保持服务器的速度。

我每晚都跑步

EXEC sp_MSforeachtable "dbcc dbreindex('?', '', 90)" 

重build索引和(希望)更新统计数据,使用维护计划。 同样的计划也执行“收缩数据库任务”。

还有什么其他的每周/每周维护任务,或一次性优化可以完成?

编辑2:

提示聚集:

  • 不要运行“收缩数据库任务”
  • closures“自动收缩”属性
  • 运行“EXEC sp_MSforeachtable”dbcc dbreindex('?','',90)“
  • 然后运行“EXEC sp_updatestats”

您应该删除维护计划的“缩小数据库”部分。 “缩小数据库”会将您的索引碎片化! 这里是Paul S. Randal的一篇很棒的博客文章,详细解释了这一点。

你可以重build你的统计数据:

 EXEC sp_updatestats 

在您的数据库重新索引后,始终更新您的统计 这里是Colin Stasiuk的博客文章,解释了这个最佳实践。

我只通过索引获得了数量级的性能提升(尽pipe我并没有真正摆弄它)

处理完明显的(体面的硬件,索引和碎片整理)之后,你最好的性能来源就是看你自己的代码。

确保你的SQL服务器除了服务SQL,没有文件共享,没有任何Web服务器之外没有任何其他的工作。 一个大小不应该有任何性能问题的数据库,运行Profiler将有助于缓解任何慢点。

确保预先分配足够的空间,以便数据库始终不会自动增长。

如果你有sp2的sql2005,你可以(因为你是一个dba可能已经)安装性能仪表板报告插件。 在重新启动服务器之后,我会观察性能监视器以查找有用的索引。 性能监视器提供了丰富的信息。 随着时间的推移,我发现它积累了很多东西(但这可能是因为我有一个像fogbugz数据库设置…我有很多客户端数据库,所有具有相同的结构,在同一台服务器上… sql服务器将把每一个需要的索引视为单独的索引,并在报表中导致一堆有效的重复条目)。 无论如何,我花了很多时间查看缺失的索引报告,并添加/修改索引。

最好的问候,不要

将主数据库文件粘贴在不同于您的日志文件的物理磁盘上。 即 – 分开你的.MDF和你的.LDF文件。

所有硬件修复抱歉,但我会build议使用;

64位的Windows 2008大量的内存(16GB左右,我build议,这是便宜的)在固态硬盘上,数据在一对15krpm SCSI / SAS磁盘上的数据理想情况下,一对至强55xx系列芯片。

这显然会花钱,但会保证显着的性能提升 – 你可以使你的数据库更好,但这需要时间(当然这成本),并不能保证更快。

testing在SQL Management Studio中运行你的sql / stored procs。 运行它们时,请打开查看执行计划和客户端统计信息。 查找表扫描或其他使用占用大量执行时间的步骤。 如果你正在运行SQL 2008,它会build议使你的代码运行得更快的索引。