Transaktionsprotokolldatei wächst für Datenbanken mit IN-Memory OLTP in SQL Server 2022

Symptome

Wenn Ihre Datenbanken das In-Memory-OLTP-Feature in SQL Server 2022 aktiviert haben, stellen Sie fest, dass die Transaktionsprotokolldatei kontinuierlich wächst. Darüber hinaus enthält das SQL Server-Fehlerprotokoll möglicherweise Meldungen wie Close thread is falling behind: 4 checkpoints outstanding.

Wenn Sie die SQL Server-Instanz neu starten, stellen Sie möglicherweise fest, dass der Datenbankwiederherstellungsvorgang viel Zeit in Anspruch nimmt.

Beheben des Problems mit sys.databases und sys.dm_db_xtp_checkpoint_stats

  • Wenn Sie die Katalogansicht sys.databases verwenden, um Informationen zu sammeln und dieses Problem zu beheben, zeigt die Spalte log_reuse_wait_descXTP_CHECKPOINT als Grund für eine lange Abschneidung an. Dieser Wert gibt an, dass das Transaktionsprotokoll auf einen In-Memory-OLTP-Prüfpunkt (früher Hekaton) wartet. Es deutet auf eine Verzögerung bei Checkpointing-Vorgängen hin, was sich möglicherweise auf die Leistung oder das Wachstum von Protokolldateien auswirkt.

  • Wenn Sie die dynamische SQL Server-Verwaltungssicht (DMV) sys.dm_db_xtp_checkpoint_stats verwenden, um Informationen zu sammeln und dieses Problem zu beheben, zeigt die Spalte outstanding_checkpoint_count über einen längeren Zeitraum einen Wert ungleich Null an. Es weist darauf hin, dass Checkpoints nicht effizient ausgeführt werden, was sich möglicherweise auf die Leistung und das Wachstum von Protokolldateien auswirkt.

Ursache

SQL Server 2022 hat neue Funktionen eingeführt, mit denen die Speicherverwaltung auf großen Speicherservern verbessert wird, um Speichermangelzustände zu vermeiden. Ein bekanntes Problem in dieser Änderung kann manchmal zu dem verhalten führen, das im Abschnitt "Symptome" beschrieben wird.

Auflösung

Führen Sie die folgenden Schritte aus, um das Problem zu beheben:

  1. Fügen Sie -T9810 als Startparameter für die SQL Server-Instanz hinzu.
  2. Starten Sie die Instanz neu.
  3. Erstellen Sie einen Prüfpunkt, führen Sie eine Protokollsicherung durch, beobachten Sie log_reuse_wait_desc das Protokoll, und verkleinern Sie das Protokoll, falls erforderlich, um Speicherplatz freizugeben.

Notiz

Dieses Problem wurde im kumulativen Update 7 für SQL Server 2022 behoben.

Weitere Informationen

Das Traceflag 9810 verhindert, dass die In-Memory-OLTP-Engine Thread Local Storage (TLS)-Speicher zurückfordert, und setzt das Verhalten auf das von SQL Server 2019 zurück.