我有一个运行 SQL Server 2008 R2 的相当繁忙的数据库服务器,它具有以下设置:
- SATA RAID 1(2 个驱动器)- 操作系统 / 程序
- SAS RAID 10(4 个驱动器)- Sql 数据库文件(数据和日志)
- SAS RAID 1(2 个驱动器)- TempDB(数据和日志)
假设我无法在此服务器中添加额外的驱动器,我是否充分利用了可用的配置?或者我应该在这里考虑另一种方案,例如,将日志与数据文件隔离开来?
更新:
对于那些要求更多硬件细节的人:
- SATA 驱动器(用于操作系统/程序分区)是: WD 7200 RPM 3 Gb/s 3.5 英寸 SATA
- 其他阵列中使用的 SAS 驱动器是: Seagate 15K RPM 6 Gb/s 3.5 英寸 SAS
- 使用的 RAID 控制器是:LSI 9260-8i SAS/SATA 6 Gb 8 端口
更新 2:
根据我收到的反馈,我似乎有以下可行的选项可供选择 - 我会将赏金奖励给可以告诉我在我概述的环境中哪个可能是最好的人:
- 保持一切原样 - 我可能不会做得更好
- 将我的 2 个 SAS RAID 1 驱动器移动到我现有的 RAID 10 阵列中,使其总共由 6 个磁盘组成
- 将我的日志文件移动到 SAS RAID 1 和/或将 TempDB(数据或日志)重新定位回 RAID 10
这个问题的变体半定期出现:
偶尔也会出现关于数据/日志分离“最佳实践”的争论。
如果没有对该服务器正在执行的操作进行更详细的分析,则适用与前面给出的相同的建议。
在可用的主轴如此之少的情况下,分裂中很少有任何意义。与 2 个较小的阵列相比,具有较大 IOP 容量的单个阵列通常会更好地吸收工作负载的大块和颠簸。
值得测试的一种变体是将 tempdb 放在操作系统驱动器上。仅当您具有可以重复回放的代表性工作负载时才这样做,以确保公平比较配置。如果您在生产中采用这种安排,请确保限制 tempdb 的增长,以免无意中消耗操作系统驱动器上的所有可用空间。
鉴于您的操作系统驱动器是 7200RPM 杯垫,如果操作系统驱动器配置上的 tempdb 有任何好处,我会感到惊讶。
这完全取决于您的工作量,但只有 6 个驱动器确实限制了您的选择。如果您的工作负载在排序、哈希表和快照隔离等方面并不严重依赖 tempdb,那么您最好在 RAID 10 中一起使用 6 个 SAS 驱动器。但是,如果您知道或有指标来证明tempdb 被大量使用,那么您应该像以前一样将它分开。
实际答案取决于您的需求,但通常“将数据和日志放在不同的阵列上”比“将 tempdb 放在自己的阵列上”更重要。
鉴于您可用的驱动器数量,我的出发点是:
应该做的是使用SQLIO来测试不同驱动器配置的性能。
这在很大程度上取决于您所说的“非常忙”的含义:不同的工作负载模式(是否编写繁重的操作、是否常见的批量操作、并发访问的级别,仅举出众多变量中的三个)可能会对任何给定主轴布置的性能。
对于写入繁重的情况,将日志与数据分开可能会产生显着差异,因为每次写入都涉及更新日志和数据文件,因此如果两组文件位于同一组主轴上,则会涉及大量额外的磁头翻转.
在没有进一步参考您的工作负载(以及这些驱动器的规格以及它们与机器之间的任何控制器)的情况下,我倾向于选择三个卷:一个用于 OS+程序和 tempdb(数据),一个用于主 DB数据,第三个用于日志(临时数据库和主数据库)。
当然,如果您的工作负载对写入操作都很轻,那么您不应该花太多时间担心将数据和日志分开,因为它不会产生很小的性能差异,并且为它们专用整个卷将非常浪费可用空间。
根据您使用数据库的用途(OLTP 与仓储),您的配置看起来像是一个很好的通用配置。如果你有更多的磁盘,你会有更多的选择。
如果将 TempDB 的磁盘切换到 RAID 0(条带),您可以获得更好的性能。它会增加失败的风险,但由于 TempDB 仅缓冲数据,因此您不会遇到数据丢失的情况。所以大多数人认为这是一个合理的权衡。只需保留一个备用(或热备用)。
您没有提到但可以尝试的一件事(如果您还没有):Microsoft 建议将您的 TempDB 拆分为多个文件(每个 CPU 一个)。当然,最好将它们放在单独的磁盘上,但简单地拥有单独的文件会有所帮助。 http://msdn.microsoft.com/en-us/library/ms175527(v=SQL.105).aspx