Désactiver la journalisation sur certaines tables

9

J'utilise SQL Server 2005. J'ai deux tables qui contiennent des informations agrégées. Les informations sont constamment mises à jour, générant près de 5 Go de données de journal par jour. (C'est plus grand que la base de données entière!) Je voudrais désactiver la journalisation sur ces tables, car la restauration n'est pas vraiment nécessaire. Je voudrais cependant continuer à me connecter sur les autres tables de la base de données.

Est-il possible de désactiver la journalisation sur certaines tables de la base de données? Sinon, puis-je placer les deux tables dans le même schéma, puis désactiver la journalisation sur le schéma? La seule option est-elle de déplacer les deux tables vers une base de données distincte et de désactiver la journalisation là-bas?

Mise à jour: je suppose que je vais expliquer pourquoi je n'ai vraiment pas besoin de consigner l'activité sur ces tables.

Les deux tableaux sont remplis de données GPS, ils deviennent donc assez volumineux. La première table capture les emplacements bruts de six tables Android sur le terrain. Les nouvelles données de chacune des tablettes arrivent toutes les 5 à 10 secondes. Ces informations sont ensuite agrégées sous la forme locationA, locationB, travelTime. L'objectif est, en fin de compte, d'avoir les temps de trajet les plus courts entre tous les emplacements, sur la base des données de conduite réelles. Les données ne concernent qu'une petite ville et ne sont précises qu'à quatre décimales, donc elles sont gérables. Cependant, à mesure que de nouvelles données brutes arrivent, des temps de trajet plus lents doivent être mis à jour et de nouveaux doivent être insérés.

Une fois les données brutes agrégées, elles sont purgées. Nous ne revenons pas à des temps de trajet plus longs, c'est pourquoi la réduction en arrière n'a pas tellement d'importance dans ces tableaux.

dangowans
la source

Réponses:

8
  • Est-il possible de désactiver la journalisation sur certaines tables de la base de données?
  • Puis-je placer les deux tables dans le même schéma, puis désactiver la journalisation sur le schéma?
  • La seule option est-elle de déplacer les deux tables vers une base de données distincte et de désactiver la journalisation là-bas?

La journalisation des opérations utilisateur ne peut pas être désactivée.

Il y a une classe d'opérations appelées opérations peu journalisées qui permet uniquement une transaction à laminer retour (au lieu d'être également en mesure de rouler vers l' avant ). Cependant, il ne semble pas que ce que vous faites répondrait aux critères pour que cela s'applique, et je ne pense pas que cela résoudrait le problème de toute façon.

La solution SQL Server serait d'atterrir les tables intermédiaires dans une nouvelle base de données en cours de SIMPLErécupération, distincte de la base de données des résultats d'agrégation, qui je suppose est en cours de FULLrécupération. Bien que cela ne réduise pas le volume de journalisation, cela éliminerait la nécessité de sauvegarder le journal généré par les chargements de données. (Voir mon article de blog ici sur la journalisation et certains des facteurs impliqués dans le choix du modèle de récupération d'une base de données.)

La séparation des tables dans une autre base de données offrirait la flexibilité de faire atterrir le fichier journal sur un sous-système d'E / S plus rapide, probablement un petit tableau de disques SSD connectés localement.

En outre, considérez que SQL Server seul n'est peut-être pas la meilleure solution pour résoudre le problème. Il existe d'autres solutions SGBDR qui offrent la possibilité de désactiver complètement la journalisation pour certaines tables. Les données peuvent être transférées et agrégées dans un autre système, et les résultats fusionnés dans la base de données SQL Server existante, qui est bien protégée par une journalisation et des sauvegardes complètes.

Jon Seigel
la source
@dangowans: Vous êtes les bienvenus.
Jon Seigel
3

Non, il n'existe aucun moyen d'empêcher la journalisation dans SQL Server quel que soit le niveau du schéma, de la table ou de la base de données.

En fait, chaque transaction qui effectue des modifications ou des changements dans la base de données SQL Server est enregistrée, à l'exception des transactions liées au magasin de versions impliquant TempDB lorsque l'isolement de capture instantanée est utilisé. (la journalisation dans le journal des transactions garantit que la transaction peut être annulée (pour certaines opérations, vous pouvez réduire la journalisation (il s'agit des opérations à journalisation minimale) en remplaçant le modèle de récupération par BULK Logged --- vous pouvez en savoir plus à ce sujet dans la documentation en ligne de SQL Server ici)

Apprenti SQL
la source
0

La réponse est, comme toujours, cela dépend.
Quand tu as dit:

J'ai deux tableaux qui contiennent des informations agrégées. Les informations sont constamment mises à jour

De quel type d'agrégation s'agit-il?
Essayez d'utiliser une VUE à la place, pas besoin de mettre à jour et pas de journalisation.

Si ce n'est pas une option, essayez d'utiliser des transactions plus courtes et de sauvegarder le journal entre elles.

L'utilisation d'une base de données différente signifie une surcharge d'administration de la sécurité, etc. et aura son propre journal des transactions (même avec le modèle de récupération SIMPLE, le journal est écrit, SQL Server tronque simplement le journal automatiquement, mais ne libère pas d'espace disque), donc je ne recommanderais pas cette option .

Roi Gavish
la source
J'ai mis à jour la question avec le type d'agrégation en cours.
dangowans
@dangowans Je pense au modèle de récupération enregistré en masse, votre DRP nécessite-t-il la capacité d'effectuer une restauration à un point dans le temps? Utilisez-vous la réplication? essayez de lire sur les conditions préalables pour les opérations journalisées minimales
Roi Gavish