Meilleures pratiques pour FILESTREAM
Cette rubrique présente les meilleures pratiques recommandées pour l'utilisation de FILESTREAM.
Configuration et maintenance physiques
Lorsque vous configurez des volumes de stockage FILESTREAM, prenez en compte les recommandations suivantes :
Désactivez les noms de fichiers courts sur les systèmes informatiques FILESTREAM. La création de noms de fichiers courts demande beaucoup plus de temps. Pour désactiver les noms de fichiers courts, servez-vous de l'utilitaire Windows fsutil.
Défragmentez régulièrement les systèmes informatiques FILESTREAM.
Utilisez des clusters NTFS de 64 Ko. Les volumes compressés doivent être définis à l'aide de clusters NTFS de 4 Ko.
Désactivez l'indexation sur les volumes FILESTREAM et définissez disablelastaccess. Pour définir disablelastaccess, servez-vous de l'utilitaire Windows fsutil.
Désactivez l'analyse antivirus des volumes FILESTREAM lorsqu'elle n'est pas nécessaire. Si l'analyse antivirus est nécessaire, évitez de définir des stratégies qui suppriment automatiquement les fichiers incriminés.
Configurez et paramétrez le niveau RAID pour la tolérance de panne et en fonction des performances requises par une application.
Niveau RAID |
Performances en écriture |
Performances en lecture |
Tolérance de panne |
Notes |
RAID 5 |
Normales |
Normales |
Excellentes |
Les performances sont meilleures qu'avec un seul disque ou une simple concaténation de disques mais elles sont moins importantes qu'avec un niveau RAID 0 ou RAID 5 utilisant l'agrégation par bandes. |
RAID 0 |
Excellentes |
Excellentes |
Aucune |
|
RAID 5 + agrégation par bandes |
Excellentes |
Excellentes |
Excellentes |
Option la plus chère. |
Conception de base de données physique
Lorsque vous concevez une base de données FILESTREAM, prenez en compte les recommandations suivantes :
Les colonnes FILESTREAM doivent être accompagnées d'une colonne ROWGUID uniqueidentifier correspondante. Ces types de tables doivent également être accompagnés d'un index unique. En règle générale, cet index n'est pas un index cluster. Si la logique métier des bases de données requiert un index cluster, vous devez vous assurer que les valeurs stockées dans l'index ne sont pas aléatoires. Les valeurs aléatoires entraînent une réorganisation de l'index chaque fois qu'une ligne est ajoutée ou supprimée dans la table.
Pour des raisons de performances, les groupes de fichiers et conteneurs FILESTREAM doivent résider sur d'autres volumes que ceux du système d'exploitation, de la base de données SQL Server, du journal SQL Server, de la base de données tempdb ou du fichier de pagination.
La gestion de l'espace et les stratégies ne sont pas prises en charge directement par FILESTREAM. Toutefois, vous pouvez gérer l'espace et appliquer des stratégies de manière indirecte en affectant chaque groupe de fichiers FILESTREAM à un volume distinct et en utilisant les fonctionnalités de gestion du volume.
Conception et implémentation d'applications
Lorsque vous concevez et implémentez des applications qui utilisent FILESTREAM, prenez en compte les recommandations suivantes :
Utilisez NULL au lieu de 0x pour représenter une colonne FILESTREAM non initialisée. La valeur 0x entraîne la création d'un fichier, contrairement à la valeur NULL.
Évitez les opérations d'insertion et de suppression dans les tables qui contiennent des colonnes FILESTREAM non Null. Les opérations d'insertion et de suppression peuvent modifier les tables FILESTREAM utilisées pour le garbage collection. Cela peut provoquer une dégradation des performances d'une application dans le temps.
Dans les applications qui ont recours à la réplication, utilisez NEWSEQUENTIALID() au lieu de NEWID(). NEWSEQUENTIALID() est plus performant que NEWID() pour la génération de GUID dans ces applications.
L'API FILESTREAM est conçue pour l'accès en continu Win32 aux données. Évitez d'utiliser Transact-SQL pour lire ou écrire des objets blob FILESTREAM de plus de 2 Mo. Si vous devez lire ou écrire des données BLOB à l'aide de Transact-SQL, assurez-vous que toutes les données BLOB sont consommées avant d'essayer d'ouvrir l'objet blob FILESTREAM à partir de Win32. Si toutes les données Transact-SQL ne sont pas consommées, cela peut provoquer l'échec des opérations FILESTREAM d'ouverture ou de fermeture successives.
Évitez les instructions Transact-SQL qui permettent de mettre à jour ou d'ajouter des données à l'objet blob FILESTREAM. En effet, les données BLOB sont mises en file d'attente dans la base de données tempdb, puis retournées dans un nouveau fichier physique.
Évitez d'ajouter de petites mises à jour BLOB à un objet blob FILESTREAM. Chaque ajout entraîne la copie des fichiers FILESTREAM sous-jacents. Si une application doit ajouter de petits objets blob, écrivez ces derniers dans une colonne varbinary(max), puis effectuez une opération d'écriture unique dans l'objet blob FILESTREAM lorsque le nombre d'objets blob atteint une limite prédéterminée.
Évitez de récupérer la longueur des données de nombreux fichiers BLOB dans une application. Il s'agit d'une opération qui prend du temps, car la taille n'est pas stockée dans le moteur de base de données SQL Server. Pour déterminer la longueur d'un fichier BLOB, utilisez la fonction Transact-SQL DATALENGTH() afin de déterminer la taille du fichier BLOB, s'il est fermé. DATALENGTH() n'ouvre pas le fichier BLOB pour déterminer sa taille.
Si une application utilise le protocole SMB1 (Message Block1), les données BLOB FILESTREAM doivent être lues par multiples de 60 Ko pour optimiser les performances.