Windows
在具有大量文件的 NTFS 驅動器上性能緩慢
我正在查看此設置:
- 視窗伺服器 2012
- 1 TB NTFS 驅動器,4 KB 集群,約 90% 已滿
- ~1000 萬個文件儲存在 10,000 個文件夾中 = ~1,000 個文件/文件夾
- 文件大多很小 < 50 KB
- 託管在磁碟陣列上的虛擬驅動器
當應用程序訪問儲存在隨機文件夾中的文件時,讀取每個文件需要 60-100 毫秒。使用測試工具,打開文件時似乎會出現延遲。讀取數據只需要一小部分時間。
總之,這意味著讀取 50 個文件很容易花費 3-4 秒,這比預期的要長得多。寫入是批量完成的,因此性能在這裡不是問題。
我已經按照關於 SO 和 SF 的建議得出了這些數字。
- 使用文件夾減少每個文件夾的文件數量(在文件系統中儲存一百萬張圖像)
- 執行
contig
以對文件夾和文件進行碎片整理(https://stackoverflow.com/a/291292/1059776)- 8.3 名稱和上次訪問時間已禁用(配置 NTFS 文件系統以提高性能)
閱讀時間怎麼辦?
- 考慮每個文件 60-100 毫秒是可以的(不是,是嗎?)
- 任何想法如何改進設置?
- 是否有低級別的監控工具可以準確判斷花費的時間?
更新
- 如評論中所述,系統執行 Symantec Endpoint Protection。但是,禁用它不會更改讀取時間。
- PerfMon 每次讀取測量 10-20 毫秒。這意味著任何文件讀取都需要大約 6 次 I/O 讀取操作,對吧?這會是 MFT 查找和 ACL 檢查嗎?
- MFT 的大小約為 8.5 GB,大於主記憶體。
伺服器沒有足夠的記憶體。每次文件訪問都需要多次磁碟讀取,而不是將 NTFS 元文件數據記憶體在記憶體中。像往常一樣,一旦你看到它,這個問題就很明顯了。讓我分享一下使我的觀點蒙上陰影的原因:
- 伺服器在任務管理器和 RamMap 中顯示 2 GB 記憶體可用。因此,任一 Windows 都認為可用記憶體不足以容納元文件數據的有意義部分。或者某些內部限制不允許將記憶體的最後一位用於元文件數據。
- 升級 RAM 任務管理器後不會顯示正在使用更多記憶體。但是,RamMap 報告了數 GB 的元文件數據被保存為備用數據。顯然,備用數據會產生重大影響。
用於分析的工具:
fsutil fsinfo ntfsinfo driveletter:
顯示 NTFS MFT 大小(或NTFSInfo)- RamMap顯示記憶體分配
- 程序監視器顯示每個文件讀取之前都有大約 4 次對驅動器的讀取操作:$ Mft 和驅動器:$目錄。雖然我找不到 $Directory 的確切定義,但它似乎也與 MFT 有關。