web-dev-qa-db-fra.com

Erreur sur Select - Le groupe de fichiers primaire est plein

Une base de données SQL Server 2008 R2 Afficher les syndicats de plusieurs transactions. La requête a été lente au cours des deux mois et l'équipe DEV envisage de recréer la requête. J'ai besoin d'ETL les résultats dans un fichier plat et de les purger de la DB. Lorsque j'ai essayé d'interroger la vue (d'enregistrements de 5 m), cette erreur s'est produite:

MSG 1105, niveau 17, État 2, ligne 1
[ Créez un espace disque en supprimant des fichiers inutiles, déposez des objets dans le groupe de fichiers, en ajoutant des fichiers supplémentaires au groupe de fichiers ou définissez un autogrotth pour les fichiers existants dans le groupe de fichiers.

Quelle est la croissance du fichier recommandé que je devrais définir, comment est gérée ou résolue cette erreur? Merci d'avance.

5
paulvillaruel23

La solution la plus rapide serait de redémarrer le serveur SQL et TEMPDB sera recréée avec la taille par défaut et les fichiers vides.

Mais si c'est un serveur de production, vous ne pouvez pas vraiment le redémarrer quand vous le souhaitez. Un vrai correctif serait d'ajouter un nouveau fichier sur un lecteur différent et d'exécuter vos requêtes.

Un exemple serait (nouveau fichier de taille de départ 1 Mo, augmenter 100 Mo, limite de 500 Mo):

USE [master]
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'newtempfile', FILENAME = N'e:\newtempfile.ndf' , SIZE = 100MB, MAXSIZE = 500MB , FILEGROWTH = 100MB )
GO

Et puis, lorsque vous avez le temps, vérifiez ce qui utilise tellement TEMPDB. Mais probablement vous aurez toujours besoin d'espace pour TEMPDB, vous feriez donc de mieux planifier l'espace pour cela et d'attribuer suffisamment d'espace pour cette dB, car il est très important pour un système sain (vous pouvez simplement le regarder comme un RAM Partie).

PS1: Vérifiez si vous n'avez pas de produit cartésien dans vos déclarations de sélection, car ce nombre semble un peu élevé.

PS2: Si vous avez suffisamment d'espace libre sur le lecteur TEMPDB, vérifiez si les fichiers ne sont pas arrivés à leur limite et que l'autogrotth est désactivé. Si oui, actionnez AUTOGROWTH (pas par pour cent, mais par une taille spécifique, vous vous sentez à l'aise).

PS3: Une bonne solution serait de briser ce processus ETL en transactions plus petites. Au lieu de supprimer 1 BIL Records à la fois, faites-le par 1000 moulin .. ou jouez avec des tailles de lots jusqu'à ce que vous vous sentiez en sécurité avec la longueur du processus et la taille des fichiers. Vous obtiendrez probablement le résultat plus rapide et ne pas avoir d'énormes augmentations d'espace à la fois.

5
Marian

L'erreur indique probablement que le disque dur que votre TEMPDB est installé est plein. La solution la plus simple se brancherait dans un nouveau lecteur et déplacerait le tempdb sur là.

Tout d'abord, découvrez le nom des fichiers qui composent le TEMPDB en exécutant la requête suivante dans le contexte du TEMPDB:

EXEC sp_helpfile
GO

Modifiez le script suivant à l'aide des noms de fichiers à partir du script ci-dessus:

USE master
GO
ALTER DATABASE TempDB MODIFY FILE
  (NAME = tempdev, FILENAME = 'e\:<tempdb datafile>.mdf')
GO
ALTER DATABASE TempDB MODIFY FILE
  (NAME = templog, FILENAME = 'e:\<tempdb log>.ldf')
GO

Évidemment, remplacer E:\ avec la nouvelle lettre de lecteur.

Lorsque vous avez terminé, redémarrez SQL Server pour déplacer réellement le TEMPDB, puis essayez de voir si cela résolvait le problème.

3
SchmitzIT