質問

2009年08月25日 00時21分
  • フォルダ内に一定量を超えるファイルがあると遅くなる?

情シスのオープンナレッジ『Syszo』サービス終了のお知らせ

質問

みなさんこんばんは。

現在、内作のアプリケーションの設計を行っているのですが、
そのアプリからは、将来的に百万ファイル単位のファイルを扱う
ファイルサーバを利用しようとしています。
(ファイルサーバのOSはWindows2003Serverを想定)

で、そのファイルサーバのフォルダ構成を考えているのですが、
上司から、
「ひとつのフォルダに一定数以上のファイルが存在していると、
そのフォルダへのファイルコピーが極端に遅くなることがあるから
検証したうえで設計するように」
と、指示を受けました。

・・それって本当かどうかご存知の方いらっしゃいますか。

また、本当だとするとどの程度のファイル数(またはファイル群の合計サイズ?)で
そういった現象が発生するのでしょうか。
(ネットで検索してみましたが、いまいちこれといった決め手の情報は
みつかりませんでした)

実際に試す前にシス蔵で聞いてみようと思い投稿いたしました!

よろしくお願いします。

6件の回答があります

回答

本当です。
ぱっとアドレスが見つけられませんでしたが、実経験もあります。
だいたい数万ぐらいのオーダーだったかな。
サイズじゃなくてファイルの数です。

なんにせよWindowsのファイルシステムはデータベースのような効率的なインデックスではなくファイル名の頭からソートなので、ファイル数は少なくしておいたほうが速いですね。
メモリ的な境界値を見つけたらまた書き込みます。

2009年08月25日 00時44分

回答

Windows でも Linux でも基本的には同じですね。
どの程度で発生するかという閾値みたいなものがあるという
感じはしませんが、数万を超えると Linux でいう i-node
情報の取得に時間がかかります。

あとそれとは別にサーバー側では

http://support.microsoft.com/kb/962965/ja

のような問題もあるのですね。クライアントで発生するかどうか
はわかりませんが、

http://forum.kasperskyclub.com/index.php?showtopic=3308

なんて問題も。

回答

「ひとつのフォルダに一定数以上のファイルが存在していると、
そのフォルダへのファイルコピーが極端に遅くなることがあるから
検証したうえで設計するように」

私もはじめて聞きました。
調べてみたら関係しそうな情報があったので紹介します。

詳細に関しては、何らかの手段で直接 Microsoft に尋ねるか、導入予定のサーバーベンダーを通して Microsoft に尋ねるのが良いかと思います。

※勤務先では、ライセンス購入を行っている関係で、 Microsoft の営業担当がいる関係で、購入前の事前相談・確認であれば、そのルートを使用します。もしくは、サーバーをDELLから購入する関係で、そちらにも質問をしたりします。

もし明確な回答が得られましたら、ご紹介していただけるようお願いいたします。

それと、導入予定のOSは「Windows Server 2003 R2」ですよね。メインストリーム サポート終了予定期限までは、1年を切っている状態です。あらかじめ、現在のWindowsで運用予定の期間を検討される事をお薦めします。
メインストリーム サポート終了日:2010 年 7 月 13 日
延長サポート終了日:2015 年 7 月 14 日

それと、ストレージの容量はどの程度を想定されているのでしょうか?
Windows Server 2008 以降で無ければ、2TBを越えるストレージの扱いは非常にやっかいになります。SCSI接続の場合でも、2TBを越えるボリュームはOSから認識出来ないため、あらかじめボリュームを分割しておくなどの設定が必要になったりします。
事前に、サーバーベンダーの方に相談されておく事をお薦めします。

2009年08月25日 01時08分

回答

詳しいことは知らないですけど、経験的にはそれは常識だと思っていました。
どの程度の数で、どの程度のスピード低下が発生するかは、おそらくファイルシステムや OS、システムリソースの状況で決まるのではないかな。
昔の PC環境は脆弱だったので、そういう状況に遭遇することは良くありました。
今は滅多にそんな状況を経験することはなくなりましたけども、基本的には同じことだと思いますよ。
フォルダに入れるファイルの数は、あまり多くしない方が安全です。
(アクセスするクライアントの種類によって、影響の受け方が違う場合もありうるので)

2009年08月25日 10時39分

回答

こんにちは。
私も恥ずかしながら経験しており、非常に痛い目を見ておりますのでご参考までに記載します。

ストレージをネットワークドライブとして複数サーバ(win2k3)に割当して運用していました。
◆環境(概要)
サーバ:win2k3(CPU:Xeon3.2GHz×4、RAM:4GB)
ネットワーク:FC(4Gb)
ストレージ:RAID 0+1
ディスク:73GB(15k)×15本

◆利用状況
影響が出たシステムでのストレージの主な利用内容は
 1)基幹系システムのアプリケーションの起動元ディスク。(共通ファイル)
 2)帳票ファイル(PDF)の保存。
 3)ログファイルの保存。
といった状況で、帳票についてはARCserveにてバックアップを別ストレージに取得してその後、テープ(LTO3)へバックアップする構成(D to D to T)でした。

◆障害状況
初めは帳票のバックアップの取得時間が24時間内に終了しない状況が発生しました。この状況の調査が終わらないうちに今度は「ネットワークの瞬断」が多発する様になり、帳票ファイルの書出中にエラーが頻発する様になりました。
また、帳票が保存されているフォルダへはエクスプローラからはアクセスできず、DOSプロンプトでないとファイルの確認も出来ない状況でした。
これにより基幹システムが異常終了するという最悪の状況となりました。
この時はアプリベンダー、ハードベンダーを巻き込んで対応にあたっておりましたが、なかなか原因が掴めずにいたのでサーバに1名張り付いた状況で異常終了が発覚すると修復するといったアナログな対応をするハメになりました。
因みにこの段階でDOSプロンプトにてファイル数を調査するとlogファイルは約150万、PDFも約150万の計300万ファイルに達していました。

◆主な対応
1)ネットワークドライブの接続をFQDNからIPアドレスへ変更。
2)ARCserveにサービスパックを適用。
 ハードベンダーから関連するサービスパックが公開されているとアナウンスあり。
3)帳票やログなどのファイルの書出と保存を分け、月次のバッチ処理で階層を上位にして且つ分散(年月)させ、同一フォルダの保存ファイル数が多くならないようにした。
 書出:z:\xxxx\xxxxx\xxxx\log(約150万)
    z:\xxxx\xxxxx\xxxx\pdf(約150万)
 保存:z:\oldlog\yyyymm(約10万)
    z:\old
pdf\yyyymm(約10万)

障害対応時は緊急事態だったこともあり、上記対応の「どの処理が効果的だった」かの検証は出来ておりません。

アドバイスとしては、利用状況にもよりますが、当方の対応にある3)のように「月次で別フォルダへ移動する。」などの方策が手っ取り早いかと思います。

回答

こんばんは。詳しいことはわかりませんが、
私も最近150GB(数百万ファイル)のデータをサーバ管理の一環で移動させたときに同じような経験をしました。だからそんなものだと思っています。

動作時の環境(メモリの使用量やCPU・ネットワークの負荷状況など
いろいろな要因があると思われますが)で、遅さが増すことがよくありましたし、ファイル数が数万を超えたくらいで目にみえて遅くなった感を実感しました。(フォルダの階層も関係しているような感じがします)
ひどいときは、VPNで繋がっていたネットワークが強制で切れてしまったり、コピーが完全でないなんてこともありました。(コピー元とコピー先のサイズを確認した結果です)

私の場合、表示されている完了予定の時間が30分を超える場合は、分割してコピーする方法に切り替えました。実際の完了が早かったです。
また、ドラックアンドドロップでのコピーよりも、
コマンドプロンプトでのxcopy(パラメータ指定あり)のほうが早く終わりました。

あなたもコメントしましょう!