Vous pouvez grouper les fichiers de données d'une base dans des groupes de fichiers (filegroup) pour les opérations d'administration et d'allocation. Dans certains cas, les performances peuvent être améliorées en contrôlant le placement des données et des indexes dans des groupes spécifiques sur des disques spécifiques. Trois types de groupes de fichiers sont gérés:
La plupart des bases de données SQL Server ont un seul fichier de données dans un groupe (par défaut). La plupart des utilisateurs ne connaissent pas cette notion de groupe de fichiers.
Pourquoi utiliser plusieurs fichiers?Il n'y a aucun aspect de performance. Cependant, cela permet d'être plus flexible sur deux axes.
Premièrement, si vous devez restaurer une base depuis une unité suite à un crash, vous devez respecter le même nombre de fichiers que la base originale. Par exemple, si la base est constituée d'un seul fichier de 12 GB, il faut créer un fichier de cette taille. Si vous n'avez pas de disque de cette taille, vous ne pouvez pas restaurer la base. Cependant, si la base est constituée de plusieurs fichiers de plus petite taille, vous pouvez les répartir sur des disque de 4 GB.
Deuxièmement, répartir une base sur plusieurs fichiers, même sur un seul disque permet de déplacer la base sur d'autres disques si la configuration matérielle change dans le futur. Le système SAP de Microsoft utilise 7 base de données créées sur 12 fichiers. Ces fichiers peuvent être séparés en deux groupes de 6, six groupes de deux, quatre groupes de trois, etc. Cela permet de tester les performances si les fichiers sont répartis sur des disques différents.
Les DBAs plus sophistiqués peuvent décider d'avoir différentes tables sur différents lecteurs. Alors, ils ont besoin d'utiliser les groupes de fichiers. La méthode la plus simple est d'utiliser SQL Server Enterprise Manager pour créer la base, sans avoir à connaître la syntaxe des groupes de fichier. Seuls les utilisateurs qui écrivent des scripts avec des groupes multiples ont à en connaître les détails internes.
Vous pouvez utiliser les groupes de fichiers pour permettre la sauvegarde d'une seul partie de la base de données. Cependant, si vous créez un index dans un groupe différent dans lequel la table réside, vous devrez sauvegarder les deux groupes. (Le groupe contenant la table et le groupe contenant l'index). Si vous créez plus d'un index dans un autre groupe, vous devrez les sauvegarder tous. La commande BACKUP détecte toutes ces situations et informe l'utilisateur des groupes minimum à sauvegarder.
Lors de l'ajout d'espace à des objets stockés dans un groupe particulier, la donnée est stockée proportionnellement, ce qui veut dire que si vous avez un fichier dans un groupe avec deux fois plus d'espace libre qu'un autre, le premier aura deux extends (ou unités d'espace) alloués pour chaque extend alloué depuis le second fichier.
Cet exemple créé un base nommée sales avec trois groupes:
CREATE DATABASE Sales ON PRIMARY ( NAME = SPri1_dat, FILENAME = 'c:\mssql7\data\SPri1dat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15% ), ( NAME = SPri2_dat, FILENAME = 'c:\mssql7\data\SPri2dat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15% ), FILEGROUP SalesGroup1 ( NAME = SGrp1Fi1_dat, FILENAME = 'c:\mssql7\data\SG1Fi1dt.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), ( NAME = SGrp1Fi2_dat, FILENAME = 'c:\mssql7\data\SG1Fi2dt.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), FILEGROUP SalesGroup2 ( NAME = SGrp2Fi1_dat, FILENAME = 'c:\mssql7\data\SG2Fi1dt.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), ( NAME = SGrp2Fi2_dat, FILENAME = 'c:\mssql7\data\SG2Fi2dt.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Sales_log', FILENAME = 'c:\mssql7\data\saleslog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) |