最初发布在 stack overflow 上,但经过重新措辞。
想象一下这样的场景:对于数据库,我有 RAID 阵列 R:(MDF)T:(事务日志)以及 X:(tempDB)的共享透明使用。
我一直在读大约并且感觉如果您使用 RAID,那么在文件组内的 R: 上添加多个 SQL Server NDF 文件不会带来任何改进。当然,添加另一个 RAID 阵列 S: 并在其上放置一个 NDF 文件会。
但是,作为一名相当精明的软件人员,可以假设,即使对于位于一个 RAID 阵列上的较小 MDF,SQL Server 也会在 MDF 上执行增长和锁定操作(用于写入),因此将 NDF 添加到文件组(即使它们位于 R 上)会分散锁定操作和增长操作,从而允许更多吞吐量?或者,从分布式文件组重建数据所花费的时间是否超过了减少锁定的好处?
我也知道表格/索引/日志的行为和好处可能有所不同。
有没有一个好的网站可以区分 RAID 已经到位时多个文件的好处?
答案1
我最近回答过类似的问题“多个数据文件和多个文件组”
这个问题也相当复杂,很难提炼出一个简洁的答案。了解 SQL Server 如何访问数据会有所帮助:请参阅“SQL Server 2000 I/O 基础知识”仍然有效
读取性能由 RAM 决定。您不必转到磁盘来读取数据:如果您这样做,则说明您的 RAM 不足。在 64 位出现之前的旧时代,如果您有一个 500 GB 的数据库,则只能容纳 64GB 的 RAM,因此您需要拆分索引或类似操作
当然,你通常不需要将整个数据库都放在 RAM 中,当你需要读取时,它应该停留在缓存中,直到被逐出。但更多的 RAM 永远不会出错
写入性能由 LDF 卷控制。查看上述文章中的预写日志
你做拆分数据库文件,以便在卷发生故障时可恢复。有了良好的备份/恢复计划,您可以分别使用 MDF 和 LDF。
可恢复性不只是 RAID 阵列。如果您的磁盘控制器发生故障怎么办?您的磁盘是否全部来自同一供应商/批次/固件?如果 RAID 5 中的 2 个磁盘发生故障怎么办?SQL Server 群集?文件损坏?
如果同一卷上有多个文件,则任何读取请求都将比读取一个较大的文件(通常是连续的)花费更长的时间。这就是为什么文件服务器和数据库服务器通常以不同的方式构建的原因
您找不到一个好的网站,因为它还没有完成:正如您注意到的,每个人都倾向于对同一个文件组中的多个文件说“不”。
您将获得更多分区对齐并使用 64k 簇正确格式化 NTFSA