Prácticas recomendadas para FILESTREAM

En este tema se proporcionan prácticas recomendadas para el uso de FILESTREAM.

Configuración física y mantenimiento

Cuando instale volúmenes de almacenamiento FILESTREAM, tenga en cuenta las directrices siguientes:

  • Desactive la opción de nombres cortos de archivo en equipos FILESTREAM. Los nombres cortos de archivo requieren mucho más tiempo para su creación. Para deshabilitar la opción de nombres cortos de archivo, emplee la utilidad fsutil de Windows.

  • Desfragmente periódicamente los equipos FILESTREAM.

  • Use clústeres NTFS de 64 KB. Los volúmenes comprimidos deben establecerse en clústeres NTFS de 4 KB.

  • Deshabilite la indización en volúmenes FILESTREAM y establezca disablelastaccess. Para establecer disablelastaccess, emplee la utilidad fsutil de Windows.

  • Deshabilite el análisis del antivirus de volúmenes FILESTREAM cuando no sea necesario. Cuando el análisis del antivirus sea necesario, evite el establecimiento de directivas que eliminen automáticamente los archivos causantes del problema.

  • Configure y ajuste el nivel RAID que proporcione la tolerancia a errores y el rendimiento requeridos por una aplicación.

Nivel RAID

Rendimiento de escritura

Rendimiento de lectura

Tolerancia a errores

Observaciones

RAID 5

Normal

Normal

Excelente

El rendimiento es mejor que en el caso de un disco o JBOD y menor que RAID 0 o RAID 5 con creación de bandas.

RAID 0

Excelente

Excelente

Ninguna

RAID 5 con creación de bandas

Excelente

Excelente

Excelente

Opción más cara.

Diseño físico de base de datos

Cuando diseñe una base de datos de FILESTREAM, tenga en cuenta las directrices siguientes:

  • Las columnas FILESTREAM deben ir acompañadas de una columna ROWGUID uniqueidentifier correspondiente. Estos tipos de tablas también deben ir acompañados de un índice único. Normalmente, este índice no es un índice clúster. Si la lógica de negocios de bases de datos requiere un índice clúster, debe asegurarse de que los valores almacenados en el índice no sean aleatorios. Los valores aleatorios harán que el índice se vuelva a ordenar cada vez que se agregue o se quite una fila en la tabla.

  • Por razones de rendimiento, los contenedores y grupos de archivos FILESTREAM deben residir en volúmenes distintos del sistema operativo, base de datos de SQL Server, registro de SQL Server, tempdb o archivo de paginación.

  • FILESTREAM no admite directamente la aplicación de directivas ni la administración del espacio. Sin embargo, es posible administrar el espacio y aplicar directivas indirectamente mediante la asignación de cada grupo de archivos FILESTREAM a un volumen independiente y usando las características de administración del volumen.

Diseño e implementación de aplicaciones

  • Cuando diseñe e implemente aplicaciones que usen FILESTREAM, tenga en cuenta las directrices siguientes:

  • Use NULL en lugar de 0x para representar una columna FILESTREAM no inicializada. El valor 0x hace que se cree un archivo, mientras que el valor NULL no.

  • Evite operaciones de inserción y eliminación en tablas que contengan columnas FILESTREAM que no admitan valores NULL. Las operaciones de inserción y eliminación pueden modificar las tablas FILESTREAM que se usan para la recolección de elementos no utilizados. Esto puede producir el descenso del rendimiento de una aplicación a lo largo del tiempo.

  • En aplicaciones que usan la replicación, use NEWSEQUENTIALID() en lugar de NEWID(). NEWSEQUENTIALID() se comporta mejor que NEWID() para la generación de identificadores GUID en estas aplicaciones.

  • La API de FILESTREAM está diseñada para el acceso de transmisión por secuencias de Win32 a datos. Evite el uso de Transact-SQL para leer o escribir objetos binarios grandes (BLOB) de FILESTREAM superiores a 2 MB. Si debe leer o escribir datos de BLOB desde Transact-SQL, asegúrese de que todos los datos de BLOB se utilicen antes de intentar abrir los BLOB de FILESTREAM desde Win32. Si no se utilizan todos los datos de Transact-SQL, puede que se produzcan errores en las operaciones sucesivas de apertura y cierre de FILESTREAM.

  • Evite el uso de instrucciones Transact-SQL que actualicen, anexen o antepongan datos al BLOB de FILESTREAM. Esto hace que los datos de BLOB se coloquen en la cola de la base de datos tempdb y luego vuelvan a hacerlo en un nuevo archivo físico.

  • Evite anexar actualizaciones de BLOB pequeños a un BLOB de FILESTREAM. Cada anexión hace que se copien los archivos FILESTREAM subyacentes. Si una aplicación tiene que anexar BLOB pequeños, escríbalos en una columna varbinary(max) y, a continuación, realice una sola operación de escritura en el BLOB de FILESTREAM cuando el número de BLOB alcance el límite predeterminado.

  • Evite recuperar la longitud de datos de numerosos archivos BLOB en una aplicación. Esta operación consume mucho tiempo porque el tamaño no se almacena en el SQL Server Database Engine (Motor de base de datos de SQL Server). Si debe determinar la longitud de un archivo BLOB, use la función DATALENGTH() de Transact-SQL para determinar el tamaño del BLOB si está cerrado. DATALENGTH() no abre el archivo BLOB para determinar su tamaño.

  • Si una aplicación usa el protocolo SMB1 (Bloque de mensajes 1), los datos de BLOB de FILESTREAM se deben leer en múltiplos de 60 KB para optimizar el rendimiento.

Vea también

Conceptos