Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:Azure SQL Database
Möglicherweise werden Fehler 9002 oder 40552 angezeigt, wenn das Transaktionsprotokoll voll ist und keine neuen Transaktionen akzeptieren kann. Diese Fehler treten auf, wenn das Datenbanktransaktionsprotokoll, das von Azure SQL Database verwaltet wird, Schwellenwerte für den Speicherplatz überschreitet und Transaktionen nicht annehmen kann. Diese Fehler ähneln Problemen mit einem vollständigen Transaktionsprotokoll in SQL Server, weisen jedoch unterschiedliche Lösungen in SQL Server, Azure SQL Database und Azure SQL Managed Instance auf.
Hinweis
Dieser Artikel konzentriert sich auf Azure SQL Database. Azure SQL Database basiert auf der neuesten stabilen Version des Microsoft SQL Server-Datenbankmoduls, sodass ein Großteil der Inhalte ähnlich ist, obwohl sich Die Problembehandlungsoptionen und -tools möglicherweise von SQL Server unterscheiden.
Weitere Informationen zur Behebung von Transaktionsprotokollfehlern in Azure SQL Managed Instance finden Sie unter Fehlerbehebung bei Transaktionsprotokollfehlern mit Azure SQL Managed Instance.
Weitere Informationen zur Problembehandlung eines Transaktionsprotokolls in SQL Server finden Sie unter Troubleshoot a Full Transaction Log (SQL Server Error 9002).
Automatisierte Sicherungen und das Transaktionsprotokoll
In Azure SQL Database werden Transaktionsprotokollsicherungen automatisch ausgeführt. Informationen zur Häufigkeit, Aufbewahrung und weitere Einzelheiten finden Sie unter Automatisierte Sicherungen.
Freier Speicherplatz, Datenbankdateiwachstum und Dateispeicherort werden ebenfalls verwaltet, sodass sich die typischen Ursachen und Lösungen von Transaktionsprotokollproblemen von SQL Server unterscheiden.
Ähnlich wie von SQL Server wird das Transaktionsprotokoll für jede Datenbank verkürzt, wenn eine Protokollsicherung erfolgreich abgeschlossen wird. Beim Abschneiden verbleibt leerer Speicherplatz in der Protokolldatei, der dann für neue Transaktionen verwendet werden kann. Wenn die Protokolldatei nicht durch Protokollsicherungen abgeschnitten werden kann, wird sie vergrößert, um neue Transaktionen erfassen zu können. Wenn die Protokolldatei in Azure SQL Database auf ihren Höchstwert anwächst, schlagen neue Schreibvorgänge fehl.
Informationen zur Größe des Transaktionsprotokolls finden Sie hier:
- Informationen zu V-Kern-Ressourcenlimits für eine Einzeldatenbank finden Sie unter Ressourcenlimits für Einzeldatenbanken, die das V-Kern-Kaufmodell verwenden.
- Informationen zu V-Kern-Ressourcenlimits für Pools für elastische Datenbanken finden Sie unter Ressourcenlimits für Pools für elastische Datenbanken, die das V-Kern-Kaufmodell verwenden.
- Informationen zu DTU-Ressourcenlimits für eine einzelne Datenbank finden Sie unter Ressourcenlimits für einzelne Datenbanken, die das DTU-Berechnungsmodell verwenden.
- Informationen zu DTU-Ressourcenlimits für Pools für elastische Datenbanken finden Sie unter Ressourcenlimits für Pools für elastische Datenbanken, die das DTU-Kaufmodell verwenden.
Verhindertes Abschneiden des Transaktionsprotokolls
Um herauszufinden, was in einem bestimmten Fall die Protokollkürzung verhindert, schlagen Sie in log_reuse_wait_desc in sys.databases nach. Der Wartezustand für die Protokollwiederverwendung informiert Sie darüber, welche Gründe verhindern, dass das Transaktionsprotokoll durch eine reguläre Protokollsicherung verkürzt wird. Weitere Informationen finden Sie unter sys.databases (Transact-SQL).
SELECT [name], log_reuse_wait_desc FROM sys.databases;
Für Azure SQL Database empfiehlt es sich, anstelle der master-Datenbank eine Verbindung mit einer bestimmten Benutzerdatenbank herzustellen, um diese Abfrage auszuführen.
Die folgenden Werte von log_reuse_wait_desc in sys.databases können den Grund angeben, warum die Verkürzung des Transaktionsprotokolls der Datenbank verhindert wird:
| Beschreibung der Protokollwiederverwendungswartezeit | Diagnose | Reaktion erforderlich |
|---|---|---|
NOTHING |
Typischer Zustand. Das Abschneiden des Protokolls wird nicht verhindert. | Nein. |
CHECKPOINT |
Für das Abschneiden des Logs ist ein Prüfpunkt erforderlich. Selten. | Keine Reaktion erforderlich, es sei denn, es hält an. Wenn das Problem besteht, reichen Sie eine Supportanfrage bei Azure Support ein. |
LOG BACKUP |
Eine Protokollsicherung ist erforderlich. | Keine Reaktion erforderlich, es sei denn, es hält an. Wenn das Problem besteht, reichen Sie eine Supportanfrage bei Azure Support ein. |
ACTIVE BACKUP OR RESTORE |
Eine Datenbanksicherung wird aktuell durchgeführt. | Keine Reaktion erforderlich, es sei denn, es hält an. Wenn das Problem besteht, reichen Sie eine Supportanfrage bei Azure Support ein. |
ACTIVE TRANSACTION |
Eine laufende Transaktion verhindert das Abschneiden des Protokolls. | Die Protokolldatei kann aufgrund von aktiven und/oder nicht abgeschlossenen Transaktionen nicht verkürzt werden. Siehe nächsten Abschnitt. |
REPLICATION |
In Azure SQL Database kann dies auftreten, wenn Change data capture (CDC) aktiviert ist. | Fragen Sie sys.dm_cdc_errors ab und beheben Sie die Fehler. Falls nicht aufgelöst werden kann, stellen Sie eine Supportanfrage mit Azure Support ein. |
AVAILABILITY_REPLICA |
Die Synchronisierung mit dem sekundären Replikat wird ausgeführt. | Keine Reaktion erforderlich, es sei denn, es hält an. Wenn das Problem besteht, reichen Sie eine Supportanfrage bei Azure Support ein. |
Protokollkürzung wird durch eine aktive Transaktion verhindert
Die häufigste Ursache für Transaktionsprotokolle, in denen keine neuen Transaktionen erfasst werden können, sind Transaktionen mit langer Ausführungszeit oder blockierte Transaktionen.
Führen Sie diese Beispielabfrage aus, um nicht abgeschlossene oder aktive Transaktionen und deren Eigenschaften zu finden.
- Gibt Informationen zu Transaktionseigenschaften aus sys.dm_tran_active_transactions zurück.
- Gibt Sitzungsverbindungsinformationen aus sys.dm_exec_sessions zurück.
- Gibt Anforderungsinformationen (für aktive Anforderungen) aus sys.dm_exec_requests zurück. Diese Abfrage kann auch verwendet werden, um blockierte Sitzungen zu ermitteln. Suchen Sie dazu nach
request_blocked_by. Weitere Informationen finden Sie unter Sammeln von Blockierungsinformationen. - Gibt den Text der aktuellen Anforderung oder den Eingabepuffertext unter Verwendung der DMV sys.dm_exec_sql_text oder sys.dm_exec_input_buffer zurück. Wenn der im
text-Feld vonsys.dm_exec_sql_textzurückgegebene Wert NULL lautet, ist die Anforderung nicht aktiv, sondern weist eine ausstehende Transaktion auf. In diesem Fall enthält dasevent_info-Feld vonsys.dm_exec_input_bufferdie letzte an die Datenbank-Engine übergebene Anweisung.
SELECT [database_name] = db_name(s.database_id)
, tat.transaction_id, tat.transaction_begin_time, tst.session_id
, session_open_transaction_count = tst.open_transaction_count
, transaction_duration_s = datediff(s, tat.transaction_begin_time, sysdatetime())
, input_buffer = ib.event_info
, request_text = CASE WHEN r.statement_start_offset = 0 and r.statement_end_offset= 0 THEN left(est.text, 4000)
ELSE SUBSTRING ( est.[text], r.statement_start_offset/2 + 1,
CASE WHEN r.statement_end_offset = -1 THEN LEN (CONVERT(nvarchar(max), est.[text]))
ELSE r.statement_end_offset/2 - r.statement_start_offset/2 + 1
END ) END
, request_status = r.status
, request_blocked_by = r.blocking_session_id
, transaction_state = CASE tat.transaction_state
WHEN 0 THEN 'The transaction has not been completely initialized yet.'
WHEN 1 THEN 'The transaction has been initialized but has not started.'
WHEN 2 THEN 'The transaction is active - has not been committed or rolled back.'
WHEN 3 THEN 'The transaction has ended. This is used for read-only transactions.'
WHEN 4 THEN 'The commit process has been initiated on the distributed transaction. This is for distributed transactions only. The distributed transaction is still active but further processing cannot take place.'
WHEN 5 THEN 'The transaction is in a prepared state and waiting resolution.'
WHEN 6 THEN 'The transaction has been committed.'
WHEN 7 THEN 'The transaction is being rolled back.'
WHEN 8 THEN 'The transaction has been rolled back.' END
, transaction_name = tat.name
, azure_dtc_state --Applies to: Azure SQL Database only
= CASE tat.dtc_state
WHEN 1 THEN 'ACTIVE'
WHEN 2 THEN 'PREPARED'
WHEN 3 THEN 'COMMITTED'
WHEN 4 THEN 'ABORTED'
WHEN 5 THEN 'RECOVERED' END
, transaction_type = CASE tat.transaction_type WHEN 1 THEN 'Read/write transaction'
WHEN 2 THEN 'Read-only transaction'
WHEN 3 THEN 'System transaction'
WHEN 4 THEN 'Distributed transaction' END
, tst.is_user_transaction
, local_or_distributed = CASE tst.is_local WHEN 1 THEN 'Local transaction, not distributed' WHEN 0 THEN 'Distributed transaction or an enlisted bound session transaction.' END
, transaction_uow --for distributed transactions.
, s.login_time, s.host_name, s.program_name, s.client_interface_name, s.login_name, s.is_user_process
, session_cpu_time = s.cpu_time, session_logical_reads = s.logical_reads, session_reads = s.reads, session_writes = s.writes
, observed = sysdatetimeoffset()
FROM sys.dm_tran_active_transactions AS tat
INNER JOIN sys.dm_tran_session_transactions AS tst on tat.transaction_id = tst.transaction_id
INNER JOIN Sys.dm_exec_sessions AS s on s.session_id = tst.session_id
LEFT OUTER JOIN sys.dm_exec_requests AS r on r.session_id = s.session_id
CROSS APPLY sys.dm_exec_input_buffer(s.session_id, null) AS ib
OUTER APPLY sys.dm_exec_sql_text (r.sql_handle) AS est;
Dateiverwaltung zur Freigabe von Speicherplatz
Wenn das Transaktionsprotokoll in Azure SQL-Datenbank-Elastikpools daran gehindert wird, verkürzt zu werden, kann das Freigeben von Speicherplatz für die Elastikpools Teil der Lösung sein. Es ist wesentlich, die Hauptursache zu beheben, die das Abschneiden der Transaktionsprotokolldatei verhindert. In einigen Fällen kann eine zeitintensive Transaktion durch das vorübergehende Freigeben von zusätzlichem Speicherplatz abgeschlossen werden, sodass sich die Bedingung, aufgrund derer das Abschneiden der Transaktionsprotokolldatei verhindert wurde, mit einer normalen Transaktionsprotokollsicherung auflösen lässt. Das Freigeben von Speicherplatz kann jedoch nur vorübergehend erleichtert werden, bis das Transaktionsprotokoll wieder wächst.
Weitere Informationen zum Verwalten des Dateiraums von Datenbanken und elastischen Pools finden Sie unter Manage-Dateibereich für Datenbanken in Azure SQL Database.
Fehler 40552: Die Sitzung wurde aufgrund übermäßiger Belegung des Speicherplatzes für das Transaktionsprotokoll beendet
40552: The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.
Probieren Sie die folgenden Methoden aus, um dieses Problem zu beheben:
- Das Problem kann bei jedem DML-Vorgang wie dem Einfügen, Aktualisieren oder Löschen auftreten. Überprüfen Sie die Transaktion, um unnötige Schreibvorgänge zu vermeiden. Versuchen Sie, die Anzahl der Zeilen zu verringern, die sofort ausgeführt werden, indem Sie Batchverarbeitung oder eine Aufteilung in mehrere kleinere Transaktionen implementieren. Weitere Informationen finden Sie unter So nutzen Sie Batchverarbeitung zur Leistungsverbesserung von SQL-Datenbankanwendungen.
- Das Problem kann aufgrund von Vorgängen zum Neuerstellen des Indexes auftreten. Es lässt sich vermeiden, indem Sie sicherstellen, dass die folgende Formel wahr ist: (Anzahl der in der Tabelle betroffenen Zeilen) multipliziert mit (durchschnittliche Größe des aktualisierten Felds in Byte + 80) < 2 GB. Bei großen Tabellen kann es sinnvoll sein, Partitionen zu erstellen und die Indexwartung nur für einige Partitionen der Tabelle durchzuführen. Weitere Informationen finden Sie unter Erstellen partitionierter Tabellen und Indizes.
- Versuchen Sie beim Durchführen von Masseneinfügungen mit dem Hilfsprogramm
bcp.exeoder derSystem.Data.SqlClient.SqlBulkCopy-Klasse, die Option-b batchsizeoderBatchSizezu verwenden, um die Anzahl der Zeilen zu beschränken, die bei jeder Transaktion auf den Server kopiert werden. Weitere Informationen finden Sie unter bcp Utility. - Wenn Sie einen Index mit der
ALTER INDEX-Anweisung neu erstellen, verwenden Sie die OptionenSORT_IN_TEMPDB = ON,ONLINE = ONundRESUMABLE=ON. Beim Einsatz von fortsetzbaren Indizes erfolgt das Abschneiden von Protokollen häufiger. Weitere Informationen finden Sie unter ALTER INDEX (Transact-SQL).
Hinweis
Weitere Informationen zu Ressourcengovernance-Fehlern finden Sie unter Fehler bei der Ressourcengovernance.
Verwandte Inhalte
- Verstehen und Lösen von Blockadeproblemen in der Azure SQL-Datenbank
- Beheben von Verbindungsproblemen und anderen Fehlern mit Azure SQL-Datenbank und Azure SQL Managed Instance
- Beheben von transienten Verbindungsfehlern in Azure SQL-Datenbank und SQL Managed Instance
- Fehlerbehebung bei Georeplikations-Redo-Verzögerung
- Problembehandlung bei Speichermangel-Fehlern
- Video: Bewährte Methoden zum Laden von Daten auf Azure SQL Database