Soweit ich weiß, werden im Versionsspeicher nur Versionen bereinigt, die älter als die älteste aktive Transaktion sind. Frage: Ist die älteste Transaktionsdatenbank spezifisch oder behält SQL Server alle Versionen unabhängig von der Datenbank bei, wenn noch eine ältere Transaktion aktiv ist?
Hintergrundgeschichte - SQL Server 2005 SP4 Enterprise mit rund 40 Datenbanken. TempDB ist derzeit 102 GB, der Versionsspeicher ist rund 98 GB. Eine der auf der Datenbankinstanz gehosteten Anwendungen verfügt über eine offene Transaktion, die 40 Tage alt ist und auf sys.dm ... database_transactions basiert. Zwei separate große Datenbanken waren im letzten Monat extrem stark ausgelastet, und wir sahen ein konsistentes TempDB-Wachstum, das mit diesen Vorgängen zusammenfiel. Wir haben ein gewisses Wachstum erwartet. Wir haben nicht erwartet, dass es weiter wächst. Frage: Sind die im Versionsspeicher von TempDB gespeicherten Versionen dieser beiden separaten Datenbanken noch vorhanden, da eine dritte unabhängige Datenbank eine Verbindung hat, die 40 Tage alt ist und einen offenen Transaktionsstatus anzeigt?
Perfmon-Zähler: Der Versionsspeicher wächst in den wenigen Stunden, die ich heute Morgen verfolgt habe, kontinuierlich. Versionsgenerierungsrate AVG liegt bei 30 kb / s, die Versionsbereinigungsrate bei 0 kb / s.
Viel Platz für TempDB übrig, es gibt rund 300 GB Gesamtdatendateien für alle Benutzerdatenbanken. TempDB ist seit dem letzten Neustart für jede seiner 8 Datendateien um durchschnittlich 350 MB pro Tag gewachsen. Dieses Verhalten ist abnormal und die Untersuchung ergab, dass der große Versionsspeicher vorhanden ist
Antworten auf Kommentarfragen, um keinen langen Kommentarbereich zu haben:
F: Warum Auto-Wachstum auf Tempdb? A: TempDB wird auf eine Größe initialisiert, die wir für die meiste Zeit als geeignet befunden haben. Wir erlauben automatisches Wachstum, um abnormale Datenbankaktivitäten zu verarbeiten. Wir überwachen auch das automatische Wachstum.
F: Woher wissen Sie, dass die Transaktion aktiv ist und nicht nur eine aktive Verbindung? A: transaction_state sagt aktiv in sys.dm_tran_active_snapshot_database_transactions und anderen Dingen. Aktivitätsmonitor sagt, dass jede Verbindung 1 offene Transaktion hat.
F: Warum ist deine App so dumm? A: Sein Dritter. Einer von vielen in diesem Fall. Ich weiß nicht, ob das Verhalten abnormal ist oder leicht behoben werden kann.
AUFLÖSUNG
Die offenen Transaktionen, bei denen eine Bereinigung des Versionsspeichers verhindert wurde, so dass Jon Recht hatte, werden die Bereinigung des Versionsspeichers unabhängig von den Datenbanken durchgeführt. Durch das Schließen der fehlerhaften Transaktionen konnte die Bereinigung des Versionsspeichers beginnen. Die aktuelle Theorie dahinter stammt von Jon Seigel
Der Versionsspeicher kann nur Versionen löschen, die auf der ältesten aktiven Transaktion innerhalb der gesamten Instanz basieren, um die Verwendung der Snapshot-Isolation auf Transaktionsebene für mehrere Datenbanken gleichzeitig zu unterstützen.
Wenn jemand dies mit Sicherheit weiß oder beweisen kann, tun Sie dies bitte
Referenzierte Frage: Finden Sie Transaktionen, die den Versionsspeicher füllen
Referenzierte Dokumente:
TempDB 2005 WP
Teratrax-Tuning tempDB
Idera Demystify Tempdb
begin_time
Wert für die aktive Transaktion?