NTFS 驱动器上有大量文件时性能低下

NTFS 驱动器上有大量文件时性能低下

我正在看这个设置:

  • Windows 服务器 2012
  • 1 TB NTFS 驱动器,4 KB 簇,~90% 已用完
  • 10,000 个文件夹中存储约 10M 个文件 = 每个文件夹约 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,大于主内存。

答案1

服务器内存不足。每次文件访问都需要多次磁盘读取,而不是将 NTFS 图元文件数据缓存在内存中。像往常一样,问题一目了然。让我分享一下我的看法:

  • 服务器在任务管理器和 RamMap 中均显示有 2 GB 内存可用。因此,Windows 认为可用内存不足以保存图元文件数据的重要部分。或者某些内部限制不允许将最后一点内存用于图元文件数据。

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

用于分析的工具:

  • fsutil fsinfo ntfsinfo driveletter:显示 NTFS MFT 大小(或NTFS信息
  • 拉姆地图显示内存分配
  • 进程监控表明每次读取文件之前都会对驱动器:\$Mft 和驱动器:\$Directory 执行大约 4 次读取操作。虽然我找不到 $Directory 的确切定义,但似乎与 MFT 有关也一样。

相关内容