Warum steckt meine RDS for SQL Server-Instance im Neustartstatus fest?

Lesedauer: 4 Minute
0

Warum dauert es so lange, meine Amazon Relational Database Service (Amazon RDS) für Microsoft SQL Server-Instance neu zu starten?

Kurzbeschreibung

Der Neustart Ihrer DB-Instance kann mehr Zeit in Anspruch nehmen als erwartet, wenn eine große Anzahl laufender Transaktionen auf der Instance vorhanden ist. Oder der Neustart scheint hängen zu bleiben, wenn sich auf der Instance eine hohe Anzahl virtueller Protokolldateien (VLFs) befindet, die den Neustart verlangsamen.

Führen Sie einen oder beide der folgenden Schritte aus, um diese Probleme zu beheben:

  • Prüfen Sie die DB-Instance auf laufende Abfragen.
  • Reduzieren Sie die Anzahl der VLFs auf der DB-Instance.

Auflösung

Überprüfen Sie die DB-Instance auf laufende Abfragen

Beim Neustart werden alle laufenden Transaktionen gestoppt, und SQL Server führt beim Starten der Instance die Wiederherstellung aus. SQL Server führt Rollforward und Rollback der Transaktionen durch, um die Datenbank in einen konsistenten Zustand zu versetzen.

Sie können die für diesen Wiederherstellungsprozess benötigte Zeit im SQL Server-Fehlerprotokoll sehen. Der Protokolleintrag enthält die in jeder Wiederherstellungsphase verbrauchte Zeit. Im folgenden Beispiel für einen Protokolleintrag ist X die Zeit, die SQL Server in jeder Phase und bei der vollständigen Wiederherstellung benötigt. Wenn Sie große laufende Transaktionen haben, kann der Neustart sehr lange dauern.

Recovery completed for database <<DB_NAME>> (database ID <<id of database>>) in X second(s) (analysis X ms, redo X ms, undo X ms [system undo X ms, regular undo X ms].) This is an informational message only. No user action is required.

Um dieses Problem zu beheben, reduzieren Sie die Anzahl der laufenden Abfragen. Verwenden Sie den folgenden Befehl, um zu überprüfen, ob in der Datenbank aktive Datenänderungstransaktionen vorhanden sind.

SELECT r.session_id,
       r.start_time,
       r.status,
       r.cpu_time,
       r.total_elapsed_time,
       st.TEXT AS batch_text
FROM sys.dm_exec_requests AS r
     CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS st
     CROSS APPLY sys.dm_exec_query_plan(r.plan_handle) AS qp
     where session_id <> @@SPID
ORDER BY cpu_time DESC;

Die Befehlsausgabe enthält Informationen zu den Sitzungen, die in Ihrer Datenbank ausgeführt werden, zusammen mit Startzeit und SQL-Text. Wenn noch Abfragen ausgeführt werden, lassen Sie die Abfragen abschließen, bevor Sie einen Neustart durchführen.

Reduzieren Sie die Anzahl der VLFs auf der DB-Instance

Ein Neustart kann aufgrund einer hohen Anzahl von VLFs auf der Instance lange dauern. Eine übermäßige Anzahl von VLFs kann sich aus einem anfänglich kleinen Transaktionsprotokoll ansammeln, das (manuell oder automatisch) in sehr kleinen Schritten vergrößert wurde.

Bevor die Wiederherstellungsphasen während des Neustarts gestartet werden, scannt SQL Server alle VLFs seriell. Diese Phase wird als Entdeckungsphase bezeichnet. Wenn eine große Anzahl von VLFs gefunden wird, wird die folgende Benachrichtigung im Fehlerprotokoll angezeigt:

Database %ls has more than %d virtual log files which is excessive. Too many virtual log files can cause long startup and backup times. Consider shrinking the log and using a different growth increment to reduce the number of virtual log files.

Gehen Sie wie folgt vor, um die Anzahl der VLFs zu reduzieren:

Hinweis: Es ist eine bewährte Methode, diese Schritte in langsamen oder außerhalb der Geschäftszeiten durchzuführen.

  1. Melden Sie sich von Microsoft SQL Server Management Studio als Masterbenutzer bei der RDS for SQL Server-Instance an.
  2. Führen Sie die DBCC SQLPERF (LOGSPACE) -Abfrage aus, um die Nutzung der Protokolldatei zu überprüfen.
  3. Verkleinern Sie die Protokolldatei der Datenbank, die die Benachrichtigung über hohe VLFs-Werte erhalten hat, im Fehlerprotokoll.
  4. Erweitern Sie die Transaktionslogdatei auf eine angemessene Nutzungsgröße. Dadurch wird ein automatisches Wachstum vermieden, das eine hohe Anzahl von VLFs verursacht.

Hinweis: Durch das Verkleinern der Protokolldatei wird die Anzahl der VLFs reduziert. Durch die Durchführung einer einmaligen Erweiterung wird eine begrenzte Anzahl von VLFs erstellt, die gemäß den VLF-Erstellungskriterien erforderlich sind. Weitere Informationen finden Sie unter Virtuelle Protokolldateien (VLFs) in den Microsoft SQL-Dokumenten.


Relevante Informationen

Wie kann ich Fehler im Speicherverbrauch meiner Amazon RDS DB Instance beheben, auf der ein SQL Server läuft?