Question

Je sais que psy est le diable: Il renverse l'ordre des pages et est responsable du cancer de la peau, la fragmentation des données et le réchauffement climatique. La liste est longue ... Cela étant dit, que j'ai une base de données de 100 Go et supprimer 50 Go de données - non pas sur une table, mais la taille générale des anciennes données sur une base de données niveau large, couvrant 90% de la tables - ce ne constituent un cas d'utilisation appropriée pour rétrécir la base de données

Dans le cas contraire, quelles sont les mesures appropriées à prendre pour nettoyer la maison après le retrait d'un pourcentage élevé de données à partir d'une base de données? Je peux penser à deux: Reconstruire les index et statistiques à jour. Quoi d'autre?

Était-ce utile?

La solution

Réorganiser et-psy est jamais vraiment recommandé.

Si vous pouvez prendre les apps la base de données est au service en ligne, vous pouvez accélérer le processus et de réduire la fragmentation des index en supprimant tous les index et les contraintes primaires / clés étrangères avant le psy (cela signifie qu'il y aura moins de données à déplacer autour car seules les pages de données seront brassés pas les pages d'index actuellement inexistantes, ce qui accélère le processus) recréer ensuite tous les index et les clés.

Recréer les index après les moyens de rétrécissement ils ne devraient pas être significativement fragmenté, et les ayant disparu au cours des moyens de rétraction les reconstruire ne laisseront pas beaucoup de petits dans l'allocation de la page « trous » dans les fichiers qui peuvent inviter la fragmentation ultérieure.

Une autre option si vous pouvez les applications hors ligne est de migrer toutes les données à une nouvelle base de données de la même structure. Si votre processus de construction est solide, vous devriez être en mesure de construire cette vierge DB rapidement, sinon créer un à partir du DB actuel (restaurer une sauvegarde de l'actuel, troncature / supprimer tout le contenu dans les tableaux et effectuer un psy complet).

Vous pourriez encore vouloir supprimer tous les index de la destination et les recréer ensuite comme cela peut être beaucoup plus efficace lors d'un changement beaucoup de données indexées (100% dans ce cas). Pour accélérer le processus de copie, ont les datafile (s) de la base de données de destination sur différents disques physiques à la source (sauf si vous utilisez les disques SSD dans ce cas, vous n'avez pas besoin de se soucier de réduire les mouvements de la tête), vous pouvez les déplacer à l'emplacement de la source lorsque vous avez terminé.

En outre, si la création de la destination nouvelle (plutôt que par découpage une copie de la source) créer avec une taille initiale qui contiendra toutes les données actuelles ainsi que quelques mois une valeur de croissance - qui fera la copie des données un peu plus vite à nouveau car il ne sera pas allouer un nouvel espace de temps en temps tout au long du processus.

Cela peut être mieux que d'utiliser psy parce que la migration des données vers une nouvelle base de données reproduit l'action prévue de l'opération de rétrécissement, mais potentiellement avec beaucoup moins de fragmentation (qui est la conséquence involontaire d'une Réorganiser et-psy). Un psy prend simplement des blocs de près de la fin du fichier et les met dans le premier espace plus près le début ne faisant aucun effort pour conserver les données liées ensemble.

Je soupçonne que le résultat sera l'espace sage plus efficace aussi, car il risque d'être moins de pages utilisé par la suite partie. Un psy va simplement déplacer des pages utilisées partie autour, le déplacement des données est plus susceptible d'entraîner des pages entières, surtout si vous insérez dans la destination de l'ordre de clé / index ordonné en clusters d'une table (où une table a un) et de créer d'autres index après que les données ont tous migré.

Bien sûr, si vous ne pouvez pas prendre les applications hors ligne du tout, juste effectuer un psy est votre seule option si vous vraiment besoin de récupérer le feu de l'espace avec cela. En fonction de vos données, les modèles d'accès, la taille du jeu de travail commun, la quantité de RAM le serveur a, et ainsi de suite, la fragmentation interne supplémentaire peut ne pas être tout ce important à la fin.

Pour l'opération de copie, soit SSIS ou une base T-SQL travailleraient aussi bien (l'option SSIS peut être moins efficace, mais potentiellement plus faciles à entretenir plus tard). Si vous créez les relations FK à la fin ainsi que les indices que vous pouvez faire un simple « pour chaque table, copier » dans les deux cas. Bien sûr, pour un unique, un psy + Réorganiser est probablement bien aussi, mais comme je viens de faire peur aux gens en ne considérant psy régulièrement! (Je l'ai connu des gens les programmer tous les jours).

Autres conseils

est la base de données va croître à nouveau? Si oui, alors l'effort que vous allez mettre dans les opérations de réduction va juste être une perte, parce que quand vous avez la taille du fichier, puis vous ajoutez plus de données, le fichier aura juste à se développer à nouveau, et les transactions doivent attendre que la croissance se produise. Si vous avez des sous-optimales des paramètres de croissance automatique et / ou un lecteur lent cette activité de croissance va être très douloureux.

Si vous faites rétrécir la base de données, ce que vous allez utiliser l'espace disque libéré pour? Encore une fois si vous allez juste garder cet espace libre dans le cas où cette base de données augmente à nouveau, alors vous tourner simplement vos roues.

Qu'est-ce que vous pourriez envisager de faire, maintenant que vous avez tout cet espace libre dans le fichier, est la reconstruction de votre index afin qu'ils soient mieux optimisés (et il sera beaucoup moins pénible de le faire lorsque vous avez un espace libre faire - pensez à essayer de changer un pull-over dans un placard minuscule par rapport à une grande chambre à coucher).

Donc, à moins que c'était une grande opération de nettoyage et vous ne serez pas vraiment être montée en puissance au même niveau de données à nouveau, je voudrais simplement le laisser tel quel et se concentrer sur d'autres domaines de l'optimisation.

Si vous êtes à court d'espace, et vos données ne sont pas censés obtenir ce gros alors rétrécir, mais reconstruire vos indices après des facteurs de remplissage appropriés qui permet une croissance typique.

Si votre objectif final est en fait de réduire la taille de faire la sauvegarde que vous mettre en œuvre une stratégie de sauvegarde complète pour effacer le journal des transactions et lorsque vous sauvegardez le db, utilisez les options Compresser.

Je ne recommande pas la croissance automatique de 5GB à moins que vous généralement attendre à croître 5GB fréquemment. Vous pourriez avoir des problèmes de performances intermittents autrement. Votre taille de données doit d'abord être réglé sur ce que vous pensez est nécessaire pour, disons, un an, et la croissance automatique doit être réglé à une taille que vous avez testé ne modifie pas la performance d'exploitation. Voir Ne touchez pas la base de données de Shrink Bouton Dans SQL serveur! par Mike Walsh.

La reconstruction des index avant le rétrécissement provoque les indices à mal disposés. Il est bon de ne pas reconstruire puis rétrécir. Shrinking les causes des indices à mutilée pour récupérer l'espace - si la reconstruction avance alors rétrécissement est inutile. Voir Quand utiliser la fonction Auto Réduction de la taille par Thomas LaRock.

Je ne sais pas si cela fonctionne mieux que réindexation après le psy, mais une autre option serait de créer un nouveau fichier de données qui est de taille appropriée et déplacer toutes les données à ce sujet. Dans ce cas, je ferais une réindexation d'abord si vous savez ce que la taille réelle des données est. Un hic est que je ne pense pas que si tel est le premier fichier dans le fichier de données principal, vous pouvez le vider. Vous devriez être en mesure de le rétrécir puis déplacez les données vers la suite et qui éviterait l'inversion de page. Cependant, si vous cherchez à passer à l'état solide qui ne devrait pas faire une grande différence de toute façon.

Pour revenir à cette façon en retard. Pourtant, nous avons réfléchissons et tester l'utilisation de psy dans nos environnements de test depuis longtemps ainsi. Selon le sujet, il sont des moments où psy est une option viable. Mais savoir quand et comment l'appliquer, sont indispensables à la bonne exécution tant à long et à court terme.

Dans notre scénario, nous avons récemment ajouté de nombreux changements à notre vaste base de données y compris la compression, le partitionnement, l'archivage et la suppression de bon vieux données redondantes. En conséquence, la partie utilisée de notre fichier de données primaire a chuté à moins de la moitié de ce qu'il était. Mais quel est le point de trimballer tout ce bagage? D'autant plus que contrairement à certains articles sur le web, la taille de vos fichiers de données directement en corrélation avec BACKUP / RESTORE DURÉE. En effet, contrairement à de nombreux articles supposent, de vrais scénarios de vie ont des charges plus de données sur une page donnée que juste les trucs que vous avez peut-être retiré.

Plus au point, cela ouvre un grand scénario pour le rétrécissement:

  1. Créez un script qui va trouver tous les objets et leurs groupes de fichiers dans votre base de données (beaucoup d'exemples en ligne), l'utiliser pour créer les clauses d'abandon ainsi que de créer des définitions pour chacun de vos indices et contraintes.
  2. Créer un nouveau fichier et filegroup, et faire que la valeur par défaut.
  3. Baisse tous les indices (note nonclustered, certains indices peuvent être contraintes).
  4. Créez vos indices groupés sur le nouveau groupe de fichiers avec DROP_EXISTING = ON (qui, d'ailleurs, est une opération extrêmement rapide, connecté au minimum commencer par rapport à de nombreuses alternatives).
  5. Recréer vos indices nonclustered.
  6. Enfin, votre ancien fichier RÉTRÉCIR de données (généralement primaire).

De cette façon, les seules données laissées là sont vos objets de système de DB, les statistiques, les procédures et ainsi de suite. Le psy devrait être beaucoup, beaucoup plus rapide, et il n'y a pas besoin d'un entretien plus d'index sur vos principaux objets de données qui ont été créés d'une manière ordonnée dans l'ordre et un risque minimal pour la fragmentation de l'avenir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top