web-dev-qa-db-ja.com

Windowsサーバー2012 R2を調整して、5000万ファイルのNTFSファイル構造を処理するにはどうすればよいですか?

5,000万のファイルを生成するために使用する開発者ユーティリティがあります。ディレクトリ構造は4レベルの深さになります。トップレベルには、16個のディレクトリ(2000〜2016年)、次のレベル-月(1〜12)、次のレベル-日(1〜31)、最後にxmlファイル(それぞれ最大85k)が含まれます。最終的なディレクトリには3000以上のファイルが含まれる可能性があります(そのディレクトリ構造内で5000万がどのように収まるかを計算するための計算は行っていません)。

現在、ユーティリティを実行しており、実行時間の約1/3(実行までの日数)です。私が恐れていたように、ディレクトリツリーの任意の部分をたどるのは苦痛な経験です。 Explorer内で数秒かかります。これはサーバーグレードのハードウェアで。 SAS 7200RPM(これは最近は高速ではないことを知っています)12テラバイトのRAID 5または10、4つの3.4GHzのXeon CPUが割り当てられています。

Windows Server 2012 R2でファイルハンドルをメモリにキャッシュする機能を増やすにはどうすればよいですか? NFSサービスを実行していません。


M:\>defrag /a /v /h m:
Microsoft Drive Optimizer
Copyright (c) 2013 Microsoft Corp.

Invoking slab consolidation on DB MDF (M:)...


The operation completed successfully.

Post Defragmentation Report:

    Volume Information:
            Volume size                 = 12.99 TB
            Cluster size                = 64 KB
            Used space                  = 1.55 TB
            Free space                  = 11.44 TB

    Slab Consolidation:
            Space efficiency            = 100%
            Potential purgable slabs    = 1

M:\>

C:\Windows\system32>fsutil fsinfo ntfsinfo m:
NTFS Volume Serial Number :       0x9c60357c60355de8
NTFS Version   :                  3.1
LFS Version    :                  2.0
Number Sectors :                  0x000000067ffbefff
Total Clusters :                  0x000000000cfff7df
Free Clusters  :                  0x000000000b6bcb45
Total Reserved :                  0x0000000000000004
Bytes Per Sector  :               512
Bytes Per Physical Sector :       4096
Bytes Per Cluster :               65536
Bytes Per FileRecord Segment    : 1024
Clusters Per FileRecord Segment : 0
Mft Valid Data Length :           0x0000000320900000
Mft Start Lcn  :                  0x000000000000c000
Mft2 Start Lcn :                  0x0000000000000001
Mft Zone Start :                  0x00000000018f8780
Mft Zone End   :                  0x00000000018f9420
Resource Manager Identifier :     A47067E0-6356-11E6-8

C:\Windows\system32>

Rammap

メタファイルの詳細:Total = 2,882,220 K、Active = 2,736,688 K、Standby = 143,968 K、Modified = 852 K、Modified no write = 712K。

このページで他に何が興味深いでしょうか?

この時点で、サーバーには16Gのメモリが割り当てられています。私はもっ​​ともっと頼むことができました。


C:\Windows\system32>fsutil.exe 8dot3name query m:
The volume state is: 1 (8dot3 name creation is disabled).
The registry state is: 2 (Per volume setting - the default).

Based on the above two settings, 8dot3 name creation is disabled on m:

C:\Windows\system32>

Contig v1.8 - Contig
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals

m:\$Mft is in 80 fragments
m:\$Mft::$BITMAP is in 32 fragments

Summary:
     Number of files processed:      2
     Number unsuccessfully procesed: 0
     Average fragmentation       : 56 frags/file

NtfsInfo v1.2 - NTFS Information Dump
Copyright (C) 2005-2016 Mark Russinovich
Sysinternals - www.sysinternals.com


Volume Size
-----------
Volume size            : 13631357 MB
Total sectors          : 27917021183
Total clusters         : 218101727
Free clusters          : 184577826
Free space             : 11536114 MB (84% of drive)

Allocation Size
----------------
Bytes per sector       : 512
Bytes per cluster      : 65536
Bytes per MFT record   : 0
Clusters per MFT record: 0

MFT Information
---------------
MFT size               : 16210 MB (0% of drive)
MFT start cluster      : 49152
MFT zone clusters      : 33255616 - 33258848
MFT zone size          : 202 MB (0% of drive)
MFT mirror start       : 1

Meta-Data files
---------------
6
D-Klotz

現在、MFTは0x320900000 = 13,431,209,984バイト= 12 GiBサイズで、メモリには2GiBしかありません。より多くのRAMにより、メモリ内にある「ファイルハンドル」、つまりファイルシステムメタデータのキャッシュを増やしたい場合。

使用するファイルシステムに関係なく、メタデータが存在します。ファイルシステムの使用パターンによっては、より多くのRAMおよび/またはより高速のストレージに投資した方がよい場合があります。すべてのメタファイル情報をRAMに格納するのが現実的ではなく、ファイルの使用パターンが通常、新しいファイルの小さいサブセットを繰り返し使用するのではなく、新しいファイルを処理している場合、raid 10のような高速ストレージより高速なSSDおよび/または15K RPMから作成された、ストライプ化する多くのミラーペアを持つアレイSASディスク、シーク時間を制限し、ストレージが処理できる利用可能なIOPの量を増やすために必要になる場合があります。

Windowsメモリマネージャーのデフォルト設定は状況に適用されない場合があり、特にMFT全体を収めるのに十分なRAMを計画していない場合は、いくつかの設定を調整する必要がある場合があることに注意してください。 RAMシステムの残りの部分に加えて、メタファイルデータのほぼすべてがアクティブメモリとしてマークされていることに気づきました。つまり、Windowsキャッシュシステムはそれを破棄できません= RAM使用されていない場合。Powershellスクリプト Windows Server 2008 R2 Metafile RAM Usage を使用できます(サーバー上でも2008から2012R2、および2016)は、アクティブとしてマークされたメタファイルメモリの量に最小値と最大値を設定し、残りを強制的にスタンバイにします。これにより、キャッシュシステムは、RAM良いです。

編集:私はjmeterに精通していませんが、ファイルシステムの使用パターンは

  1. それらをすべて順番に書き込みます。
  2. ほとんど順番に、できる限り速くそれらをすべて読む
  3. (各スレッドが必要なファイルのグループを読み取るために競合するため)部分的にランダムなパターンでそれらをもう一度読み取り、ネットワーク経由で送信する

その使用パターンでは、RAMにLOTを追加することの妥当な利点を確認するには、MFT全体をRAMに収めるのに十分な量を追加する必要があります。これは一般にお金の無駄です。 RAMをもう少し追加し、ストレージをアップグレードしてIOPを大幅に改善する方がコスト効率が高い場合。これは、低速の7.2K rpmディスクraid5アレイ、または巨大な量のRAMを備えた4つのディスクのみで作成されたraid10を維持するよりも高速である必要があります。予想されるIOPパフォーマンス、およびディスクの数とRAIDレベルの違いがパフォーマンスにどのように影響するかを推定するツールとして、 この計算機 を参照してください。

上記の場合、より高速のストレージを備えたシステムを使用するよりもさらに多くのRAMを追加することができる唯一の方法は、ファイルコンテンツを含むすべてのデータもRAMに含まれる十分なRAMを追加することです。これが、一部のデータベースシステムが「メモリ内で100%」動作することを通知し、ストレージシステムの遅延がないことを通知する理由です。

6
BeowulfNode42