Ric*_* Ev 10 performance ntfs performance-tuning
我们有一个应用程序计划存储大约 1.1TB 的 XML 文件,平均大小为 8.5kb。
这些代表了 18 个月的滚动数据,每天创建大约 200,000 个新文件。
每个文件只会写入一次,然后有 3% 的机会在接下来的 18 个月内被读取少量 (<10) 次。
哪些 NTFS 选项对我们开放,有助于提高性能?
目前我们名单上的有:
关于碎片:我们计划使用 2k 集群大小来提高磁盘空间使用效率。每个文件将只写入一次(即没有文件编辑)。文件将在 18 个月后每天删除。
因此,我们认为碎片化不会是一个重大问题。
我还要补充:
关闭磁盘碎片整理。将块大小更改为 16kb,以便将每个文件写入单个块。
这样做的合理性:
您希望每天在 200,000 个文件中写入 1.7GB 的数据。假设这些文件是一天 24 小时写入的,这意味着大约每秒 3 个文件。对于单个 SATA 磁盘来说,这似乎不是一个重大问题,所以我猜测您还有其他问题以及磁盘性能。
(即你有足够的内存吗?或者你是否也将内存分页到磁盘?)
然而
默认情况下,Windows NTFS 文件系统会尝试在后台对文件系统进行碎片整理。当您对磁盘进行碎片整理时,磁盘碎片整理会降低性能。由于性能似乎已经成为一个问题,这只会让您的情况变得更糟。
在写入大文件时使用小集群大小和 IO 性能之间存在平衡。文件和文件分配表不会在磁盘上的同一扇区上,因此在写入文件时必须分配块将导致磁盘磁头必须不断移动。使用能够将 95% 的文件存储在一个集群中的集群大小将提高您的 IO 写入性能。
正如其他人指出的那样,使用 2k 的小集群大小会随着时间的推移导致碎片化。可以这样想,在前 18 个月中,您将把文件写入干净的空磁盘,但是操作系统不知道一旦关闭,将不会向每个文件添加更多数据,因此它一直在保留一些块可用结束每个文件,以防该文件稍后扩展。在填满磁盘之前很久,您会发现唯一的可用空间是其他文件之间的间隙。不仅如此,当它为你的文件选择一个间隙时,操作系统不知道你是在写一个 5 块文件还是一个 2 块文件,所以它不能很好地选择保存文件的位置。
归根结底,工程就是处理相互冲突的需求,并为这些平衡需求选择成本最低的解决方案。我的猜测是,购买更大的硬盘驱动器可能比购买更快的硬盘驱动器便宜。