NTFSファイルシステムでは、ファイルが最後にアクセスされた日時を記録している。Windows OSではファイルの内容をシステムが読み出すことが多いため、この情報はかなり頻繁に更新される。この機能を無効化してパフォーマンスを高める方法とは?
対象OS:Windows 2000 / Windows XP / Windows Vista / Windows Server 2003 / Windows Server 2008
Windows OSのNTFSファイルシステムでは、作成したファイルの属性として、作成日時や更新日時(最後に書き込みが行われ、ファイルがクローズされた時間)の他にもう1つ、「最終アクセス日時(last access time)」という情報が記録されている。これはファイルを最後に読み出した時間を記録しておくものであり、例えば単にメモ帳で開いて、何も更新せずにそのままクローズしても、この最終アクセス日時がクローズ時の時刻に更新される。これにより、最後にいつアクセスされたかが分かる。
この情報を確認するには、この画面のように、エクスプローラのプロパティを開くか、エクスプローラの詳細表示に「アクセス日時」という項目を追加する。コマンドプロンプトの場合は、「dir /ta」のように、「/ta」オプションを付ければよい。
Windows OSではファイルデータの読み出しはかなり頻繁に行われるので、この最終アクセス日時情報が更新される頻度はかなり高い。例えばエクスプローラでフォルダをブラウズするだけでも、ファイルタイプによってはその内容の読み出しとタイプのチェックなどが行われるし(アイコンや縮小版表示などに反映するため)、検索機能でファイルの中に含まれる文字列を検索すると、対象フォルダ中のファイルが全て読み出され、その内容がスキャンされるので(あらかじめインデックスを作っていない場合)、最終アクセス日時が更新される。
最終アクセス日時が更新されると、その結果を最終的にはディスクに書き込む必要がある。ディスクの書き込みにはキャッシュ機能が働くので(OS側とディスク側の両方にキャッシュがある)、通常はシステムの負担になるようなことはない。だが、メモリが少ないシステムや低速なディスクの場合には、若干だがパフォーマンスの低下を招くことになる。
また最近普及しつつある半導体ディスク(SSD)の場合は、同じ場所を繰り返し使わないように、たとえデータの更新であっても、別の場所へ書き込み直すという高度な制御(ウェアレベリング)を行っている。つまり、ユーザーとしてはデータを書き込んでいるつもりはなくても、最終アクセス日時情報の更新に伴ってSSDへの書き込みが多数発生し、その結果、SSDのパフォーマンスが低下したり、寿命が短くなったりする可能性がある。
このような問題を避けるには、Windows OSの設定を変更して、最終アクセス日時を更新しないようにすればよい。ファイルシステムによっては利用できない機能だし(NTFSか、FAT32の長い名前が有効な場合にのみ利用可能)、この情報が必須のアプリケーションもほとんどないので、無効にしても問題になることはないだろう。ただし、厳格な監査(アクセス記録の取得)などでこの情報を利用しているようなケースでは、無効にしない方がよい。
ファイルの最終アクセス日時を記録しないようにするには、管理者としてコマンドプロンプトを開き、以下のコマンドを実行する。「fsutil behavior set disablelastaccess 1」とすると最終アクセス日付の記録が無効化され、「fsutil behavior set disablelastaccess 0」とすると有効化される。
C:\>fsutil behavior set disablelastaccess /? ……ヘルプの表示
使用法 : fsutil behavior set <オプション> <値>
<オプション> <値>
disable8dot3 1 | 0
allowextchar 1 | 0
disablelastaccess 1 | 0
quotanotify 1 秒から 4294967295 秒
mftzone 1 から 4
C:\>fsutil behavior set disablelastaccess 1 ……最終アクセス日付の記録の無効化
C:\>
以上のコマンドを実行後、システムを再起動する。なおコマンドからも分かるように、ディスクやボリュームごとにこの設定を変えることはできない。システム全体で有効にするか、無効にするかしか選択できない。
現在の設定状態を確認するには、「fsutil behavior query disablelastaccess」というコマンドを実行する。
※未設定の場合(デフォルト状態)は次のように表示される
C:\>fsutil behavior query disablelastaccess
disablelastaccess は現在設定されていません ……未設定の場合
※1か0に設定済みの場合
C:\>fsutil behavior query disablelastaccess
disablelastaccess = 1 ……1に設定されている場合(最終アクセス日時を記録しない)
この値が存在しないか0の場合は最終アクセス日時が記録され、1の場合は記録されない。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.