如何调整Windows Server 2012 R2以处理包含5000万个文件的NTFS文件结构?

Modified on: Thu, 22 Aug 2019 15:40:02 +0800

我有一个开发人员实用程序,我将用它来生成5000万个文件。目录结构深入四级。顶级包含16个目录(2000 - 2016年),下一级 - 月(1-12),下一级 - 天(1 - 31),最后是 - xml文件(每个最多85k)。最终目录可能有3000多个文件(我还没有完成数学计算,以确定该目录结构中是否有50万个文件)。

我目前正在运行该实用程序,我大约需要1/3(执行天数)。正如我所担心的那样,遍历目录树的任何部分都是一种痛苦的经历。在浏览器中需要几秒钟。这与服务器级硬件。 SAS 7200RPM(我知道现在不是很快)12TB Raid 5或10,分配4个3.4ghz xeon cpus。

如何提高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

  

元文件详细信息:
  总计= 2,882,220 K,活跃= 2,736,688 K,待机= 143,968 K,修改= 852
  K,修改无写= 712 K。

此页面还有什么值得关注的内容?

此时服务器分配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
---------------
作者:,D-Klotz

最佳答案

您目前的MFT为0x320900000 = 13,431,209,984字节= 12 GiB,内存中只有2GiB。如果你想缓存更多的“文件句柄”,即文件系统元数据,更多的RAM将允许你在内存中拥有更多内容。

无论您使用何种文件系统,都会有元数据,根据文件系统的使用模式,您可能最好不要投资更多ram和/或更快的存储。如果将元文件​​信息的数量存储在RAM中并且文件使用模式通常处理新文件而不是重复使用较小的文件子集,那么元文件信息的数量是不现实的,那么更快的存储就像raid 10数组一样,具有许多镜像对以进行条带化可能需要更快的SSD和/或15K RPM SAS磁盘来限制寻道时间并增加存储可以处理的可用IOP数量。

请记住,Windows内存管理器的默认设置可能不适用于您的情况,您可能需要调整一些设置,特别是如果您没有计划拥有足够的RAM以使整个MFT适合RAM而不是系统的其余部分需要。我注意到几乎所有的元文件数据都被标记为活动内存,这意味着当不使用Windows缓存系统时,不允许将其从RAM中丢弃。我的powershell脚本Windows Server 2008 R2图元文件RAM使用可以使用(甚至在Server 2008到2012R2上,我希望2016年)设置标记为活动的元文件内存量的最小值和最大值,并强制其余的备用。这允许缓存系统更好地优先考虑RAM中的内容。

编辑:虽然我不熟悉jmeter,但听起来像文件系统使用模式将是

  1. 以顺序方式写下所有内容。
  2. 以大致顺序的方式尽快读取所有内容
  3. 以部分随机模式第二次读取它们(当每个线程竞争读取它想要的文件组时)通过网络发送它们
  4. 醇>

    使用这种使用模式,要想看到添加更多ram的合理好处,您需要添加足够的内容以适应RAM中的整个MFT。这通常是浪费钱。如果增加更多的RAM会更具成本效益,并且升级存储以显着改善IOP。这应该比保持一个缓慢的7.2K rpm磁盘raid5阵列,或者甚至是只有4个具有大量ram的磁盘的raid10更快,因为元数据不是从存储器读取/写入的唯一数据。请参阅此计算器作为预期IOP性能的估算工具,以及不同数量的磁盘和raid级别如何影响性能。

    在上面的例子中,添加更多ram的唯一方法比使用具有更快存储的系统更快,如果你添加足够的ram,所有数据,包括文件内容也将在ram中。这就是为什么一些数据库系统宣称他们“100%在内存中”运行,以便没有存储系统延迟。


相关问答

添加新评论