我正在使用以下硬件在 Win 2k8 上设置 SQL Server:
- 6 个 WD RE3 500G SATA
- PERC H700
我读过一些建议,将日志文件和操作系统放在自己的 RAID1 上,而将其余数据放在 RAID10 上,这将是 8 个磁盘的最佳配置。但是我缺少 2 个磁盘,不知道哪种配置同样好。
选项1) 2 个 RAID1 用于操作系统和日志,4 个 RAID10 用于数据
选项 2) 6 个 RAID10 用于存储操作系统、日志和数据
PS:在 RAID10 中对磁盘进行分区有什么区别吗?
答案1
这里的要点是,如果将两组文件放在不同的物理磁盘(或 RAID 卷)上,那么在同时访问这两组文件时,速度会快得多;这就是为什么操作系统通常会获得自己的卷(它自己会执行相当多的 I/O,而你不希望它在处理大量数据时速度会变慢),这也是为什么你通常希望根据数据的使用模式来拆分数据。
话虽如此,SQL Server 的一个更重要的点是,事务日志不仅通常与数据文件同时访问,因此将两者分开是一个不错的选择,而且如果您希望在发生硬件故障时能够真正恢复数据,您至少需要其中一个。如果您丢失了事务日志,您可以创建另一组,但您的实际数据是安全的……如果您丢失了数据,事务日志将允许您从上次备份恢复到故障点。如果您同时丢失数据和日志,您只能恢复上次备份,仅此而已。
您的方案中最好的选择是创建三个 RAID 1 卷,一个用于操作系统,一个用于数据库文件,一个用于事务日志。我知道这看起来浪费了很多空间(如果您遵循适当的备份计划,操作系统就没有地方使用 500 GB,事务日志也是如此),但它会有所帮助很多在性能和可恢复性方面。而且,如果您不需要超过 500 GB 的实际数据,它将非常适合您。
如果做不到这一点,那么请为操作系统和日志使用 RAID 1 卷,为数据使用 RAID 10 卷。这是您使用现有硬件所能做到的最好事情。但是,无论您怎么做,您都不应该将数据和日志放在同一个地方。
关于多个分区:这完全没用,甚至会使情况更糟。同一磁盘(或 RAID)中的三个分区的性能与单个分区完全相同(= 很差),甚至由于磁盘几何问题而更差;而且它对恢复没有帮助,因为如果发生硬件故障,您无论如何都会丢失所有分区。
哦,为了你自己,不要思考如果您非常关心写入性能,那么使用 RAID 5。
答案2
答案3
您说得对,在这种情况下 8 个磁盘会更好,但最重要的考虑是您希望日志与数据放在不同的磁盘上。如果您真的只能使用 6 个磁盘,并且需要 4 个磁盘的数据空间,那么我会倾向于将日志放在 OS R1 对的第二个分区上。这并不理想,因为在记录和执行 OS 工作时,磁头必须移动很多,但如果您有足够的内存,那么 OS 工作应该会很低。如果您不需要太多磁盘空间,那么 2+2+2 设置怎么样?
答案4
在我的大多数常见设置中,我倾向于使用 RAID1 来存储操作系统;使用 RAID0 来存储临时的、非必要的内容;并使用各种 RAID 来存储数据。
如果客户想要最大的磁盘空间,那么最后一组将是 1 x RAID5;如果他们更关心性能,那么后者将是 1 x RAID10;如果他们更关心冗余,那么我会选择 2 x RAID1。
我通常会为数据卷配备第二个控制器;有时会根据数据库的使用情况,改变两者的读写优先级(我们倾向于将操作系统、温度和日志放在控制器 1 上,25% 读取:75% 写入;将数据放在控制器 2 上,75% 读取:25% 写入 - 这就是我们销售的应用程序的性质)
就您而言,假设 PERC 可以做到这一点(我倾向于使用 HP SmartArrays),我可能会选择以下方法:
- 创建包含 2 个磁盘的阵列 A
- 创建具有 2 个磁盘的阵列 B
- 创建包含 2 个磁盘的阵列 C
- 在阵列 A 上创建卷 A1 作为 RAID1,其总大小约为 20-25%
- 在阵列 A 上创建卷 A2 作为 RAID0,其余部分
- 使用所有可用空间在阵列 B 上将卷 B1 创建为 RAID1
- 使用所有可用空间在阵列 C 上将卷 C1 创建为 RAID1
这应该给你(大约):
- C:\ RAID1-OS - 90GB(对于操作系统、SQL Server 和一个合适的页面文件来说应该足够了)
- D:\RAID0-TEMP-790GB(适合备份暂存、临时导出等)
- E:\RAID1-DATA-480GB(MDF 文件)
- F:\RAID1-LOGS-480GB(LDF 文件)
不过,在我看来,您的性能问题可能与 SATA 磁盘有关。我从未设法让它们运行得足够稳定,所以我总是选择至少 10K SAS 驱动器。也许自从我上次使用它们以来,它们已经好了很多,所以您的里程可能会有所不同......