我不是服务器管理员。所以请保持礼貌。但我刚刚参加了一次会议,在一次培训课程中,讲师解释了一些 SQL DBA 最佳实践。其中之一是将 Mdf、Ldf 和 TempDB 分离到不同的驱动器上以提高性能。
现在我们办公室有一个 san。系统管理员创建了 3 个 san 驱动器,一个用于数据,一个用于日志,一个用于 TempDB。
我的直觉告诉我那是徒劳的努力...是吗?
我不知道很多细节,但如果你问的话,我会尽量填写任何需要的规格以准确回答这个问题。
答案1
数据库文件、事务日志文件和临时数据文件通常放在不同的卷上,以减少它们之间的 I/O 争用,并且还可以通过为每个数据库创建多个数据文件、将它们分布在更多卷上并告诉 SQL Server 应存储特定表和索引的位置来进一步扩展;所以,是的,这是 DBA 的常见做法,并且确实可以显着提高性能。
在使用 SAN 时,这一点也确实变得毫无意义;根据 SAN 的实际配置方式,不同的 LUN(卷)可以映射到任何一组物理磁盘、RAID 阵列和存储控制器,因此两个 LUN 之间的 I/O 争用范围可以从“完全隔离”到“有效共享相同磁盘”。因此,除非 DBA 与存储管理员密切合作,否则要求不同的 LUN 以在它们之间传播数据库文件确实会成为完全浪费的努力。
然而,分离数据库文件和事务日志文件不仅被认为是性能方面的最佳实践,而且也是可靠性方面的最佳实践:由于 SQL Server 使用的事务存储引擎(以及几乎所有现有 DBMS 使用的类似引擎),日志文件可用于在灾难恢复场景中重放事务,使系统能够恢复所发生的事情后已进行最后一次备份。但为了使此操作有效,您不希望同时丢失数据文件和日志文件,因此最好至少将它们放在不同的卷上,即使这样做不会提高性能。
答案2
将数据库文件与日志文件分开的原因是数据库访问是随机的,而日志访问是顺序的。最佳实践要求不要在同一磁盘上混合这两种 I/O 类型,无论该磁盘如何呈现给服务器(本地、DAS、iSCSI 等)。所以,这不是浪费精力。
至于 tempdb,微软似乎建议将其与数据库分开:
http://msdn.microsoft.com/en-us/library/ms175527(v=sql.105).aspx
答案3
如果磁盘上只包含一个日志文件,则日志的 I/O 将是连续的。添加另一个日志文件,则 I/O 将是随机的。