在大量文件的NTFS驱动器上performance不佳

我正在看这个设置:

  • Windows Server 2012
  • 1TB NTFS驱动器,4 KB群集,约90%满
  • 存储在10,000个文件夹中的〜10M文件=〜1,000个文件/文件夹
  • 文件大多很小<50 KB
  • 虚拟驱动器托pipe在磁盘arrays上

当应用程序访问存储在随机文件夹中的文件时,需要60-100毫秒来读取每个文件。 使用testing工具时,似乎打开文件时发生延迟。 读取数据只需要很less的时间。

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

我已经遵循SO和SF的build议来达到这些数字。

  • 使用文件夹减less每个文件夹的文件数量( 在文件系统中存储一百万张图像 )
  • 运行contig来整理文件夹和文件( https://stackoverflow.com/a/291292/1059776 )
  • 8.3名称和上次访问时间禁用( configurationNTFS文件系统的性能

如何处理阅读时间?

  • 考虑60-100毫秒每个文件是好的(不是,是吗?)
  • 任何想法如何设置可以改善?
  • 是否有低级的监测工具可以说明究竟花了多less时间?

UPDATE

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

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

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

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

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

  • 升级后,RAM任务pipe理器将不会显示更多正在使用的内存。 然而,RamMap报告了多GB的元文件数据被保存为备用数据。 显然,备用数据可能会产生重大影响。

用于分析的工具:

  • fsutil fsinfo ntfsinfo driveletter:显示NTFS MFT大小(或NTFSInfo )
  • RamMap来显示内存分配
  • 进程监视器显示读取每个文件之前有大约4个读取操作驱动:\ $ Mft和驱动器:\ $目录。 虽然我找不到$ Directory的确切定义,但它似乎也与MFT有关 。