我在 Web 应用程序上遇到了一些磁盘访问问题。
主要负载是大型表上的许多并发插入/更新/选择。
它目前是一个运行 SQL Server 2000 和 IIS 的单个 2ru 机架式服务器,运行带有 4x15k SAS 的 raid5 用于数据库;以及 6GB 的 RAM/8 个物理核心。CPU 和内存使用情况似乎很好。
我正在考虑的事情......
- 从当前的 Raid 迁移到多磁盘 SAN
- 用于存储 tempdb 文件的 Ram Drive
- 集群服务器
- 升级 SQL-Server(无论如何最终都会发生;但方便的新关键字至少应该会有很大帮助)
- ?
我应该关注/考虑什么?
谢谢,克里斯
答案1
有几件事。首先,集群服务器不会给您带来任何性能优势,只会提高可用性。
减轻磁盘 I/O 负担最简单的方法可能就是增加服务器内存。RAM 中存储的数据页越多,查询运行时所需的物理 I/O 就越少。
根据您的工作量,如果您有能力迁移到 SAN,那么您可能需要考虑将 TempDB、日志和数据文件拆分到单独的物理磁盘上(您可能需要查看这篇有关 SQL Server 存储十大最佳实践的 MS 文章:http://technet.microsoft.com/en-us/library/cc966534.aspx)。正如 Hutch 所说,放弃 RAID 5,尤其是对于日志和 TempDB,因为它们有大量的写入(RAID 5 对奇偶校验有写入惩罚)。
正如 Chopper3 所说,FusionIO 驱动器是目前速度最快的驱动器之一。如果您有足够的预算,这绝对是一个值得探索的领域(尤其是对于您的 TempDB)。
HTH,丹
答案2
将您的数据和日志移动到融合IO驱动器,非常非常昂贵,但据我所知,现在你无法获得更快的持久存储。
哦,当然你也应该转到 2008R2 64 位,并增加内存。
答案3
立即想到的是研究将 RAID5 转换为 RAID10 或一对 RAID1。
答案4
这个话题需要用“视情况而定”来回答。虽然到目前为止发布的答案对于给定条件来说都是好的和正确的,但还有很多问题。
是的,从 RAID-5 转向 RAID-10 是在“立即执行”栏中打上一个大大的勾,但那些我们还没有被告知的部分呢?
考虑到这一点,我想到了以下几点:磁盘布局:
哪些文件位于哪些驱动器上?TempDb 在哪里以及与 TempDb 关联的文件数量是多少?DB 和 T-Log 是否位于不同的驱动器上?
查询管理和优化:
是否已识别并优化了最繁重的查询?如何优化?更新是否会导致行重定位,或者它们是否能够“就地更新”?更新期间的行重定位会导致各种性能问题。索引管理:所需的索引是否已到位,并且是否正确定义以便需要它们的查询使用?索引重建:索引随着时间的推移会变得支离破碎,需要重新组织或重建。不这样做会影响性能。
环境:驱动器碎片会导致文件碎片。即使驱动器保持干净,任何 DB 或 T-Log 文件的大量扩展区也会产生负面影响。从 SQL 2000 升级到 SQL 2005 或(更好的是)2008 或 2008 R2 是一个很好的建议。在 Windows Server 2008 x64 或 Windows Server 2008 R2 x64 上运行可以本机补充 6GB 内存。SQL Server 2008 和 2008 R2 具有内置工具,可帮助识别问题查询。在压力大且 DBA 压力大的情况下,升级是值得的。驱动器控制器缓存内存:是否足够?缓存是否在多个逻辑驱动器之间共享?
资源竞争(压力):
除了IIS之外,SQL Server系统上还有哪些其他进程在竞争系统资源?
添加 SAN 并不是一个坏主意,但您需要了解环境。了解性能下降的原因是表扫描、不适当的外键管理、更新期间的行重定位、其他问题还是“以上所有”非常重要。如果不知道根本原因,添加 SAN 只会带来暂时的好处。此外,了解您的环境对于正确调整 SAN 的大小至关重要——这不仅仅与可用的磁盘空间有关。
我不了解你的环境,无法就你应该做;而且我上面的列表实际上只是许多经过深思熟虑的书籍所讨论的一个主题的提示。