Deaktivieren der Protokollierung für bestimmte Tabellen

9

Ich verwende SQL Server 2005. Ich habe zwei Tabellen, die aggregierte Informationen enthalten. Die Informationen werden ständig aktualisiert und generieren täglich fast 5 GB Protokolldaten. (Das ist größer als die gesamte Datenbank!) Ich möchte die Protokollierung für diese Tabellen deaktivieren, da ein Zurücksetzen nicht unbedingt erforderlich ist. Ich möchte mich jedoch weiterhin bei den anderen Tabellen in der Datenbank anmelden.

Ist es möglich, die Protokollierung für bestimmte Tabellen in der Datenbank zu deaktivieren? Wenn nicht, kann ich die beiden Tabellen im selben Schema platzieren und dann die Protokollierung für das Schema deaktivieren? Ist die einzige Möglichkeit, die beiden Tabellen in eine separate Datenbank zu verschieben und die Protokollierung dort zu deaktivieren?

Update: Ich denke, ich werde erklären, warum ich die Aktivität in diesen Tabellen wirklich nicht protokollieren muss.

Die beiden Tabellen sind mit GPS-Daten gefüllt, sodass sie ziemlich groß werden. In der ersten Tabelle werden Rohstandorte aus sechs Android-Tabellen im Feld erfasst. Neue Daten von jedem der Tablets kommen alle 5-10 Sekunden. Diese Informationen werden dann als locationA, locationB, travelTime zusammengefasst. Ziel ist es, letztendlich die kürzesten Fahrzeiten zwischen allen Standorten zu haben, basierend auf den tatsächlichen Fahrdaten. Die Daten gelten nur für eine kleine Stadt und sind nur auf vier Dezimalstellen genau, sodass sie verwaltet werden können. Wenn jedoch neue Rohdaten eingehen, müssen langsamere Reisezeiten aktualisiert und neue eingefügt werden.

Sobald die Rohdaten aggregiert sind, werden sie gelöscht. Wir gehen nicht rückwärts zu längeren Reisezeiten, deshalb ist das Zurückrollen in diesen Tabellen nicht so wichtig.

Dangowans
quelle

Antworten:

8
  • Ist es möglich, die Protokollierung für bestimmte Tabellen in der Datenbank zu deaktivieren?
  • Kann ich die beiden Tabellen im selben Schema platzieren und dann die Protokollierung für das Schema deaktivieren?
  • Ist die einzige Möglichkeit, die beiden Tabellen in eine separate Datenbank zu verschieben und die Protokollierung dort zu deaktivieren?

Die Protokollierung von Benutzervorgängen kann nicht deaktiviert werden.

Es gibt eine Klasse von aufgerufenen Operationen minimal protokollierte Operationen , die eine Transaktion gerollt erlaubt nur wird wieder (im Gegensatz zu auch zu rollen in der Lage , nach vorne ). Es hört sich jedoch nicht so an, als würde das, was Sie tun, die Kriterien dafür erfüllen, und ich denke auch nicht, dass dies das Problem ohnehin lösen würde.

Die SQL Server-Lösung würde darin bestehen, die Staging-Tabellen in der SIMPLEWiederherstellung in einer neuen Datenbank zu landen , getrennt von der Aggregationsergebnisdatenbank, von der ich annehme, dass sie wiederhergestellt wird FULL. Während dies das nicht verringert Volumen der Protokollierung, würde es die Notwendigkeit beseitigen , sichern das Protokoll durch die Datenlasten erzeugt. (Weitere Informationen zur Protokollierung und zu einigen Faktoren bei der Auswahl des Wiederherstellungsmodells einer Datenbank finden Sie in meinem Blogbeitrag hier .)

Das Trennen der Tabellen in eine andere Datenbank bietet die Flexibilität, die Protokolldatei auf einem schnelleren E / A-Subsystem zu landen, wahrscheinlich einem kleinen Array lokal angeschlossener Solid-State-Laufwerke.

Bedenken Sie auch, dass SQL Server allein möglicherweise nicht die beste Lösung zur Lösung des Problems ist. Es gibt andere RDBMS-Lösungen, die die Möglichkeit bieten, die Protokollierung für bestimmte Tabellen vollständig zu deaktivieren. Die Daten könnten in einem anderen System bereitgestellt und aggregiert werden, und die Ergebnisse könnten in die vorhandene SQL Server-Datenbank zusammengeführt werden, die durch vollständige Protokollierung und Sicherungen gut geschützt ist.

Jon Seigel
quelle
@ Dangowans: Gern geschehen.
Jon Seigel
3

Nein, es gibt keine Möglichkeit, die Protokollierung in SQL Server unabhängig von Schema-, Tabellen- oder Datenbankebene zu verhindern.

Tatsächlich wird jede Transaktion protokolliert, die Änderungen oder Modifikationen in der SQL Server-Datenbank vornimmt, mit Ausnahme von Transaktionen im Zusammenhang mit dem Versionsspeicher, an denen TempDB beteiligt ist, wenn die Snapshot-Isolation verwendet wird. (Das Anmelden im Transaktionsprotokoll garantiert, dass die Transaktion zurückgesetzt werden kann. (Für bestimmte Vorgänge können Sie die Protokollierung reduzieren (dies wird als minimal protokollierte Vorgänge bezeichnet), indem Sie das Wiederherstellungsmodell in BULK Logged ändern. Weitere Informationen hierzu finden Sie in den SQL Server-Onlinedokumenten hier

SQL Learner
quelle
0

Die Antwort ist wie immer, es kommt darauf an.
Als Sie sagten:

Ich habe zwei Tabellen, die aggregierte Informationen enthalten. Die Informationen werden ständig aktualisiert

Was ist das für eine Aggregation?
Versuchen Sie stattdessen, eine ANSICHT zu verwenden, ohne dass eine Aktualisierung erforderlich ist und keine Protokollierung erforderlich ist.

Wenn dies keine Option ist, versuchen Sie, kürzere Transaktionen zu verwenden und das Protokoll zwischen ihnen zu sichern.

Die Verwendung einer anderen Datenbank bedeutet Verwaltungsaufwand für die Sicherheit usw. und verfügt über ein eigenes Transaktionsprotokoll (selbst mit dem SIMPLE-Wiederherstellungsmodell wird das Protokoll geschrieben, SQL Server schneidet das Protokoll einfach automatisch ab, gibt jedoch keinen Speicherplatz frei), sodass ich diese Option nicht empfehlen würde .

Roi Gavish
quelle
Ich habe die Frage mit der Art der Aggregation aktualisiert, die stattfindet.
Dangowans
@dangowans Ich denke über das massenprotokollierte Wiederherstellungsmodell nach. Erfordert Ihr DRP die Fähigkeit, eine Wiederherstellung zu einem bestimmten Zeitpunkt durchzuführen? Verwenden Sie die Replikation? Versuchen Sie, über die Voraussetzungen für minimale protokollierte Operationen zu
lesen