web-dev-qa-db-fra.com

Rétrécissement lors de la sauvegarde

Tous,

Je connais des bonnes raisons de ne pas réduire une base de données et je suis en train de rétrécir un 2 To. Nous avons une grande base de données qui s'appuie sur chaque jour (par la police) et à cause de la taille, la sauvegarde fonctionne la majeure partie de la journée. Nous courons depuis quelque temps avec plus de 60% gratuit et cela ne devrait pas changer de manière significative. Je réduit la taille de la table pour atténuer ce que la sauvegarde fait à notre performance.

La table est grande et la rétrécissement est assez lente, donc j'exécute un filtre de lit DBCC dans un script de boucle où je rétrécit 250 Mo à la fois. Je le fais parce que lorsque la sauvegarde commence à décrocher des erreurs de filet indiquant qu'il ne peut pas changer le système de fichiers. Je suppose que cela est parce que la sauvegarde a le fichier verrouillé afin que le fichier ne change pas au milieu de la sauvegarde. Je fais les petits rétrécissements comme je suis au milieu d'un moment où la sauvegarde commence. Je vais donc la boucler afin que je puisse voir les erreurs de déplacement et tuer mon script - la sauvegarde peut commencer à des moments différents.

Ma question est que, bien que le fichier DBCC Shrinkfile ne puisse pas changer le fichier après le démarrage de la sauvegarde et que je reçois le message d'erreur, la première itération du script lorsque la sauvegarde est effectuée va assez rapidement et s'installe ensuite dans une cadence normale. Comme les gens l'ont dit si vous tuez un filtre de retrait, vous "ne perdez pas votre travail". Les résultats du rétrécissement assis dans TEMPDB sont-ils prêts à partir? Pour obtenir ce rétrécissement fait un peu plus vite, quelqu'un pense-t-il à exécuter un filtre plus important pendant la sauvegarde que je connais ne sera-t-il pas une bonne idée? Cela me donnerait un saut le lendemain.

Merci,

Tapoter

3
pyearick

Vous rétrécissez-vous avant la sauvegarde dans l'espoir de réduire votre temps de sauvegarde? Si oui, cela ne fera aucune différence. Mais si vous le faites, cela alloue moins d'espace sur votre cible (lorsque vous restaurez), cela vous aidera.

Je n'ai pas compris si vous le faites à chaque fois avant la sauvegarde. Si oui, vous voulez résoudre cela de manière permanente et ne pas le faire.

Maintenant, pour répondre à votre question.

Les résultats du rétrécissement assis dans TEMPDB sont-ils prêts à partir?

Il n'est pas nécessaire de garder le résultat. Cela vérifiera tout à nouveau une fois que vous redémarrez.

Pour obtenir ce rétrécissement fait un peu plus rapide, quelqu'un pense-t-il à exécuter une plus grande frémise lors de la sauvegarde que je connaisse ne sera pas une bonne idée?

Non, car il fait 32 pages à la fois et commettre. Voir ci-dessous.

Référence: https://blogs.msdn.microsoft.com/pssssql/2008/03/28/how-it-works-sql-server-2005-dbcc-ser-shrink-may-take-longer-Than- SQL-Server-2000 /

Rétrécissement fonctionne dans les lots de transaction de ~ 32 pages. Une fois 32 pages déplacées sous le point de troncature, la transaction est commise et une nouvelle transaction a commencé. Cela évite un problème plus ancien avec le rétrécissement * qui maintenait une transaction ouverte pendant une longue période et a provoqué la croissance des fichiers journaux car vous ne pouvez pas tronquer une transaction active. Il rend également rétractable * Redémarrer capable. Si vous annulez/tuez une opération de réduction *, seule la transaction active actuelle est renvoyée. Cela signifie que vous pouvez planifier une opération rétractable * pendant une fenêtre de maintenance et limiter son exécution à cette fenêtre de maintenance. Vous pouvez le redémarrer lors de la prochaine fenêtre de maintenance et il choisira de l'endroit où il s'est arrêté. Le seul inconvénient de ceci est que les allocations pouvaient se produire après la cible une fois que le contrat est terminé. Cela peut nécessiter une rétraction de faire des travaux supplémentaires pour un espace nouvellement attribué, mais cela devrait être raisonnablement limité.

Sur une note latérale, la sauvegarde de 2 To ne devrait pas prendre une journée complète. Il y a des commutateurs de sauvegarde natif, peut accélérer/optimiser votre durée de sauvegarde.

3
SqlWorldWide