Admito una aplicación interna que almacena archivos en un recurso compartido de archivos de Windows Server 2003 SP2. Debido a cómo está configurado actualmente para almacenar archivos, una carpeta tiene ~116 000 archivos (otra tiene ~65 000 y las otras carpetas tienen menos, pero todavía varios miles en cada una). La aplicación se ha vuelto muy lenta para escribir archivos.
El diseño del archivo se puede configurar hasta cierto punto, por lo que estoy tratando de idear un plan mejor. ¿Alguien tiene alguna experiencia sobre cuántos elementos por carpeta puede manejar SMB antes de que comience a quedar inutilizable? En este caso, ha estado lento durante bastante tiempo, pero no empezó a volverse insoportable hasta que la carpeta superó los 100.000 archivos.
Respuesta1
Depende más del ancho de banda y la latencia (especialmente la latencia) que de la cantidad de archivos y la escala de los algoritmos que se utilizan para enumerar el directorio. Supongo que no existe un "número mágico", es lo que estoy diciendo.
El protocolo SMB eshorriblepor requerir muchísimos viajes de ida y vuelta. Esa cantidad de archivos, con el doble de latencia, seríamuchosveces más del doble de lento, por ejemplo.
Ha realizado la evaluación comparativa por accidente para su LAN, la latencia de su infraestructura de red y la latencia del subsistema IO de su computadora servidor. Obviamente has encontrado un "número mágico". Reduciría ese directorio hasta que el rendimiento mejore. ¡No hay otra manera!
Respuesta2
Evan tiene razón, no existe un número mágico. Depende de la aplicación y del servidor. Actualizar al servidor 2008 ayudará, y es lo primero que haría, siempre y cuando el cliente sea Vista o mejor, ya que usa SMBv2. Tengo recursos compartidos que tienen 500.000 archivos que navegan como una mierda pero, dado que los usuarios solo usan las rutas directas proporcionadas, funcionan bien. En el mismo servidor tengo recursos compartidos con 100.000 archivos con los que los usuarios no tienen problemas.
Respuesta3
Parcialmente relacionado:
Detener la 'última actualización de acceso'
Cada vez que accede a una carpeta en una unidad NTFS, Windows XP actualiza esa carpeta y todas las subcarpetas con una marca de tiempo con la fecha del último acceso. A veces, esto puede ralentizar el rendimiento de Windows.
Para cambiar esto, abra REGEDIT (Inicio -> Ejecutar -> 'regedit') y navegue hasta HKEY_LOCAL_MACHINES\System\CurrentControlSet\Control\FileSystem
Cree un nuevo valor DWORD (clic derecho -> nuevo -> Valor DDWORD) llamado 'NtfsDisableLastAccessUpdate' y establezca el valor en '1'
y
Deshabilitar convención de nomenclatura innecesaria
Para cada archivo creado, Windows XP utiliza un nombre adicional para compatibilidad con MSDOS: nombre de 8 caracteres seguido de un ".", luego 3 caracteres para la extensión. Si no tiene la intención de utilizar software exclusivo para DOS, esto es una pérdida de memoria.
Para cambiar esto, abra REGEDIT.
Vaya a HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem.Cambie el valor de la clave NtfsDisable8dot3NameCreation a '1'
( tomado dehttp://basiccoms.blogspot.com/2008/08/windows-xp-performance-tweaking-guide.html)