我是一个数据库管理员,数据库有 ~280 个表,总数据大小约为 1.5GB。我想调整数据库以使其性能更好。
您如何保持 SQL 数据库的性能?你做了多少索引、统计和碎片整理?
最大的性能杀手/改进是什么,您如何排除故障以找出优化的地方?
编辑: 这是来自第 3 方 CRM 系统的数据库,所以我无法控制代码。他们添加了很多索引(在合理的地方),但我想知道如何保持服务器的速度。
我确实每晚都跑步
EXEC sp_MSforeachtable "dbcc dbreindex('?', '', 90)"
使用维护计划重建索引和(希望)更新统计信息。相同的计划还执行“收缩数据库任务”。
还有哪些其他夜间/每周维护任务或一次性优化可以完成?
编辑2:
提示收集:
- 不要运行“收缩数据库任务”
- 关闭“自动收缩”属性
- 运行 "EXEC sp_MSforeachtable "dbcc dbreindex('?', '', 90)"
- 然后运行“EXEC sp_updatestats”
您应该删除维护计划中的“收缩数据库”部分。“收缩数据库”将使您的索引碎片化!这是 Paul S. Randal 的一篇很棒的博客文章,其中详细解释了这一点。
您可以使用以下方法重建统计信息:
在您的数据库重新索引后始终更新您的统计信息。这是 Colin Stasiuk 的博客文章,它解释了这种最佳实践。
我仅通过索引就获得了数量级的性能改进(尽管我并没有真正摆弄它)
在你处理了明显的(体面的硬件、索引和碎片整理)之后,你最好的性能来源就是查看你自己的代码。
确保您的 SQL 服务器除了提供 SQL 服务、没有文件共享、没有 Web 服务器之外没有做任何事情。一个大小不应该有任何性能问题的数据库,运行 Profiler 将有助于在任何慢点上归零。
确保您预先分配了足够的空间,这样数据库就不会一直自动增长。
如果你有 sql2005 的 sp2,你可以(因为你可能已经是 dba)安装性能仪表板报告插件。重新启动服务器后,我将查看性能监视器以获取有用的索引。性能监视器提供了丰富的信息。随着时间的推移,我发现它积累了很多东西(但这可能是因为我有一个像fogbugz这样的数据库设置......我有很多客户端数据库,都具有相同的结构,在同一个服务器上...... sql server将把每一个中所需的索引视为单独的,这会导致报告中出现大量重复的条目)。无论如何,我花了很多时间查看丢失的索引报告并因此添加/修改索引。
最好的问候,唐
将主数据库文件粘贴在与日志文件不同的物理磁盘上。ie - 分开你
.MDF
和你的.LDF
文件。抱歉,所有硬件修复,但我建议使用;
64 位 Windows 2008 大量内存(我建议 16GB 左右,目前它很便宜) SSD 上的日志,一对 15krpm SCSI/SAS 磁盘镜像上的数据 理想情况下是一对 Xeon 55xx 系列芯片。
这显然都需要花钱,但会保证快速显着提高性能 - 你可以让你的数据库更好,但这需要时间(当然这也需要花费)并且不能保证让它更快。
在 SQL Management Studio 中测试运行您的 sql/存储过程。当您运行它们时,打开查看执行计划和客户统计信息。查找占用大量执行时间的表扫描或其他步骤。如果您运行的是 SQL 2008,它会建议索引,使您的代码运行得更快。