Windows

在具有大量文件的 NTFS 驅動器上性能緩慢

  • April 25, 2016

我正在查看此設置:

  • 視窗伺服器 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,大於主記憶體。

伺服器沒有足夠的記憶體。每次文件訪問都需要多次磁碟讀取,而不是將 NTFS 元文件數據記憶體在記憶體中。像往常一樣,一旦你看到它,這個問題就很明顯了。讓我分享一下使我的觀點蒙上陰影的原因:

  • 伺服器在任務管理器和 RamMap 中顯示 2 GB 記憶體可用。因此,任一 Windows 都認為可用記憶體不足以容納元文件數據的有意義部分。或者某些內部限制不允許將記憶體的最後一位用於元文件數據。
  • 升級 RAM 任務管理器後不會顯示正在使用更多記憶體。但是,RamMap 報告了數 GB 的元文件數據被保存為備用數據。顯然,備用數據會產生重大影響。

用於分析的工具:

  • fsutil fsinfo ntfsinfo driveletter:顯示 NTFS MFT 大小(或NTFSInfo
  • RamMap顯示記憶體分配
  • 程序監視器顯示每個文件讀取之前都有大約 4 次對驅動器的讀取操作:$ Mft 和驅動器:$目錄。雖然我找不到 $Directory 的確切定義,但它似乎也與 MFT 有關

引用自:https://serverfault.com/questions/768755