我支持一个将文件存储在 Windows Server 2003 SP2 文件共享上的内部应用程序。由于当前配置的文件存储方式,一个文件夹中有 ~116,000 个文件(另一个文件夹有 ~65,000 个文件,其他文件夹的文件较少,但每个文件夹仍有几千个文件)。该应用程序写入文件的速度变得非常慢。
文件布局可配置为现有布局,所以我正在尝试制定一个更好的计划。有人知道 SMB 在开始变得不可用之前每个文件夹可以处理多少个项目吗?在这种情况下,它已经慢了很长一段时间,但直到文件夹超过 100,000 个文件时才开始变得不可用。
答案1
它更多地取决于带宽和延迟(尤其是延迟),而不是文件数量和用于枚举目录的算法的扩展。我想,没有“神奇的数字”,这就是我要说的。
SMB 协议是可怕因为需要大量的往返。如此多的文件,加上两倍的延迟,许多例如,速度慢两倍以上。
您偶然对 LAN、网络基础设施的延迟以及服务器计算机的 IO 子系统延迟进行了基准测试。您显然找到了一个“神奇数字”。我会缩减该目录,直到性能变得更好。没有其他办法!
答案2
Evan 是对的,没有神奇的数字。这取决于应用程序和服务器。升级到服务器 2008 会有所帮助,而且我会首先这样做,只要客户端是 Vista 或更高版本,因为它们使用 SMBv2。我有 500,000 个文件的共享,浏览起来很差,但由于用户只使用提供的直接路径,所以工作正常。在同一台服务器上,我有 100,000 个文件的共享,用户没有遇到任何问题。
答案3
部分相关:
停止‘上次访问更新’
每当您访问 NTFS 驱动器上的文件夹时,Windows XP 都会使用上次访问的时间戳更新该文件夹及其所有子文件夹。有时,这会降低 Windows 性能。
要更改此设置,请打开 REGEDIT(开始 -> 运行 ->'regedit')并导航到 HKEY_LOCAL_MACHINES\System\CurrentControlSet\Control\FileSystem
创建一个名为“NtfsDisableLastAccessUpdate”的新 DWORD 值(右键单击 -> 新建 -> DDWORD 值),并将值设置为“1”
和
禁用不必要的命名约定
对于创建的每个文件,Windows XP 使用一个附加名称以实现 MSDOS 兼容性:8 个字符的名称后跟一个“。”,然后是 3 个字符的扩展名。如果您不打算使用仅限 DOS 的软件,那么这会浪费内存。
要更改此设置,请打开 REGEDIT
导航到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem将 NtfsDisable8dot3NameCreation 项的值更改为“1”
( 取自http://basiccoms.blogspot.com/2008/08/windows-xp-performance-tweaking-guide.html)