Tout en rétrécissant est en effet dangereux pour les raisons mentionnées ici. Il y a un juste milieu entre la réponse de Jimbo et celle de John ... Vous devriez toujours sérieusement considérer si vous voulez ou non réduire votre base de données.
Dans un monde idéal - vous créeriez votre base de données avec beaucoup d'espace libre pour vous développer. J'appelle cela "Right Sizing" votre base de données. Vous permettriez à cet espace libre d'être là et vous ne vous efforceriez pas de le rendre et de garder votre taille totale juste à votre taille utilisée. Pourquoi? Parce que votre base de données finira par croître à nouveau .. Ensuite, vous rétrécirez à nouveau .. Et vous serez coincé dans ce modèle horrible de rétrécissements inutiles suivis de croissances - et tout le temps, comme certains l'ont souligné, augmenter la fragmentation de votre index.
J'ai blogué à ce sujet où j'ai exhorté les gens à " Ne touchez pas ce bouton de rétrécissement! " Mais parfois ... Parfois, vous devez. Si vous avez une grande base de données, vous venez de libérer un espace important et ne vous attendez pas à y repousser jamais - eh bien, il est normal d'envisager de rétrécir comme une opération unique tant que vous pouvez prendre soin de la fragmentation de votre index par la suite grâce à la reconstruction leur. L'opération de rétrécissement peut prendre du temps, vous devez donc la planifier pour un moment où vous pouvez payer le prix d'une opération de rétrécissement. L'approche consistant à créer une base de données vide et à y copier des données fonctionne - mais cela peut devenir très difficile avec des bases de données plus grandes et beaucoup de données.
Si vous prévoyez d'ajouter cet espace à la base de données par le biais d'une utilisation normale et de modèles de croissance dans le futur, vous souhaiterez peut-être simplement y laisser cet espace.
Également
Vous avez dit avoir "effacé" votre journal des transactions. Je serais curieux de savoir comment vous avez fait cela, mais en lisant le post que j'ai partagé et les autres de la série, vous verrez quelques conseils sur la gestion du journal des transactions. Mais en bref - si vous êtes en mode de récupération complète, vous devez effectuer des sauvegardes de journal régulières pour que le journal se réutilise. Sinon - sans sauvegarde de journal en mode complet - le fichier journal ne cesse de croître et de plus en plus et enregistre toujours ce que vous avez fait parce que vous avez dit à SQL que vous ne voulez pas simplement conserver ce journal pour la récupération après incident, mais que vous souhaitez conserver un sauvegarde manuelle de celui-ci pour relire les transactions / annuler les transactions pour récupérer à un moment précis à des fins de récupération ... Si vous êtes simple et que le journal augmente excessivement,BEGIN TRAN ... do work.... COMMIT TRAN
ou si vous venez d'émettre une grosse DELETE
déclaration et de supprimer tout un tas de données en une seule transaction implicite.)
Je suppose également que vous recherchez cet espace libre sur votre système de fichiers. Si vous le recherchez dans SQL et dans ce gros fichier que vous avez - il se peut que vous attendiez le nettoyage du fantôme pour terminer si vous recherchez immédiatement après votre opération. Paul Randal blogue sur Ghost Cleanup .
Lorsque vous supprimez des données, SQL Server réserve son espace pour une utilisation ultérieure pour l'insertion de nouvelles données. Vous devez réduire la base de données. Vous pouvez trouver plus d'informations ici .
la source
J'ai trouvé cela parce que je viens de supprimer un tas de tables de sauvegarde parce que ma base de données avait "atteint son maximum". J'ai continué à regarder la propriété "Size", me demandant pourquoi cela ne diminuait pas? . Après avoir lu ceci, non, je ne veux pas réduire la base de données. Ce que je veux faire, c'est "récupérer" l'espace pour les déchets que je viens de supprimer. Ce que je devais regarder, c'était "Espace disponible". Je pense que c'est peut-être aussi ce que quelqu'un d'autre devrait avoir besoin de regarder.? *
la source
Il convient également de noter que si la table contient des index, une fragmentation peut exister après la suppression de vastes étendues de données. J'avais une table aujourd'hui qui avait environ 70 millions d'enregistrements, ce qui prenait environ 13 Go. Je l'ai nettoyé à 1639 enregistrements (le reste a été généré par un seul bug) mais la table a toujours pris environ 4,5 Go. Après avoir reconstruit tous les index de la table, cela ne prenait que 85 pages (680 Ko). Après cela, j'ai utilisé un fichier rétractable incrémentiel pour récupérer l'espace (et corrigé le bogue sur le système pour éviter une répétition).
la source