具有大量文件的 NTFS 驱动器性能低下

Pau*_* B. 12 windows performance filesystems ntfs

我正在查看此设置:

  • 视窗服务器 2012
  • 1 TB NTFS 驱动器,4 KB 集群,约 90% 已满
  • 约 1000 万个文件存储在 10,000 个文件夹中 = 约 1,000 个文件/文件夹
  • 文件大多很小 < 50 KB
  • 托管在磁盘阵列上的虚拟驱动器

当应用程序访问存储在随机文件夹中的文件时,读取每个文件需要 60-100 毫秒。使用测试工具似乎在打开文件时发生延迟。然后读取数据只需要一小部分时间。

总之,这意味着读取 50 个文件很容易花费 3-4 秒,这比预期的要多得多。写入是批量完成的,因此性能在这里不是问题。

我已经按照 SO 和 SF 的建议得出了这些数字。

阅读次数怎么办?

  • 考虑每个文件 60-100 毫秒是可以的(不是,是吗?)
  • 任何想法如何改进设置?
  • 是否有低级监控工具可以准确判断时间花在了什么地方?

更新

  1. 如评论中所述,系统运行 Symantec Endpoint Protection。但是,禁用它不会更改读取时间。

  2. PerfMon 每次读取测量 10-20 毫秒。这意味着任何文件读取都需要大约 6 个 I/O 读取操作,对吗?这会是 MFT 查找和 ACL 检查吗?

  3. MFT 的大小约为 8.5 GB,大于主内存。

Pau*_* B. 5

服务器没有足够的内存。每个文件访问都需要多次磁盘读取,而不是在内存中缓存 NTFS 元文件数据。像往常一样,一旦你看到这个问题就很明显了。让我分享一下我的观点:

  • 服务器在任务管理器和 RamMap 中都显示了 2 GB 可用内存。因此,Windows 决定可用内存不足以保存元文件数据的有意义的部分。或者某些内部限制不允许将最后一位内存用于元文件数据。

  • 升级后 RAM 任务管理器不会显示更多内存正在使用。但是,RamMap 报告了多 GB 元文件数据作为备用数据保存。显然,备用数据会产生重大影响。

用于分析的工具:

  • fsutil fsinfo ntfsinfo driveletter:显示 NTFS MFT 大小(或NTFSInfo
  • RamMap显示内存分配
  • Process Monitor显示每个文件读取之前都有大约 4 次读取操作到 drive:\$Mft 和 drive:\$Directory。虽然我找不到 $Directory 的确切定义,但它似乎也与 MFT 有关