SQL Server 的推荐磁盘/分区设置

Sea*_*wat 14 raid partition sql-server

我正在寻找一些关于为 SQL Server 设置磁盘/分区的最佳方法的建议。以下是我的一些主要担忧:

应该如何分离 SQL 文件(数据文件、日志、临时文件)?

是对大量硬盘进行 RAID 并分区空间还是为每个 RAID 使用较少的磁盘制作多个 RAID 更好?

数据和日志文件是否应该位于不同的 RAID 类型上?

默认数据库(master、msdb 等)应该位于 C: 上,还是应该与其他数据/日志文件位于同一位置?

SQL*_*ken 14

这是一篇不错的博客文章:http : //sqlserveradvisor.blogspot.com/2009/03/sql-server-disk-configuration.html

磁盘对齐白皮书:http : //msdn.microsoft.com/en-us/library/dd758814.aspx

简而言之,您的操作系统应该在 RAID 1 上,您的数据文件应该在 RAID 10(最好)上,日志文件应该在 RAID 1 上。

SQL 性能文章:http : //www.sql-server-performance.com/faq/raid_1_raid_5_p1.aspx

PDF 上的 10 个最佳性能提示:http : //www.stlssug.org/docs/Best_Practices_for_Performance.pdf

还记得出于性能原因将 TEMPDB 放在单独的磁盘上。我相信 Paul Randal 很快就会来到这里并让您大吃一惊。

MS 说为什么使用 tempdb:http : //msdn.microsoft.com/en-us/library/ms175527.aspx


Pau*_*dal 12

这是一个很大的“视情况而定”的问题。

我无法回答如何为您创建单个 RAID 阵列的问题,因为我不是存储专家,但我可以为您提供其余的帮助。

您需要考虑的第一件事是各种数据库上的工作负载是什么 - OLTP(读/写)或 DSS/DW(主要是读)。对于读/写工作负载,您应该考虑 RAID 1 或 RAID 10 (RAID 1+0),因为它们提供冗余和出色的读/写性能。对于以读取为主的工作负载,您可以使用 RAID 5。RAID 5 不应用于读/写工作负载的原因是您在写入时会付出性能损失。

事务日志,就其本质而言是读/写(或主要是写,取决于您是否将事务日志用于任何事情 - 例如日志备份或复制),因此永远不应放在 RAID 5 上。

这意味着对于某些数据库和工作负载,您可能在 RAID 5 上拥有数据文件,在 RAID 1/10 上拥有日志文件,而对于其他数据库,您可能拥有 RAID 1/10 上的所有内容。更进一步,如果您有一个分区数据库,它可能包含一些主要读和一些读/写数据,甚至可能包含在同一个表中。这可以拆分为单独的文件组,然后每个文件组置于适当的 RAID 级别。

实际数据库的分离再次取决于工作负载和底层 IO 子系统的功能——例如,在单个 RAID 阵列上存储东西可能需要更高程度的分离,而不是在 SAN 上。

Tempdb 本身就是一个特例,因为它通常是一个负载很重的数据库,应该与其他数据库分开存储。系统数据库不应该被大量使用,只要有冗余就可以放在任何地方。

这是我帮助编写的白皮书的链接,它应该对您有所帮助:物理数据库存储设计。还要确保您的 IO 子系统可以处理预期的工作负载 - 请参阅此白皮书:预部署 I/O 最佳实践。最后,确保使用正确的 RAID 条带大小(在较新的系统上通常为 64K 或更高)、正确的 NTFS 分配单元大小(通常为 64K),并且在 Windows Server 2008 之前的系统上,正确设置磁盘分区偏移. 有关这些的信息以及指向有关它们的更多信息的指针以及为什么应该以这种方式配置它们,请参阅此博客文章:您的磁盘分区偏移量、RAID 条带大小和 NTFS 分配单元设置是否正确?.

底线:了解您的工作负载和您的 IO 子系统功能,然后相应地实施。

我希望这对你有帮助。

PS 就 tempdb 而言,它是关于如何配置它的一大堆蠕虫,并且存在各种相互冲突的信息。我在Misconceptions around TF 1118写了一篇关于 tempdb 数据文件配置的综合博客文章。