平均8.5kbのサイズの約1.1TBのXMLファイルを保存することを計画しているアプリケーションがあります。
これらは18か月のローリングデータを表しており、毎日約200,000の新しいファイルが作成されています。
各ファイルは1回だけ書き込まれ、その後の18か月間で3%(10回未満)の確率で読み取られます。
パフォーマンスに役立つNTFSオプションは何ですか?
私たちのリストにある現在のものは次のとおりです。
断片化について:ディスクスペースの使用効率のために、2kのクラスターサイズを使用することを計画しています。各ファイルは1回だけ書き込まれます(つまり、ファイルの編集は行われません)。ファイルは、18か月後に毎日削除されます。
したがって、断片化が重要な問題になるとは考えていません。
私も追加します:
ディスクの最適化をオフにします。各ファイルが1つのブロックに書き込まれるように、ブロックサイズを16kbに変更します。
この理由:
1日に1.7GBのデータを200,000ファイルに書き込みたいと考えています。これらのファイルが1日24時間にわたって書き込まれると仮定すると、これは1秒あたり約3つのファイルを意味します。これは単一のSATAディスクでは重大な問題ではないようですので、ディスクのパフォーマンスだけでなく他の問題もあると思います。
(つまり、十分なメモリがありますか?それともメモリをディスクにページングしていますか?)
しかしながら
Windows NTFSファイルシステムは、デフォルトで、バックグラウンドでファイルシステムを最適化しようとします。ディスクの最適化を行うと、ディスクの最適化中にパフォーマンスが低下します。パフォーマンスはすでに問題になっているように思われるので、これはあなたにとって問題を悪化させるだけです。
小さなクラスターサイズを使用することと、大きなファイルを書き込む際のIOパフォーマンス)の間にはバランスがあります。ファイルとファイル割り当てテーブルはディスク上の同じセクターにないため、ブロックを割り当てる必要があります。ファイルを書き込んでいると、ディスクヘッドが常に移動する必要があります。ファイルの95%をそれぞれ1つのクラスターに格納できるクラスターサイズを使用すると、IO書き込みパフォーマンスが向上します。
他の人が指摘しているように、2kの小さなクラスターサイズを使用すると、時間の経過とともに断片化が発生します。このように考えてください。最初の18か月間、ファイルをクリーンな空のディスクに書き込みますが、OSは、閉じられると各ファイルにデータが追加されないことを認識しないため、いくつかのブロックを使用可能なままにします。そのファイルが後で拡張される場合に備えて、各ファイルを終了します。ディスクがいっぱいになるずっと前に、他のファイル間のギャップにのみ空き領域があることがわかります。それだけでなく、ファイルのギャップを選択するときに、OSは5ブロックのファイルと2ブロックのファイルのどちらを書き込んでいるかを認識しないため、ファイルを保存する場所を適切に選択できません。
結局のところ、エンジニアリングとは、相反するニーズを処理し、これらのバランスをとるニーズに対して最も低コストのソリューションを選択することです。私の推測では、より大きなハードドライブを購入する方が、より高速なハードドライブを購入するよりもおそらく安くなるでしょう。
最終アクセスタイムスタンプを無効にし、MFT用のスペースを予約します。
このパーティーには遅れますが、他の人に利益をもたらす可能性があるので...
再。クラスターサイズ、最初に、そして最も重要なことは、ファイルサイズの分布を調べる必要があるため、断片化が少ないように最適化できますandディスクスペースの浪費。全体の平均ではなく-例:ほとんどのファイルが2kに近い場合、2kのクラスターサイズが最適であり、4kに近い場合、4kのクラスターが最適です。 otohファイルサイズが均等/ランダムに分散されている場合、最善の方法は、クラスターサイズの平均ファイルサイズに近いか、一部の大規模システムのように、異なるファイルサイズの異なるクラスターサイズのパーティションにファイルを保存することです。 dそのためのソフトウェア/ fsサポートが必要です。
プトレマイオスの答えについての私のコメントを詳しく述べるために...
すべてのファイルの非常に大部分が1つのブロック内に含まれるようにブロックサイズを設定すると、I/O効率が向上します。 2Kのブロックサイズと8.5Kの平均ファイルサイズを使用すると、I/O操作の50%が5ブロック以上になります。 16Kのブロックサイズを設定すると、書き込みの大多数が単一のブロックに行われるように聞こえます。これにより、これらの3%の読み取りが発生したときにはるかに効率的になります。
考慮すべきことの1つは、バックアップI/Oです。データをバックアップしている場合、すべてのファイルが少なくとも1回読み取られ、それらのディレクトリエントリはバックアップパスごとにトロールされます。これをバックアップする場合は、デザインのバックアップI/Oを検討してください。
警告:基盤となるストレージシステムがすでにストレージ仮想化を行っているシステム(HP EVAディスクアレイやそのクラスの他のアレイなど)の場合、これはそれほど重要ではありません。このタイプの断片化は、データが実際のドライブ上に非常に断片化された性質ですでに物理的に存在しているため、気付かれません。その場合、2kのブロックサイズで十分であり、パフォーマンスにはそれほど影響しません。予想されるファイルサイズの大部分を保持するのに十分な大きさのブロックサイズを選択することでパフォーマンスは向上しますが、その大きさはそれほど重要ではありません。
これは、現在はあまり使用されていない(またはそれほど重要ではない)一部のNTFS機能をオフにすることで、NTFSパフォーマンスを向上させるためのシンプルなユーティリティです。
https://Gist.github.com/p3x-robot/185e5c1b699d726bcce1bb51d5ca82d8
rem execute as an Administrator
rem based on http://www.windowsdevcenter.com/pub/a/windows/2005/02/08/NTFS_Hacks.html
ram based on https://docs.Microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc938961(v=technet.10)
rem http://archive.oreilly.com/cs/user/view/cs_msg/95219 (some installers need 8dot3 filenames)
rem disable 8dot3 filenames
ram Warning: Some applications such as incremental backup utilities rely on this update information and do not function correctly without it.
fsutil behavior set disable8dot3 1
rem increase ntfs mtz size
fsutil behavior set mftzone 2
rem disable last access time on all files
fsutil behavior set disablelastaccess 1
echo now you can reboot