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

Fro*_*rud 6 performance database-administration sql-server

我是一个 dba,拥有一个包含 ~280 个表的数据库,总数据大小为 ~1,5GB。我想调整数据库以使其性能更好。

您如何保持 SQL 数据库的性能?你做了多少索引、统计和碎片整理?

最大的性能杀手/改进是什么,您如何排除故障以找出优化的位置?

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

我确实每晚跑步

EXEC sp_MSforeachtable "dbcc dbreindex('?', '', 90)"
Run Code Online (Sandbox Code Playgroud)

使用维护计划重建索引和(希望)更新统计信息。同一个计划还执行“收缩数据库任务”。

还可以完成哪些其他夜间/每周维护任务或一次性优化?

编辑2:

收集到的提示:

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

que*_*tin 10

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

您可以使用以下方法重建统计信息:

EXEC sp_updatestats
Run Code Online (Sandbox Code Playgroud)

在您的数据库重新索引后总是更新您的统计信息。是 Colin Stasiuk 的一篇博客文章,解释了这种最佳实践。


Dan*_*ani 8

我仅通过索引就获得了数量级的性能改进(尽管我并没有真正摆弄它)

在您处理了显而易见的(体面的硬件、索引和碎片整理)之后,您最好的性能来源就是查看您自己的代码。

  • 我见过的另一件事是将主 (MDF) 和日志 (LDF) 文件移动到不同的磁盘。 (3认同)

Sql*_*CID 5

确保您的 SQL 服务器除了服务 SQL、没有文件共享、没有 Web 服务器之外没有做任何事情。一个大小不应该有任何性能问题的数据库,运行 Profiler 将有助于在任何慢点上归零。

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