2 votes

Gestion de l'espace disque inutilisé dans une base de données sql server

J'ai une base de données dont la taille augmente très rapidement. Actuellement, sa taille est d'environ 60 Go, mais après avoir exécuté la procédure stockée db_spaceused, j'ai pu vérifier que plus de 40 Go sont inutilisés (l'espace inutilisé est différent, pas l'espace réservé qui, d'après ce que j'ai compris, est destiné à la croissance des tables). Et la taille réelle des données est d'environ 10-12 Go et quelques Go dans l'espace réservé.

Maintenant, pour récupérer cet espace inutilisé, j'ai essayé d'utiliser l'opération de rétrécissement, mais cela ne m'a pas aidé. Après avoir cherché plus loin, j'ai également découvert qu'il ne fallait pas utiliser l'opération de réduction de la base de données, car elle génère des fragments de données, ce qui entraîne une perte de temps lors de l'opération du disque. Maintenant, je ne sais pas vraiment quelle autre opération je devrais essayer pour récupérer l'espace et récupérer la base de données. Je pense qu'en raison de la taille, les requêtes peuvent prendre plus de temps que prévu et que récupérer cet espace pourrait améliorer les performances (je n'en suis pas sûr).

En enquêtant, je suis également tombé sur la fonctionnalité Gererate scripts. Elle permet d'exporter des données et des schémas, mais je ne suis pas sûr qu'elle permette également de créer des scripts (tous les utilisateurs, les autorisations et d'autres choses encore) afin que scripts permette de créer une réplique telle quelle (copie profonde/clone) de la base de données en utilisant la fonction create scema, puis de la remplir de données vers d'autres bases de données/serveurs ?

Toute indication serait utile.

3voto

Remus Rusanu Points 159382

Si votre base de données est de 60 Go, cela signifie qu'elle est passée à 60 Go. Même si les données ne représentent que 20 Go, vous avez probablement des opérations qui font croître les données de temps en temps (par exemple, les tâches nocturnes de maintenance des index). La recommandation est la suivante laisser la base de données à 60 Go . N'essayez pas de récupérer l'espace, vous ne feriez que nuire à la base de données qui a atteint 60 Go au départ. il est probable que cela se reproduise et déclencher la croissance de la base de données.

En fait, vous devriez à la en face de . Essayez d'identifier por qué elle est passée à 60 Go et extrapolez ce qui se passera lorsque vos données atteindront 30 Go. La base de données atteindra-t-elle 90 Go ? Si oui, vous devez la faire croître maintenant à 90Gb. La dernière chose que vous voulez, c'est que la croissance se fasse de manière aléatoire et que vous manquiez d'espace disque à un moment critique. En fait, vous devriez vérifier dès maintenant si votre serveur dispose de Initialisation instantanée du fichier activé.

Maintenant, bien sûr, la question est : ce que pourrait provoquer une croissance de la taille des données de 3x, et comment l'identifier ? Je ne connais pas de méthode simple. Je recommanderais de commencer par examiner vos travaux d'agent SQL. Vérifiez vos scripts de maintenance. Regardez dans l'application elle-même, a-t-elle un modèle de croissance et de suppression pour les données ? Regardez les sauvegardes passées (vous les avez, n'est-ce pas ?) et comparez.

BTW je suppose que la diligence raisonnable et vous avez vérifié que le données Le fichier est passé à 60 Go. Si c'est le fichier LOG qui a grandi, c'est facile, cela signifie que vous avez activé le modèle de récupération complète et que vous avez oublié de sauvegarder le log.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X