SQL Server事务日志RAID

我们有三台SQL Server服务器,每台服务器上有五六个数据库。 我们正在将这些服务器迁移到新的SAN,我正在开发最好的RAIDconfiguration。 目前,所有数据库的所有日志文件共享一个RAIDarrays,除了日志文件之外,此RAIDarrays上没有任何其他内容,但所有数据库都使用相同的arrays作为其日志文件。

我读过最好在不同的磁盘上安装日志文件。 但在我们的情况下,我不确定是否最好有一个大的arrays与约8个驱动器的所有日志文件。 或者,创build四个磁盘arrays并将一些较大的数据库作为自己的专用磁盘作为日志文件会更好吗?

日志

日志主要是顺序访问结构。 简单地说,您可以将它们视为“将此数据写入此块”的条目的环形缓冲区。 数据库引擎发出写入时,实际上会将这些条目中的一个写入日志。 然后日志读取器进程asynchronous跟进,并将块写入磁盘。

由于磁头活动相对较less,日志相对较快。 但是,如果日志写入活动与同一磁盘上的随机访问活动争用,则争用会显着影响日志写入性能,从而影响整体数据库性能。

另外,将日志写入一个单独的磁盘给你一个冗余的措施。 如果备份数据,则可以在恢复的数据库上前滚备份以来的日志条目。 这意味着灾难必须同时取出日志和数据量才能导致数据丢失。

由于这些原因,您应该在一个单独的arrays(不同的物理磁盘)上logging数据卷。 如果没有争用,单个镜像对可以处理大量的日志stream量,所以除非拥有非常大的事务量,否则您可能不需要其他任何东西。 但是,请确保没有其他事情在日志卷上生成磁盘活动。

的TempDB

如果您有大量使用TempDB的进程,那么您将在RAID-10卷上获得性能优势,因为这比RAID-5具有更好的写入性能。 (请参阅下面的回写caching注释)。 如果要将数据和索引放在RAID-5卷上,并且使用大量使用TempDB的进程,则可以将TempDB放在单独的RAID-10卷上,从而获益。 如果您在数据卷上也使用RAID-10,则无关紧要。

数据和索引

如果您的数据量非常大,则可以将数据放在RAID 5,6,50(条带化RAID-5数据块)或60上。如果数据量较小,则可以使用RAID-10。 如果您的数据卷上有RAID-5(或类似的),那么您可能需要一个单独的TempDB卷,否则系统可能会在数据,索引和TempDB共享一个RAID-10卷时正常工作。

回写caching

如果SAN上的RAID控制器支持备用电池,则可以在其上设置回写式caching。 这意味着控制器将caching写入RAM并优化写回到磁盘。 回写式caching在RAID-5卷上可以算是一种性能优势,但却给系统增加了额外的故障模式。

如果电源发生故障,电池备份将保留caching数据几天。 当您重新激活SAN时,它将写出caching的条目。 理论上这是相当可靠的,可能会起作用。 但是,有许多关于回写caching失败的轶事故事。

如果您可以激活基于每个卷的回写caching,请考虑在日志中使其处于不活动状态。 这样,如上所述,通过恢复数据库和滚动日志,可以恢复caching失败而不会造成数据损坏。 基准您的系统,以确保性能令人满意。

结论

单独的日志和数据量。 如果您正在使用RAID 4,5,6,40,50或60并且在TempDB中有大量活动,请考虑将TempDB放在单独的RAID-10卷上。 除非您有非常大的数据量,否则您可以在RAID-10卷上共享数据,索引和TempDB。 日志卷不应共享具有繁重磁盘活动源的磁盘。

事务日志arrays必须至less为RAID 1(镜像),推荐使用1 + 0(镜像+条带),最less需要4个物理驱动器。

由于事务日志的顺序写入模式的性质,RAID 5不应该用于事务日志,只能用于数据文件,性能要始终将日志和数据文件分隔到不同的物理arrays上。

我只会把它分成两个数组,否则你就是在浪费许多磁盘。 如果你有一个8个驱动器的arrays,你应该有7个驱动器的容量。 但是,如果您有4个arrays,则只有4个驱动器容量。

另一个需要考虑的就是RAID 1在RAID 5上的读写性能。从理论上讲RAID 1是1x写入,2倍读取和2倍search,而RAID 5有(N-1)次写入,Nx读取和1次查找。 这在理论上,在实践中你的读/写/caching模式和控制器有所作为。

日志文件的磁盘访问模式是仅附加的。 日志写入将成为数据库中具有大量更新或插入活动的整体性能的决定因素。 磁盘头查找主导了执行物理IO的时间。

从整体性能angular度来看,目标是给每个日志文件一个专用的磁盘主轴,使磁头移动总是最小。

出于可靠性目的,增加这个策略,使每个日志文件得到一个2磁盘硬件RAID 1。

将日志文件存储在SAN上可能难以控制磁头争用,具体取决于所讨论的SAN系统。

如果我们正在讨论为多个不同的数据库存储日志文件,我更喜欢2个独立的RAID1,而不是由4个磁盘组成的RAID0 / 1(或1/0)。 select日志文件活动最多的数据库,并为其提供自己的一组主轴。

正如其他地方所build议的,不要理会使用RAID5的任何想法。

有点晚,但会回答未来。

所有以前的答复都是正确的,但对于本地驱动器; 与SAN,NAS(那些大的商业不是你的家庭)改变。

检查你的供应商和你得到的模型。 原因是供应商说RAID对事务日志无关紧要。 供应商也表示,整个交易日志和数据文件的单独驱动器会导致性能问题,应该放在一个卷上。

其中一部分是因为在SAN上,除非你获得了全部的驱动器,否则另一个驱动器将会让你感觉到性能的提升,而HBA和networking,而不是驱动器的瓶颈。

因此,请参阅供应商build议的硬件,然后开始testing和监控。

分离数据path的次数越多,性能就越差,因此分离数组并赋予每个数据库(或者最繁忙的数据库,而不是最大的数据库,第二)他们自己的日志文件磁盘。