Base de données avec plusieurs fichiers .mdf


10

J'ai cherché en ligne mais je n'ai pas trouvé ce que je cherchais.

Le problème / la requête est à ma connaissance qu'une base de données dans SQL Server devrait avoir un fichier .mdf et peut-être quelques fichiers .ndf et un fichier .log.

J'ai vu de nombreuses bases de données avec un mdf et plusieurs fichiers ndf. Mais récemment, je suis tombé sur une base de données sur un serveur où chaque base de données avait plusieurs fichiers mdf.

J'ai pris une copie de sauvegarde d'une base de données les a déplacés vers un autre serveur et restauré le fichier primaire en tant que .mdf et tous les autres fichiers en tant que .ndf, sauf le fichier journal, il a été restauré en tant que .log.

Maintenant mes questions sont:

  1. Est-il judicieux d'avoir plusieurs fichiers .mdf pour une base de données?
  2. Y a-t-il des inconvénients à avoir plusieurs fichiers .mdf?

C'était SQL Server 2008 R2 64bit Enterprise Edition

Tout conseil ou pointeur dans la bonne direction est très apprécié. Je vous remercie.

Réponses:


14

Mais récemment, je suis tombé sur une base de données sur un serveur où chaque base de données avait plusieurs fichiers mdf.

Cela est dû à une convention de dénomination incorrecte. Microsoft dit que chaque base de données a un fichier de données principal mais cela ne signifie pas qu'elle ne peut avoir qu'un seul "fichier de données mdf", la base de données peut avoir de nombreux fichiers de données avec une .mdfextension mais un seul sera le fichier de données principal. Il est préférable de donner une mdfextension au fichier de données principal et ndfau fichier de données secondaire pour avoir une démarcation correcte, mais ce n'est pas une règle stricte et rapide, vous pouvez également donner l'extension .abc au fichier de données principal, de sorte que ce dont vous avez été témoin est normal. En fait, vous pouvez donner n'importe quelle extension que vous souhaitez.

Est-il judicieux d'avoir plusieurs fichiers .mdf pour une base de données?

Si tu veux dire:

Est-il judicieux d'avoir plusieurs fichiers primaires pour une base de données?

La réponse est non, une base de données ne peut avoir qu'un seul fichier de données principal.

Mais si tu veux dire:

Est-il judicieux d' avoir plusieurs fichiers de données (.mdf, .ndf ou autrement nommé) pour une base de données?

Cela dépend, vous pouvez et ne pouvez pas avoir d'avantage avec plusieurs fichiers de données. S'ils sont répartis sur différents disques physiques (je parle de broches), vous verriez un avantage avec une application intensive en écriture. S'ils sont tous sur les mêmes partitions logiques, cela n'aura aucun avantage car sous-jacents, ils utiliseraient des ressources communes. L'utilisation de fichiers et de groupes de fichiers améliore les performances de la base de données, car elle permet de créer une base de données sur plusieurs disques, plusieurs contrôleurs de disque ou des systèmes RAID (tableau redondant de disques indépendants). Par exemple, si votre ordinateur dispose de quatre disques, vous pouvez créer une base de données composée de trois fichiers de données et d'un fichier journal, avec un fichier sur chaque disque. Lorsque les données sont accessibles, quatre têtes de lecture / écriture peuvent accéder aux données en parallèle en même temps.

Selon cet article MSDN BOL

Les groupes de fichiers utilisent une stratégie de remplissage proportionnel sur tous les fichiers de chaque groupe de fichiers. Lorsque les données sont écrites dans le groupe de fichiers, le moteur de base de données SQL Server écrit une quantité proportionnelle à l'espace libre dans le fichier dans chaque fichier du groupe de fichiers, au lieu d'écrire toutes les données dans le premier fichier jusqu'à ce qu'elles soient complètes. Il écrit ensuite dans le fichier suivant. Par exemple, si le fichier f1 dispose de 100 Mo d'espace libre et le fichier f2 de 200 Mo d'espace libre, une extension est allouée à partir du fichier f1, deux extensions à partir du fichier f2, etc. De cette façon, les deux fichiers deviennent pleins à peu près en même temps et une répartition simple est obtenue.

Un autre avantage que je connais est de considérer une base de données de 1 To si vous avez un seul fichier de données et que vous souhaitez restaurer cette base de données sur un autre serveur, il est très peu probable que vous disposiez de 1 To d'espace libre. Maintenant, si la même base de données est répartie sur différents fichiers ayant chacun une taille de 250 G, la restauration devient plus facile. Ce n'est peut-être pas vraiment votre scénario, mais cela aide beaucoup son peu facile de trouver un serveur avec quatre disques 250 G qu'un disque 1 To

Je dirais qu'au lieu de nombreux fichiers de données, il vaut mieux avoir différents groupes de fichiers, mais là encore, il n'y a pas beaucoup d'environnements. Les bases de données composées de plusieurs groupes de fichiers peuvent être restaurées par étapes par un processus appelé restauration fragmentaire. La restauration fragmentaire fonctionne avec tous les modèles de récupération, mais est plus flexible pour les modèles complets et enregistrés en masse que pour le mode simple. Les fichiers ou groupes de fichiers d'une base de données peuvent être sauvegardés et restaurés individuellement. Cela vous permet de restaurer uniquement les fichiers endommagés sans avoir à restaurer le reste de la base de données. Les fichiers d'une sauvegarde de groupe de fichiers peuvent être restaurés individuellement ou en groupe


Si DB a plus d'un fichier, les fichiers de données, c'est-à-dire ndf et primaire, c'est-à-dire toujours par défaut. Avec cela, si l'un des fichiers DB utilisé pour créer des tables / index dessus, crée-t-il des performances par-dessus la tête? Je veux dire que le groupe de fichiers par défaut est toujours principal mais la table et les index créés sont sur des fichiers de données.
Hi10
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.