Comment exclure des index des sauvegardes dans SQL Server 2008


19

Nos sauvegardes complètes nocturnes (et différentielles périodiques) deviennent assez importantes, principalement en raison de la quantité d'index sur nos tables; environ la moitié de la taille de la sauvegarde est constituée d'index.

Nous utilisons le modèle de récupération simple pour nos sauvegardes.

Existe-t-il un moyen, en utilisant FileGroupsou une autre méthode de partitionnement de fichiers, d' exclure les index des sauvegardes?

Ce serait bien si cela pouvait également être étendu aux catalogues de texte intégral.

Réponses:


15

Si vous passez en mode de récupération complète, vous pouvez le faire avec des groupes de fichiers, mais c'est vraiment très maladroit. Vous laissez les données dans le groupe de fichiers principal et placez les index dans un groupe de fichiers distinct (non par défaut, c'est la clé).

Ensuite, vous échelonnez vos sauvegardes de manière à effectuer des sauvegardes de groupe de fichiers du serveur principal chaque nuit et des sauvegardes du journal des transactions toutes les X minutes.

En cas de catastrophe, vous restaurez le groupe de fichiers principal par lui-même. Les données sont soudainement en ligne, mais les index ne le sont pas. Cependant, pour revenir à la normale, vous devrez exporter ces données dans une nouvelle base de données propre et ajouter des index à partir de là. Vous ne pouvez pas mettre la base de données complètement en ligne sans restaurer tous les groupes de fichiers, et vous ne pouvez pas dire "je n'ai plus besoin de cet autre groupe de fichiers de toute façon."

Pour en savoir plus sur la façon dont cela fonctionne, consultez mon didacticiel vidéo sur les restaurations de groupes de fichiers.


Hehe, j'avais déplacé les index non clusterisés vers leur propre groupe de fichiers; le modèle Simple Recovery m'a complètement bloqué. Les indices étaient en fait plus grands que les données - comment cela me raillait! Eh bien, peut-être qu'une tierce partie publiera un indice de pointe magique :)
Jarrod Dixon

1
Et peut-être, juste peut-être, vous obtiendrez des licences gratuites pour cela. ;-)
Brent Ozar

5

Honnêtement, vous ne voulez vraiment pas faire cela, même si vous surmontez les autres problèmes que d'autres soulèvent ici.

Lorsque vous restaurez la sauvegarde en cas d'urgence, vous ne voulez pas attendre que les index soient reconstruits et vous allez subir des performances abominables jusqu'à ce que vous le fassiez.

Je ne peux pas penser à une situation où vous voudriez restaurer une sauvegarde sans index, donc dans tous les cas, vous voudrez vraiment les sauvegarder en même temps.

Vous devrez probablement rechercher d'autres solutions à ce problème ...

-Adam


1
"vous ne voulez pas attendre que les index se reconstruisent" très présomptif, OMI
Jeff Atwood

2
Oui, mais gardez à l'esprit que je généralise ici. Je n'ai pas été convaincu qu'il y a plus de situations où il vaut mieux abandonner les index et reconstruire qu'il n'y a de situations où il vaut mieux sauvegarder les index et éviter une reconstruction. En d'autres termes, un cas est généralement meilleur, et à moins qu'une situation particulière ne l'exige, il convient de se tromper en faveur de leur sauvegarde. Cela étant dit, chaque situation est différente. Je suis curieux de savoir combien de temps il faut pour reconstruire les index SO, et combien les performances du site souffrent jusqu'à ce qu'elles soient terminées (en supposant qu'elles soient en place pendant la reconstruction).
Adam Davis

La sauvegarde d'archivage à long terme est le cas d'utilisation spécifique que j'examine maintenant qui m'a conduit à cette question. J'ai un projet terminé et je ne veux plus que la base de données soit en ligne, mais je n'ai pas non plus besoin d'encombrer notre lecteur réseau avec un fichier de sauvegarde plus volumineux que nécessaire. Je ne veux pas perdre les définitions d'index, mais cela ne me dérangerait pas de les reconstruire si jamais je devais restaurer cela à nouveau.
richardtallent

3

Il semble que cela ne soit pas pris en charge. De cette information de rapport de bogue :

Il y a eu beaucoup d'intérêt pour celui-ci, donc je vais entrer dans un peu plus de détails sur ce qui se passe dans les coulisses et ce que cela signifierait pour implémenter cette fonctionnalité. Certains types de pages d'index sont séparés en unités d'allocation distinctes, tandis que d'autres sont mélangés aux pages de données. Là où nous ne regardons actuellement que le bitmap d'allocation pour voir si une extension est allouée, nous devons maintenant entrer et interpréter ce qui est stocké dans chaque unité d'allocation. De plus, nous ne serions plus en mesure de faire un scan linéaire des fichiers de données en copiant les données, nous sauterions dans le fichier. Toute cette interprétation des structures de données ralentirait considérablement la sauvegarde. La restauration devient encore plus intéressante, car il y a beaucoup de structures qui devraient être réparées pour tenir compte des trous dans la sauvegarde. Sinon, vous auriez des cartes d'allocation pointant vers des pages qui n'ont pas été sauvegardées, et donc des ordures, etc. etc. plus le restaurer. L'autre facette à considérer est que cela prendrait beaucoup d'efforts d'ingénierie pour bien faire les choses. Bien que ce ne soit pas votre problème à première vue, considérez que cela signifie que d'autres fonctionnalités que vous voudrez peut-être ne seront pas construites.


Ce ne serait pas un problème pour les index de texte intégral, n'est-ce pas? Celles-ci ont tendance à être assez grandes.
Michael Teper

1

pourrait être une idée folle, mais voilà.

  1. supprimez vos index non clusterisés qui prennent beaucoup d'espace
  2. faire une sauvegarde
  3. recréer les index que vous avez supprimés

Bien sûr, vous ne pouvez vraiment le faire que si votre base de données autorise des temps d'arrêt dans la journée.

De plus, ne supprimez pas vos index clusterisés car SQL Server perdra beaucoup de temps à les convertir en tas.

L'achat de cet espace disque supplémentaire semble-t-il encore une solution plus simple?

Avez-vous envisagé de faire des sauvegardes compressées ? c'est une nouvelle fonctionnalité de 2008, cela peut être une option pour vous.


Oui, nous avons activé la compression pour les sauvegardes, mais la compression intégrée n'est pas terrible. Nous avons en fait une sauvegarde de fin de semaine non compressée, puis 7zipez-la pour que nos développeurs la fassent tomber; c'est environ 1/3 de la taille, mais cela prend du temps à courir!
Jarrod Dixon

En ce qui concerne les temps d'arrêt de la base de données, pourrions-nous vraiment vivre sans serverfault.com et stackoverflow.com autant que possible? Je frissonne à cette pensée :)
Jarrod Dixon

Je ne l'ai pas testé moi-même, mais je m'en doutais. Ce n'est pas très configurable. Si vous envisagez toujours la compression en option, jetez un œil à SQL Lightspeed (cher, mais génial, mais le prix est très négociable) et à la sauvegarde SQL de RedGate. Résultats très configurables et excellents
Nick Kavadias
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.