web-dev-qa-db-fra.com

SQL Server Split MDF en plusieurs fichiers

J'ai une base de données appelée example.mdf Avec une taille totale de 1 Go, qui souffre de problèmes de performance. J'ai vérifié le matériel alloué et il est plus élevé que nécessaire, j'ai vérifié la conception et tout ressemble à la normale, quand je regarde le .mdf Fichiers dans leur emplacement physique (C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\example.mdf) J'ai trouvé que la base de données est divisée en plusieurs fichiers example_1.mdf, example_2.mdf, example_3.mdf, Jusqu'à example_7.mdf.

J'ai un autre fichier de base de données sur le même serveur SQL qui a le même problème.

Pourquoi cela arrive-t-il? Cela affecte-t-il la performance? Comment puis-je empêcher ou arrêter SQL Server de fractionnez mon .mdf des dossiers? De plus, j'ai besoin de combiner les fichiers déjà divisés.

4
Mohamed Sawaf

Qui a déjà créé la base de données a fait cela exprès. En supposant que tous les fichiers de base de données font partie du même groupe de fichiers (les propriétés de la base de données vous le diront), tout ce que vous avez à faire est de faire un fichier de retrait DBCC tout utilise le paramètre VILEFILE.

DBCC SHRINKFILE (Example_1, EMPTYFILE)
GO
ALTER DATABASE MyDatabase REMOVE FILE Example_1
GO

Faites cela pour chacun des fichiers et toutes les données seront remises dans un seul fichier. Vous pouvez ensuite supprimer les fichiers supplémentaires.

Maintenant, les cotes ne font pas mal de votre performance. Vous devrez donc continuer à enquêter sur la raison pour laquelle vous rencontrez des problèmes de performance.

8
mrdenny

Vous souhaitez recombiner les fichiers car vous pensez que c'est la cause de votre problème de performance. Avez-vous une preuve que c'est en fait?

Il est beaucoup plus probable que le problème soit ailleurs, car la distribution d'une base de données sur plusieurs fichiers augmente réellement les performances dans de nombreux cas.

Choses à regarder d'abord:

  1. avez-vous des index appropriés
  2. utilisez-vous des curseurs dans vos questions
  3. vos questions sont-elles écrites d'une manière qui empêcherait l'utilisation de l'index
  4. votre serveur est-il réellement assez grand pour gérer la charge. Cependant, il s'agit d'une très petite base de données, il est donc probable que votre matériel ne soit pas le problème.

Si vous avez examiné tout cela et que vous pensez toujours que le fichier Splitt est votre problème, vous pouvez suivre ces étapes:

  1. Ajoutez un nouveau fichier assez grand pour contenir l'intégralité des données.
  2. définissez tous les fichiers d'origine sur PAS AUTOGROW.
  3. réduire chaque fichier original 1 à la fois avec "Libérer de l'espace inutilisé"
  4. réduisez chaque fichier d'origine 1 à la fois avec "fichier vide et migrer des données", puis déposez le fichier avant de réduire la suivante.
  5. Exécutez un indice de reconstruction sur chaque index de la base de données pour réduire la fragmentation causée par la migration.

Cependant, assurez-vous de ne pas avoir besoin des fichiers. Quelqu'un aurait pu créer des groupes de fichiers pour permettre la partition. Dans ce cas, vous ne pouvez pas combiner les fichiers sans d'abord déplacer toutes les tableaux et les partitions des autres groupes de fichiers au groupe de fichiers principaux.

3
Sebastian Meine

Les extensions .MDF ne comptent pas vraiment et le même cas avec des extensions .ndf/.ldf. Le fichier principal/fichier secondaire/fichier journal peut avoir une extension (quelque chose comme .xyz)

Et non, ce n'est pas SQL Server qui a créé plusieurs fichiers de données.

Pour plus de clarté, reportez-vous ici: ne base de données peut-elle avoir plus d'un fichier MDF?

Si vous souhaitez supprimer les fichiers de données/fichiers de données supplémentaires, veuillez vous reporter à ce message: Comment supprimer des fichiers de données supplémentaires TEMPDB supplémentaires et des fichiers journaux

0
user23550