Espace disque insuffisant lors de l'exécution de requêtes SQL lourdes sur SQL Server 2012


14

Je suis assez nouveau sur SQL Server 2012, je serais reconnaissant si quelqu'un pouvait aider. J'ai restauré une copie d'une énorme base de données vers SQL Server 2012 et j'ai essayé d'exécuter quelques requêtes simples contre lui.

J'essaie d'exécuter une requête SELECT sur une table de 136898115lignes de base de données . Cette SELECTrequête n'a qu'une simple WHEREclause. Chaque fois que j'exécute cette requête, elle échoue car le disque système (la partition sur laquelle Windows est installé - C:\) manque d'espace (cette partition n'a que 6 Go d'espace libre), et je ne comprends pas pourquoi. J'ai défini mon tempdb sur un autre lecteur, qui a plus de 14 téraoctets d'espace libre. Bien sûr, ma base de données se trouve également sur un autre lecteur.

Qu'est-ce qui fait que ma partition système manque d'espace? Est-ce le fichier d'échange?


2
Je suis à court d'espace depuis le système. im en utilisant SSMS sur le serveur SQL réel.
royv

2
En règle générale, il est recommandé de ne pas exécuter d'autres applications sur une boîte Windows SQL Server (et non SSMS), ou de s'assurer que le paramètre de mémoire maximale est suffisamment bas pour permettre suffisamment de RAM libre. Voir ma réponse ici: dba.stackexchange.com/a/19776/2718
Jon Seigel

Réponses:


12

Les résultats de la requête SSMS sont mis en cache par défaut sur le lecteur C :. Accédez à Tool \ Options. Voir ci-joint. Changez-le en un autre volume avec plus de stockage et tout ira bien.

entrez la description de l'image ici


1
Si vous sélectionnez Résultats dans un fichier, c'est là que la boîte de dialogue Enregistrer sous s'ouvre par défaut. Je ne pense pas que SSMS enregistre les jeux de résultats sur le disque par défaut, mais je peux me tromper.
Jon Seigel

1
Les résultats que vous obtenez dans votre fenêtre de requête sont mis en cache par mon post. Vérifiez votre lecteur, exécutez une requête volumineuse dans SSMS et vérifiez à nouveau. Vous verrez une perte de stockage sur votre lecteur C: si vous n'avez pas spécifié le contraire.
Eric Higgins

1
c'est vrai. ce n'est pas lié à mon fichier de page. J'ai déplacé mon fichier d'échange sur un autre lecteur, et mon lecteur C: a encore manqué d'espace.
royv

11

D'accord, je l'ai compris: Eric et moi avions raison tous les deux!

  • Le chemin dans la boîte de dialogue est comme je l'ai dit, juste un chemin par défaut pour enregistrer les résultats de la requête.
  • Les résultats de la requête sont mis en cache sur le disque (j'avais tort), mais dans le dossier temporaire du profil local ( C:\Users\<UserName>\AppData\Local\Tempdans mon cas ici). J'ai vérifié, et il ne semble pas y avoir de moyen évident de désactiver cette mise en cache.

Les plats à emporter sont donc:

  • Évitez d'exécuter SSMS directement sur la boîte SQL
  • Ne pas SELECT *partir d'une énorme table dans SSMS à moins que le jeu de résultats puisse tenir dans le dossier de profil
  • Assurez-vous que le paramètre de mémoire maximale de SQL Server est correctement configuré (il peut ou non avoir contribué à ce problème en ce qui concerne la croissance du fichier d'échange)

7

Je viens de subir le même problème. Après avoir lu les réponses ci-dessus, j'ai trouvé ce qui suit.

Outils | Les options ne sont pas la réponse. Le mien était réglé sur le lecteur Y: mais j'ai regardé ma requête s'exécuter et l'espace sur le lecteur C: plongé de 2,9 Go à 5,04 Mo (avant de tuer la requête).

J'ai donc pensé que c'était probablement la mise en cache des résultats (car ils sont très grands avec chaque ligne retournée contenant un gros morceau de XML) dans le répertoire Temp, ce que Jon a dit, mais il n'était pas sûr de la façon dont vous changeriez cela.

Ce que j'ai fait pour changer où les fichiers temporaires sont écrits était d'ouvrir mes variables d'environnement et de modifier les variables utilisateur TEMP et TMP (qui étaient toutes deux définies sur C: \ Temp) pour écrire dans Z: \ Temp.

Je peux confirmer qu'après ce changement, j'ai regardé la requête créer un très gros fichier dans mon répertoire Z: \ Temp.


Excellentes informations quand il y a un processus que vous devez suivre pour obtenir la mise à niveau de l'espace HD de votre VM et avoir beaucoup de stockage réseau. Je suis un peu curieux cependant, si vous rencontrez des problèmes de réseau qui goulot d'étranglement des taux de transfert de fichiers, pourrait se déplacer en dehors de votre performance de requête c: \ slow?
GibralterTop

C'était il y a 3 ans et je ne me souviens pas exactement quelles étaient les circonstances à l'époque. J'ai maintenant un ordinateur portable avec une quantité pathétique de RAM et de puissance de traitement, ce qui est une autre histoire. Je suis sûr que le lecteur Z: n'était qu'un autre lecteur "local" sur ma machine virtuelle. Je ne sais pas pourquoi ils ne l'ont pas étiqueté D: ou E: mais cette partie était hors de mon contrôle. Donc, pour moi, il n'y avait pas vraiment de problème de réseau.
Nick Ryan
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.