Fragen zum Tempdb-Versionsspeicher


9

Wir sind heute auf einen Fehler gestoßen:

Fehler: 3967, Schweregrad: 17

und soweit ich das beurteilen kann, handelt es sich im Grunde genommen um einen Vollversionsspeicher. Dies hat einige Fragen aufgeworfen, die ich nur schwer beantworten konnte, da wir in meinem Shop diesen Fehler noch nie hatten:

  • Wenn es eine voreingestellte maximale Größe gibt (basierend auf der Gesamtgröße der Tempdb oder auf andere Weise), ist sie dynamisch?

  • Gibt es eine Einstellung, die es dynamisch macht, wenn es nicht ist?

  • Können wir darauf basierend Warnungen einrichten? (dh DMVs zur Verfolgung der Größe usw.)

Antworten:


7

Schweregrad 17 zeigt an, dass SQL Server keine erforderliche Ressource mehr hat. Dies wird normalerweise angezeigt, wenn in einer Datenbank nicht genügend Speicherplatz vorhanden ist. In diesem Fall scheint Tempdb zum Lesen festgeschriebener Snapshot-Isolationsversionszeilen für eine Abfrage verwendet zu werden, die auf Tempdb übertragen werden musste.

Dies kann durchaus vorkommen, wenn tempdb eine begrenzte maximale Größe hat und eine schlecht geschriebene Abfrage versucht wird, die beispielsweise einen sehr großen Cross-Join ausführt.

Mit dieser Abfrage können Sie die aktuelle Größe des Versionsspeichers in tempdb anzeigen:

SELECT *
FROM sys.dm_os_performance_counters dopc
WHERE dopc.counter_name LIKE 'Version %';

Technet hat einen interessanten Artikel zur Verwendung des Versionsspeichers unter https://technet.microsoft.com/en-us/library/cc966545.aspx#EDAA

Diese MSDN-Seite erwähnt den Fehler 3967:

Wenn tempdb nicht mehr über genügend Speicherplatz verfügt, erzwingt das Datenbankmodul, dass die Versionsspeicher verkleinert werden. Während des Verkleinerungsprozesses werden die am längsten laufenden Transaktionen, die noch keine Zeilenversionen generiert haben, als Opfer markiert. Für jede Opfertransaktion wird im Fehlerprotokoll eine Nachricht 3967 generiert. Wenn eine Transaktion als Opfer markiert ist, kann sie die Zeilenversionen im Versionsspeicher nicht mehr lesen. Wenn versucht wird, Zeilenversionen zu lesen, wird die Nachricht 3966 generiert und die Transaktion wird zurückgesetzt. Wenn der Verkleinerungsprozess erfolgreich ist, wird Speicherplatz in Tempdb verfügbar.

Keine der oben verlinkten Seiten enthält explizite Hinweise zur maximalen Größe des Versionsspeichers in Tempdb. Dies lässt mich glauben, dass die einzige Einschränkung die maximal konfigurierte Größe der Tempdb selbst ist, abzüglich des in Tempdb verwendeten Speicherplatzes andere Objekte.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.