De nombreuses options SQL Server peuvent être activées pour les bases de données, et l'une des plus mal comprises est la réduction automatique. Est-ce sûr? Si non pourquoi pas
De nombreuses options SQL Server peuvent être activées pour les bases de données, et l'une des plus mal comprises est la réduction automatique. Est-ce sûr? Si non pourquoi pas
Réponses:
(Au départ, je posais régulièrement une question, mais je trouvais la bonne méthode - merci BrentO)
Non jamais.
Je suis tombé sur cette question à plusieurs reprises sur ServerFault et je souhaite atteindre un large public avec de bons conseils. Si les gens désapprouvent cette façon de faire les choses, votez vers le bas et je retirerai cela volontiers.
La réduction automatique est un paramètre de base de données très courant à avoir activé. Cela semble être une bonne idée - supprimez l’espace supplémentaire de la base de données. Il existe de nombreux «administrateurs de base de données involontaires» (pensez à TFS, SharePoint, BizTalk ou simplement à un ancien serveur SQL Server ordinaire) qui ne savent peut-être pas que la réduction automatique est une mauvaise chose.
Chez Microsoft, j’étais propriétaire de SQL Server Storage Engine et j’ai essayé de supprimer la fonction de réduction automatique, mais elle devait rester pour des raisons de compatibilité ascendante.
Pourquoi le rétrécissement automatique est-il si grave?
La base de données est susceptible de croître à nouveau, alors pourquoi la réduire?
Il y a quelque temps, j’ai écrit un article de blog avec un exemple de script SQL qui montre les problèmes qu’il pose et explique un peu plus en détail. Voir Réduction automatique - désactivez-le! (pas de publicité ou de bric-à-brac comme ça sur mon blog). Ne confondez pas cela avec la réduction du fichier journal, ce qui est utile et nécessaire à l'occasion.
Rendez-vous donc service: examinez les paramètres de votre base de données et désactivez la réduction automatique. Vous ne devez pas non plus réduire vos projets de maintenance pour la même raison. Passez le mot à vos collègues.
Edit: Je devrais ajouter ceci, rappelé par la deuxième réponse - il existe une idée fausse commune selon laquelle l'interruption d'une opération de réduction peut entraîner une corruption. Non ça ne va pas. J'avais l'habitude de posséder le code de contraction dans SQL Server - il annule le déplacement de la page en cours s'il est interrompu.
J'espère que cela t'aides!
Bien sûr, Paul a raison.
Voir toutes les bases de données et leur paramètre de réduction automatique. Si vous avez beaucoup de bases de données, l'une d'entre elles se faufilera.
sp_msforeachdb @command1 = 'Select ''[?]'',DATABASEPROPERTYEX(''?'',''IsAutoShrink'')'
Est-ce que le dmv est quelque part ... Je me le demande.
Ce n'est pas "dangereux" - cela n'endommagera rien.
Cependant, il n'est pas recommandé pour les environnements de production où la base de données peut décider de démarrer un exercice de réorganisation coûteux, juste avant qu'une pile de demandes n'arrive, ce qui prend plus de temps pour être traitée. Vous feriez bien mieux d’utiliser des opérations de réduction de la planification avec d’autres opérations de maintenance telles que des sauvegardes (en fait, après les sauvegardes - c’est davantage à partir du journal des transactions). Ou tout simplement, ne réduisez pas du tout sauf en cas de problème de croissance - vous pouvez toujours configurer un moniteur pour vous avertir lorsque l'espace alloué inutilisé dépasse un certain ratio ou une taille fixe.
L'option IIRC est désactivée par défaut pour toutes les bases de données de toutes les éditions MSSQL sauf Express.
Un livre blanc disponible sur TechNet explique la maintenance SQL plus en détail.
J'ai vu un serveur SQL avec Autogrow et Autoshrink activés. Ce serveur (relativement puissant) était terriblement lent, car tout ce qu'il faisait toute la journée était de réduire et de faire grossir les fichiers de la base de données. Autoshrink peut être utile, mais je recommanderais deux choses:
La seule fois où j'ai été contraint de réduire une base de données a été d'actualiser une copie sur un serveur de test avec moins d'espace disque (insuffisant pour contenir la base de production).
Le fichier (s) de la base de données de production avait un espace libre important. Malheureusement, vous devez restaurer une base de données avec la même taille de fichier (s) que celle avec laquelle vous l'avez sauvegardée. Nous n’avions donc pas d’autre choix que de réduire notre production avant de la sauvegarder. (La réduction a pris beaucoup de temps, de nombreuses ressources ont été consommées et la croissance du journal des transactions qui en a résulté a été problématique.)
Consultez également ce didacticiel vidéo ....
Regardez Paul Randal montrer comment la réduction et la réduction automatiques peuvent entraîner de graves problèmes de fragmentation de votre base de données http://wtv.watchtechvideos.com/topic194.html