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

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

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

RAID进行大量的硬盘分区和分区,或者为每个RAID使用更less的磁盘来创build多个RAID,会更好吗?

数据和日志文件应该是不同的RAIDtypes?

如果默认的数据库(master,msdb等)位于C:或者应该与其他数据/日志文件在同一个地方?

这里有一个很好的博客文章: http : //sqlserveradvisor.blogspot.com/2009/03/sql-server-disk-configuration.html

磁盘alignment上的白皮书: 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上十大最佳性能技巧: http : //www.stlssug.org/docs/Best_Practices_for_Performance.pdf

另外请记住,出于性能原因,将TEMPDB放在单独的磁盘上。 我相信保罗·兰德尔(Paul Randal)会来这里,并且为什么要一点一滴地打起精神来。

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

这是一个很大的“取决于”的问题。

我无法回答如何为您创build单个RAIDarrays问题,因为我不是存储专家,但我可以帮助其他人。

首先要考虑的是各种数据库(OLTP(读/写)或DSS / DW(主要是读取))上的工作负载是多less。 对于读/写工作负载,您应该考虑RAID 1或RAID 10(RAID 1 + 0),因为它们提供了冗余性和出色的读/写性能。 对于主要读取的工作负载,您可以使用RAID 5.不应将RAID 5用于读取/写入工作负载,因为您在写入时支付性能损失。

事务日志本质上是读/写(或主要是写,这取决于您是否使用事务日志进行任何事情 – 例如日志备份或复制),因此不应将其放在RAID 5上。

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

实际数据库的再次分离取决于工作负载以及底层IO子系统的function – 例如,在单个RAIDarrays上存储事情比在SAN上需要更高的分离度。

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

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

Bototm系列:了解您的工作负载和IO子系统function,然后相应实施。

我希望这对你有帮助。

PS就tempdb而言,这是一个很大的蠕虫,你应该如何configuration它,并有各种冲突的信息。 我在TF 1118附近的误区上写了一篇关于tempdb数据文件configuration的综合博客文章。

我设立的服务器的简短答案一直是

logging在单独的物理磁盘上,RAID 1或10(分条+镜像)

数据库在自己的磁盘上,这取决于性能需求通常是RAID5

在RAID控制器上有很多的caching

最好再把操作系统和Windows页面文件粘贴到一个单独的arrays上,通常只是一个镜像(Raid 1)。 这使得所有的写入操作分离开来,因此性能不佳并不会拖累所有的东西

我过去经历的是,有数据库写入+日志写入+页面文件写入将陷入一个Raid5arrays和性能将在彻底的手段。 问题是你的性能在testing,开发等方面会很好。但是当你进入生产和使用高峰时,这个问题将会“出乎意料”,用户投诉也会大幅增加。

在这里有比我更好的MSSQL家伙,但总的来说,我会build议以下;

操作系统和C上的代码: – 这应该是本地磁盘,应该是RAID1arrays对 – 我们使用2 x 2.5英寸SAS 146GB 10krpm磁盘,但可以使用2个SATA 7.2磁盘。 数据应该是一个相当快(10krpm或更好)的RAID 1/10,5 / 50/6/60arrays,无论你需要什么大小 – 我们在FC SAN LUN上保存我们的数据,通常在'tier 2'/ 10krpm磁盘组。 日志应该在一个单独的非常快(15krpm)的小(10GB或更less?)RAID 1arrays对上 – 我们在FC SAN LUN上,通常在一个非常小的“tier1”/ 15krpm磁盘组或“tier0” ssd组。

无论哪种方式,你需要在单独的主轴/arrays上的每个块的性能 – 当然,它将所有的工作单个磁盘,但我想你正在寻找性能和成本的平衡。

我们将master / tempdb存储在常规数据库中,但是可以将其分解为单独的数据arraysLUN。

希望这可以帮助。