Verwenden des Dienstprogramms "SQLDumper. exe" zum Generieren einer Speicherabbilddatei in SQL Server

Gilt für: SQL Server 2012 StandardSQL Server 2012 EnterpriseSQL Server 2012 Developer

Zusammenfassung


Das Dienstprogramm SQLDumper. exe ist im Lieferumfang von Microsoft SQL Server enthalten. In diesem Artikel wird beschrieben, wie Sie mithilfe des Dienstprogramms SQLDumper. exe eine Speicherabbilddatei für die Watson-Fehlerberichterstattung oder für Debugging-Aufgaben generieren.
Hinweisezusätzlich zum Dienstprogramm SQLDumper. exe sind die folgenden Methoden ebenfalls verfügbar:

Warnung Das Generieren von Prozess Speicherabbilddateien kann sich auf die Dienstverfügbarkeit (hier SQL Server) auswirken und Ressourcen-Failover in immer in Kontexten auslösen (sowohl Failover-Cluster Instanz als auch verfügbarkeitsgruppe). Die Optionen, die zum Generieren der Dumpdateien verwendet werden, machen einen großen Unterschied aus. Stellen Sie sicher, dass Sie die Auswirkungen der Abschnitte Dump-Generierung und Dump- Typen lesen.

Wenn Sie eine SQL Server-Prozess-Dumpdatei (besonders eine gefilterte Dumpdatei oder eine vollständige Dumpdatei) auf einem gruppierten SQL-Server oder einem SQL Server-Host einer AlwaysOn Availability Group (AG)-Instanz aufzeichnen, kann der gruppierte SQL Server oder die AG einen Failover zu einem anderen Knoten durchführen, wenn die Speicherabbilddatei zu lange dauert. Um das potenzielle Failover zu vermeiden, können Sie die folgenden Einstellungen verwenden, bevor Sie die Dumpdatei aufzeichnen, und Sie können die Änderung wiederherstellen, nachdem eine Speicherabbilddatei erstellt wurde:

  • Klicken Sie bei Clustered SQL Server (FCI) mit der rechten Maustaste auf SQL Server-Ressource in Cluster Administrator, und wählen Sie auf der Registerkarte Richtlinien die Option "Wenn die Ressource fehlschlägt, nicht neu starten" aus.
  • Wenden Sie für AG alle folgenden Einstellungen an:
    • Erhöhen Sie das Sitzungstimeout, beispielsweise 120 Sekunden für alle Replikate. Klicken Sie in SQL Server Management Studio mit der rechten Maustaste auf das zu konfigurierbare Replikat, und klicken Sie dann auf Eigenschaften. Ändern Sie das Feld Sitzungstimeout (Sekunden) in 120 Sekunden. Weitere Informationen finden Sie unter Ändern des Sitzungstimeout Zeitraums für ein verfügbarkeitsreplikat (SQL Server).
    • Ändern Sie das "automatische Failover" aller Replikate in "Manuelles Failover". Klicken Sie in SQL Server Management Studio mit der rechten Maustaste auf Replikat, wählen Sie Eigenschaftenaus, und ändern Sie dann auf der Registerkarte Eigenschaften das "automatische Failover" aller Replikate auf "Manuelles Failover". Weitere Informationen finden Sie unter Ändern des Failovermodus eines verfügbarkeitsreplikats (SQL Server).
    • Erhöhen Sie die "LeaseTimeout" auf 60.000 ms (60 Sekunden), und ändern Sie HealthCheckTimeout in 90.000 ms (90 Sekunden). Klicken Sie in der Cluster Verwaltung mit der rechten Maustaste auf AG-Ressource, wählen Sie Eigenschaftenaus, und wechseln Sie dann zur Registerkarte Eigenschaften , um beide Einstellungen zu ändern. Weitere Informationen finden Sie unter Konfigurieren von Einstellungen für HealthCheckTimeout-Eigenschaften.

Weitere Informationen


Manuelles Ausführen des Dienstprogramms "SQLDumper. exe"

Führen Sie das Hilfsprogramm SQLDumper. exe unter dem Kontext des Ordners aus, in dem SQL Server das Dienstprogramm ursprünglich installiert hat. Standardmäßig lautet der Installationspfad des Dienstprogramms SQLDumper. exe wie folgt:SQLServerInstallDrive: \Programme\Microsoft SQL Server\90\Shared\SQLDumper.exeHinweis SQLServerInstallDrive ist ein Platzhalter für das Laufwerk, auf dem Sie SQL Server 2005 installiert haben.Führen Sie die folgenden Schritte aus, um mithilfe des Dienstprogramms SQLDumper. exe eine Speicherabbilddatei zu generieren: 
  1. Öffnen Sie den folgenden Ordner: SQLServerInstallDrive: \Programme\Microsoft SQL Server \Number\SharedHinweisin diesem Ordnerpfad ist Number ein Platzhalter für eine der folgenden Optionen:
    • 140 für SQL Server 2017
    • 130 für SQL Server 2016
    • 120 für SQL Server 2014
    • 110 für SQL Server 2012
    • 100 für SQL Server 2008
    • 90 für SQL Server 2005
  2. Stellen Sie sicher, dass sich die Datei "dbghelp. dll" in diesem Ordner befindet.
  3. Klicken Sie auf Start und auf Ausführen, geben Sie cmd ein, und klicken Sie auf OK.
  4. Geben Sie an der Eingabeaufforderung folgenden Befehl ein, und drücken Sie die EINGABETASTE: cd SQLServerInstallDrive:\Program Files\Microsoft SQL Server\number\Shared HinweisIn diesem Ordnerpfad ist Number derselbe Platzhalter, der mit der SQL Server-Version wie zuvor beschrieben geändert wurde.
  5. Um eine bestimmte Art von Speicherabbilddatei zu generieren, geben Sie den entsprechenden Befehl an der Eingabeaufforderung ein, und drücken Sie dann die EINGABETASTE:
    • Vollständige Dumpdatei
      SQLDumper. exe Prozess -Nr. 0 0x01100
    • Mini-Dump-Datei
      SQLDumper. exe Prozess -Nr. 0 0x0120
    • Mini-Dump-Datei, die indirekt referenzierten Arbeitsspeicher umfasst. Dies ist die empfohlene Option und wird auch von SQL Server standardmäßig verwendet, wenn Speicherabbilder automatisch generiert werden.
      SQLDumper. exe Prozess -Nr. 0 0x0128
    • Gefilterte Dumpdatei
      SQLDumper. exe Prozess -Nr. 0 0x8100
    Hinweis die Prozess -ID ist ein Platzhalter für den Prozessbezeichner der Windows-Anwendung, für die Sie eine Speicherabbilddatei generieren möchten.
Wenn das Hilfsprogramm SQLDumper. exe erfolgreich ausgeführt wird, generiert das Dienstprogramm eine Speicherabbilddatei in dem Ordner, in dem das Dienstprogramm installiert ist.Die Dumpdatei, die vom Dienstprogramm SQLDumper. exe generiert wird, weist ein Dateinamenmuster auf, das wie folgt aussieht:
SQLDmprxxxx.mdmp
In diesem Muster ist xxxx eine zunehmende Zahl, die auf der Grundlage anderer Dateien bestimmt wird, die einen ähnlichen Dateinamen im gleichen Ordner aufweisen. Wenn Sie bereits Dateien in dem Ordner haben, die Dateinamen im angegebenen Muster aufweisen, müssen Sie möglicherweise das Datum und die Uhrzeit vergleichen, zu der die Datei erstellt wurde, um die gewünschte Datei zu identifizieren.

Weitere Informationen und Überlegungen

SQLDumper. exe besteht in erster Linie zum Generieren von Speicherabbildern für den SQL Server-Prozess in Szenarien, in denen ein Speicherabbild benötigt wird, um bestimmte Probleme zu beheben (Ausnahmen, Assertionen, nicht-yielding-Planer usw.). In solchen Fällen ruft SQL Server die SQLDumper. exe auf, um ein Speicherabbild des zugehörigen Prozesses zu generieren. Das Speicherabbild wird in einem Pfad gespeichert, der im SQL Server-Konfigurations-Manager mit einem Standardspeicherort-MSSQL\LOG\-Verzeichnis konfiguriert ist.  Wenn die Speicherabbild Größe in einigen Fällen zu groß ist, können Sie den Pfad wie folgt ändern: 

  1. Öffnen des SQL Server-Konfigurations-Managers
  2. Suchen Sie unter SQL Server- Dienste nach dem zu untersuchenden SQL Server.
  3. Klicken Sie mit der rechten Maustaste darauf, wählen Sie Eigenschaften aus, und wechseln Sie zur Registerkarte erweitert .
  4. Ändern Sie das Speicherabbild Verzeichnis auf den gewünschten Pfad, und klicken Sie auf OK.
  5. Starten Sie SQL Server (wenn möglich) neu, damit die neue Einstellung wirksam wird.

Wenn das Dienstprogramm SQLDumper. exe manuell zum Generieren einer Dumpdatei für eine beliebige Windows-Anwendung verwendet wird, ist die Speicherabbilddatei möglicherweise so groß wie der Speicher, den die Windows-Anwendung zurzeit verwendet. Stellen Sie sicher, dass ausreichend Speicherplatz auf dem Laufwerk zur Verfügung steht, auf dem das Hilfsprogramm SQLDumper. exe die Speicherabbilddatei schreibt.Sie können das Verzeichnis angeben, in dem das Hilfsprogramm SQLDumper. exe die Speicherabbilddatei schreiben soll. Das Verzeichnis muss bereits vorhanden sein, bevor Sie das Hilfsprogramm SQLDumper. exe ausführen. Andernfalls schlägt das Dienstprogramm SQLDumper. exe einen Fehler vor. Verwenden Sie keinen UNC-Pfad als Speicherort für die Speicherabbilddatei. Das folgende Beispiel zeigt, wie Sie den Speicherort der Dumpdatei der Mini Speicherdatei angeben:

  1. Klicken Sie auf Start und auf Ausführen, geben Sie cmd ein, und klicken Sie auf OK.
  2. Geben Sie an der Eingabeaufforderung folgenden Befehl ein, und drücken Sie die EINGABETASTE:
    cd SQLServerInstallDrive:\Program Files\Microsoft SQL Server\number\Shared
    Hinweis In diesem Ordnerpfad ist Number ein Platzhalter für eine der folgenden Optionen:
    • 140 für SQL Server 2017
    • 130 für SQL Server 2016
    • 120 für SQL Server 2014
    • 110 für SQL Server 2012
    • 100 für SQL Server 2008
    • 90 für SQL Server 2005
  3. Geben Sie den folgenden Befehl an der Eingabeaufforderung ein, und drücken Sie anschließend die EINGABETASTE: Sqldumper.exe ProcessID 0 0x0128 0 MdumpPath Hinweis MdumpPath ist ein Platzhalter für das Verzeichnis, in dem das Hilfsprogramm SQLDumper. exe die Speicherabbilddatei schreiben soll. Standardmäßig wird die Datei in den aktuellen Ordner geschrieben.
Wenn Sie eine vollständige Dumpdatei oder eine gefilterte Dumpdatei angeben, die generiert werden soll, kann das Hilfsprogramm SQLDumper. exe einige Minuten dauern, bis die Speicherabbilddatei generiert wurde. Die Uhrzeit hängt von den folgenden Variablen ab:
  • Die Größe des Arbeitsspeichers, den das Hilfsprogramm "SQLDumper. exe" zurzeit verwendet.
  • Die Geschwindigkeit des Laufwerks, auf das das Dienstprogramm die Speicherabbilddatei schreibt

Während dieser Zeit werden die Befehle vom Hilfsprogramm SQLDumper. exe nicht verarbeitet. Sie werden feststellen, dass der Server nicht mehr reagiert. Darüber hinaus kann ein Cluster-Failover erfolgen.Wenn Sie das Hilfsprogramm SQLDumper. exe ausführen möchten, müssen Sie sich mit einer der folgenden Methoden bei Windows anmelden:

  • Verwenden Sie ein Konto, das ein Mitglied der Gruppe "Administratoren" auf dem Computer ist.
  • Verwenden Sie das gleiche Benutzerkonto, unter dem der SQL Server-Dienst ausgeführt wird.
Damit das Hilfsprogramm SQLDumper. exe erfolgreich über den Remote Desktop oder über die Terminaldienste funktioniert, müssen Sie die Remote Desktop-oder Terminaldienste im Konsolenmodus starten. Wenn Sie beispielsweise den Remote Desktop im Konsolenmodus starten möchten, klicken Sie auf Start, klicken Sie auf Ausführen, geben Sie mstsc/Consoleein, und klicken Sie dann auf OK. Beachten Sie, dass die Option /Console automatisch ignoriert wird, wenn auf dem Zielserver Windows 2000 ausgeführt wird. Sie können über den Remote Desktop eine Verbindung mit dem Server herstellen. Die Konsolensitzung wird jedoch nicht verwendet.
Wenn Sie feststellen, dass im aktuellen Ordner keine Speicherabbilddatei generiert wurde, nachdem Sie das Hilfsprogramm SQLDumper. exe ausgeführt haben, überprüfen Sie die Informationen, die das Dienstprogramm in der Befehlszeile generiert hat, um zu versuchen, die mögliche Ursache für den Fehler zu ermitteln. Diese Informationen werden auch in der Sqldumper_errorlog. Log-Datei im aktuellen Verzeichnis protokolliert. Im folgenden sind zwei mögliche Fehlermeldungen und deren Ursachen zu finden:
Meldung 1
OpenProcess-Fehler 0x57-der Parameter ist falsch
Eine ungültige Prozess-ID wurde an das Hilfsprogramm SQLDumper. exe übergeben.
Meldung 2
Ungültiger Wert für Thread-ID – <Ungültiger Parameter> Parameterfehler
Ein ungültiger Parameter wurde an das Hilfsprogramm SQLDumper. exe übergeben.Wenn eine Fehlermeldung, die einer der folgenden ähnelt, generiert wird, können Sie diese Meldung bedenkenlos ignorieren: 
Unbekannter Rückruftyp während des Mini abtipps 6Unbekannter Rückruftyp während des Mini Dumps 7

Auswirkungen der Dump-Generierung

Wenn ein Dump eines Benutzermodus-Prozesses angefordert wird (wie in diesem Artikel beschrieben, um mit Betriebs System-Kernel-Dumps zu kontrastieren, die außerhalb unseres Bereichs liegen), wird der Zielprozess (hier SqlServer. exe) für die Dauer, die zum Serialisieren des Dump-Inhalts in das Datei Ziel benötigt wird, vollständig eingefroren .

"Fixiert" bedeutet, dass die Benutzeranforderung oder der Fortschritt eines internen Vorgangs, einschließlich aller ressourcenabruf Mechanismen wie der Implementierung der IsAlive-und LooksAlive von Windows-Clustern, nicht verarbeitet werden kann (Weitere Informationen zur Behandlung dieser Situation finden Sie im Abschnitt "Cluster-Failovers und dem Hilfsprogramm SQLDumper. exe". Ein Timeout, das sich auf die Wanduhr verlässt, kann auch als Folge des Einfrierens verletzt werden.

Wie aus der vorhergehenden Anweisung abgeleitet werden kann, ist die Dauer des Einfrierens daher der entscheidende Faktor hier, und Sie wird hauptsächlich durch Folgendes gesteuert:

  • Der Typ des ausgewählten Dumps
  • Die Größe des SQL Server-Prozesses im Arbeitsspeicher, die im Fall einer einzelnen aktiven Instanz, die Standardparameter ausführt, häufig dem gesamten physikalischen Arbeitsspeicher des Serversentspricht.
  • Die Leistung des Datenträgers, der als Ziel für den Dump verwendet wird.

Darüber hinaus sollte die Größe der Dumpdatei auf dem Datenträger geplant werden, insbesondere dann, wenn mehrere Speicher Abbilder eine Möglichkeit sind und große, nicht standardmäßige Speicherabbild Typen ausgewählt sind. Stellen Sie sicher, dass Sie den Abschnitt "dumptypen" überprüfen, um zu erfahren, was Sie erwarten. Standardmäßig werden einige Dump-Methoden den Dump im \Wartende Protokollthreads-Ordner der SQL Server-Instanz erstellen, der in der standardmäßigen einfachen Konfiguration auch Systemdatenträger und Daten + Protokolldatenträger für SQL Server ist. Wenn Sie diesen Datenträger in die Sättigung bringen, hat dies gravierende Auswirkungen auf die SQL Server-und/oder Systemverfügbarkeit.

In den neuesten Versionen von SQL Server wurden drei wichtige Verbesserungen hinzugefügt, um die Größe der Dumpdatei und/oder die Zeit für die Erstellung des Speicherabbilds zu verringern:
  • Bitmap-Filtermechanismus
  • Eliminierung wiederholter Dumps zum gleichen Problem
  • Verkürzte Ausgabe im Fehlerprotokoll
 

Bitmap-Filterung: durch einen neuen Bitmap-Filtermechanismus, der SQL Server 2019 und SQL Server 2017 hinzugefügt wurde, wurde die optimierte Filter Speichergeschwindigkeit und die reduzierte Größe erreicht.SQL Server ordnet eine Bitmap zu, die Speicherseiten nachverfolgt, um von einem gefilterten Dump ausgeschlossen zu werden. SQLDumper. exe liest die Bitmap und filtert Seiten, ohne dass andere Speicher-Manager-Metadaten gelesen werden müssen. Die folgenden Meldungen werden im SQL Server-Fehlerprotokoll angezeigt, wenn die Bitmap aktiviert oder deaktiviert ist: "Seiten Ausschluß-Bitmap ist aktiviert" und "Seiten Ausschluß-Bitmap ist deaktiviert".

SQL Server 2016

  • Beginnend mit SQL Server 2016 SP2 CU13 ist die Bitmap-Filterung standardmäßig aktiviert.

SQL Server 2017

  • Dies steht in RTM über CU15 nicht zur Verfügung.
  • In SQL Server 2017 CU16 können Sie die Bitmap-Filterung über T8089 aktivieren und deaktivieren, indem Sie T8089
  • Beginnend mit SQL Server 2017 CU20 ist die Bitmap-Filterung standardmäßig aktiviert. Das Ablaufverfolgungsflag T8089 wird nicht mehr angewendet und wird ignoriert, wenn es aktiviert ist. Die Bitmap-Filterung kann über T8095 deaktiviert werden.

SQL Server 2019

Dies ist standardmäßig in SQL Server 2019 RTM aktiviert. Sie kann über T8095 deaktiviert werden.

 
Eliminierung wiederholter Dumps zum gleichen Problem: Repeated-Speicherabbilder für das gleiche Problem werden nun eliminiert. Mit einer Stapel Signatur verfolgt das SQL-Modul nach, ob bereits eine Ausnahme aufgetreten ist, und es wird kein neues Speicherabbild erstellt, wenn bereits eine vorhanden ist. Dies gilt für Zugriffsverletzungen, Stapelüberlauf, Asserts-und Index Beschädigungs Ausnahmen. Dadurch wird der von Speicherabbildern verwendete Speicherplatz erheblich reduziert, und der Prozess wird vorübergehend nicht fixiert, um einen Dump zu generieren. Dies wurde in SQL Server 2019 hinzugefügt.
 
Verkürzte Ausgabe im Fehlerprotokoll:Der Inhalt, der im SQL Server-Fehlerprotokoll von einem einzelnen Speicherabbild generiert wurde, kann nicht nur überwältigend sein, sondern auch den Prozess der Generierung eines Speicherabbilds verlangsamen, weil alle diese Informationen in ein Text Format im Fehlerprotokoll serialisiert werden mussten. In SQL Server 2019 wurden die im Fehlerprotokoll gespeicherten Inhalte nach der Dump-Generierung stark reduziert, und Sie können wie folgt aussehen:
 
DateTime SPIDSPID * * Dump Thread-SPID = 0, EC = 0x0000015C7169BF40
DateTime -SPIDSPID *
DateTime SPIDSPID * Benutzer initiierter Stapelspeicher. Hierbei handelt es sich nicht um einen Serverausnahme Dump.
DateTime -SPIDSPID *
DiePID -Stapel Signatur der DateTime -SPID für den Dump lautet 0x00000000788399E5
DateTime SPIDSPID externer dumpprozess Rückgabecode 0x20000001.
Der externe dumpprozess hat keine Fehler zurückgegeben.
 

Zuvor hat SQL Server Informationen für jede Sitzung/jeden Thread gedruckt, wenn beispielsweise ein manuelles Dump vom Benutzer ausgelöst wurde. 

Speicherauszugs Typen

Die beschriebenen Methoden sind in der Lage, drei verschiedene Typen von Dumps zu generieren: Mini-Dumps, vollständige Dumps und gefilterte Dumps.

Mini Dumps mit referenziertem Arbeitsspeicher sind eine Momentaufnahme aller aktiven Threads des Prozesses ("Threadstapel") zusammen mit einem limitierten Auszug des Arbeitsspeichers, auf den die Threadstapel und einige andere wichtige Prozess-/Thread Daten verweisen. Sie sind in der Regel ein paar Megabyte groß und können sehr schnell generiert werden (weniger als eine Sekunde bis ein paar Sekunden). Selbst größere Server Systeme (mit Hunderten von CPUs, die eine große Anzahl von Threads im SQL Server-Prozess indirekt antreiben) werden nur selten 20-30 MB überschreiten: die Größe eines Mini Dumps wächst nicht mit der Größe des SQL Server-Prozesses. Dieser dumptyp ist der von SQL Server verwendete Standardtyp beim automatischen Generieren von Speicherabbildern für Ausnahmen, Planungsprobleme, Latch-Probleme usw.

Beachten Sie, dass SQL Server im Rahmen der integrierten Instrumentation in bestimmten Situationen automatisierte "Diagnose-Mini Speicher" generiert. Dieser Vorgang wird daher als sicher genug eingestuft, damit SQL Server ihn bei Bedarf automatisch auslösen kann.

Vollständige Dumps sind eine vollständige Kopie des aktiven Zielprozess Speichers. Dazu gehören alle Threadstatus, der gesamte Prozess zugewiesene Arbeitsspeicher und alle geladenen Module. Vollständige Dumps haben daher eine Größe, die etwa dem SQL Server-Prozess entspricht, was wiederum fastso groß wie der Gesamtsystem-RAM sein kann.Auf umfangreichen Servern, die einer einzelnen SQL Server-Instanz gewidmet sind, kann dies eine Datei bedeuten, die mehrere hundert Gigabyte oder mehr beträgt. Unnötig zu sagen, dass eine solche Datei viel Zeit in Anspruch nimmt, um verlängerter Reinigungsweg-Freeze zu erzeugen. Die Datenträgerleistung für das Datei Ziel des Dumps ist ein wichtiger Treiber zum Fixieren der Zeit. Beachten Sie, dass diese Art von Dump heute sehr selten für SQL Server verwendetwird, da die Beschreibung des nächsten Typs erläutert wird.

Gefilterte Dumps: da die RAM-Größe von typischen Servern mit SQL Server kontinuierlich zugenommen hat, wurden vollständige Dumps immer unhandlicher. Daher wurden gefilterte Dumps implementiert: Sie sind eine Teilmenge der vollständigen Dumps, bei denen große Speicherstrukturen, die sich auf SQL Server beziehen, absichtlich ignoriert und nicht auf die Festplatte serialisiert werden, da Sie keinen zusätzlichen Wert für die Problembehandlung liefern (in der Regel Daten/Indexseiten, einige interne Caches wie Hekaton-Datenseiten und Protokoll Pool Speicher). Dies führt zu einer Datei, die kleiner als ein vollständiges Dump ist, wobei fast alle ihre Nützlichkeit beibehalten wird, und dies hat in den meisten Fällen, in denen Mini Dumps nicht ausreichten, vollständige Dumps als bevorzugte Option ersetzt. Die Größe verkleinern vs Full Dump kann sehr unterschiedlich sein, aber es ist immer noch eine ziemlich große Datei, die häufig 30-60% der SQL Server-Prozessgröße ist, daher empfiehlt es sich, eine mögliche Größe so groß wie ein vollständiges Dump zu planen, was eine gute Sicherheitsmarge hinterlassen sollte. Beachten Sie, dass die Generierung eines gefilterten Dumps möglicherweise nicht unbedingt schneller als ein vollständiges Dump in jedem Fall ist: Es geht darum, ob die mit der Anzahl von IO verbundenen Gewinne die für die Implementierung der Filterlogik erforderliche Zeit überschreiten (daher wird dies durch Datenträgergeschwindigkeit und CPU/RAM-Geschwindigkeit beeinflusst).

Sie können das Dienstprogramm SQLDumper. exe verwenden, um eine Speicherabbilddatei bei Bedarf für eine beliebige Microsoft Windows-Anwendung zu generieren. So können Sie beispielsweise eine Speicherabbilddatei zum Debuggen eines Anwendungsproblems generieren, wenn ein Computer, auf dem Microsoft SQL Server ausgeführt wird, nicht auf Benutzeranforderungen reagiert. Eine Speicherabbilddatei kann eine Mini Speicherdatei oder eine vollständige Dumpdatei sein. Eine gefilterte Speicherabbilddatei ist nur im Kontext von SQL Server anwendbar und sinnvoll..Allerdings können Sie das Hilfsprogramm SQLDumper. exe nicht für das allgemeine Debuggen verwenden. Weitere Informationen zum allgemeinen Debugging finden Sie auf der folgenden Microsoft-Website:

http://www.microsoft.com/whdc/devtools/debugging/default.mspx

Der SQL Server-Prozess ruft intern das Hilfsprogramm SQLDumper. exe auf, um eine Speicherabbilddatei zu generieren, wenn der Prozess Ausnahmen erfährt. SQL Server übergibt Flags an das Hilfsprogramm SQLDumper. exe. Sie können Ablaufverfolgungsflags verwenden, um die Flags zu ändern, die SQL Server im Kontext einer Ausnahme oder im Kontext einer Assertion an das Dienstprogramm übergibt. Diese Ablaufverfolgungsflags liegen im Bereich von 2540 bis 2559. Sie können diese Ablaufverfolgungsflags verwenden, um bestimmte Typen von Speicherabbilddateien zu generieren. Beispiel:

  • Ablaufverfolgungsflag 2551: erstellt einen gefilterten Speicherauszug
  • Ablaufverfolgungsflag 2544: erstellt ein vollständiges Speicherabbild
  • Ablaufverfolgungsflag 8026: SQL Server löscht einen Dump-Trigger, nachdem der Dump einmal generiert wurde.

Wenn zwei oder mehr Ablaufverfolgungsflags aktiv sind, wird die Option, die das größte Speicherabbild angibt, berücksichtigt. Wenn beispielsweise Ablaufverfolgungs-Flags 2551 und 2544 verwendet werden, erstellt SQL Server ein vollständiges Speicherabbild.

So erhalten Sie eine Microsoft Windows-Anwendungsprozess-ID

Zum Generieren einer Speicherabbilddatei mithilfe des Dienstprogramms SQLDumper. exe müssen Sie über die Prozess-ID der Windows-Anwendung verfügen, für die Sie eine Speicherabbilddatei generieren möchten. Führen Sie die folgenden Schritte aus, um den Prozessbezeichner zu erhalten:

  1. Drücken Sie STRG + ALT + ENTF, und klicken Sie dann auf Task-Manager.
  2. Klicken Sie im Dialogfeld Windows-Task-Manager auf die Registerkarte Prozesse .
  3. Klicken Sie im Menü Ansicht auf Spalten auswählen.
  4. Aktivieren Sie im Dialogfeld Spalten auswählen das Kontrollkästchen PID (Prozessbezeichner) , und klicken Sie dann auf OK.
  5. Beachten Sie den Prozessbezeichner der Windows-Anwendung, für die Sie eine Speicherabbilddatei generieren möchten. Beachten Sie für die SQL Server-Anwendung die Prozess-ID des sqlservr. exe-Prozesses.
  6. Schließen Sie den Task-Manager.

Sie können auch die Prozess-ID der SQL Server-Anwendung abrufen, die auf Ihrem Computer ausgeführt wird, indem Sie die SQL Server-Fehlerprotokolldatei verwenden. Ein Teil der SQL Server-Fehlerprotokolldatei sieht beispielsweise wie folgt aus:

Date/Time Server Microsoft SQL Server 2005-9.00.1399.06 (Intel x86)Datum/UhrzeitCopyright (c) 1988-2005 Microsoft CorporationEnterprise Edition unter Windows NT 5,2 (Build 3790: Service Pack 1)Datum/Uhrzeit Server (c) 2005 Microsoft Corporation.Date/Time Server alle Rechte vorbehalten.Date/Time Server Server-Prozess-ID ist 3716.

Die Nummer, die nach der Server Prozess-ID angezeigt wird, ist die Prozesskennung für den Prozess sqlservr. exe.

Cluster-Failovers und das Hilfsprogramm "SQLDumper. exe"

In Cluster-Failover-Szenarien kann die SQL Server-Ressourcen-DLL nun eine Speicherabbilddatei abrufen, bevor das Failover stattfindet. Wenn die SQL Server-Ressourcen-DLL feststellt, dass eine SQL Server-Ressource fehlgeschlagen ist, verwendet die SQL Server-Ressourcen-DLL das Hilfsprogramm SQLDumper. exe, um eine Speicherabbilddatei des SQL Server-Prozesses zu erhalten. Wenn Sie sicherstellen möchten, dass das Hilfsprogramm SQLDumper. exe die Speicherabbilddatei erfolgreich generiert, müssen Sie die folgenden drei Eigenschaften als Voraussetzungen fest legen:
  • SqlDumperDumpTimeOut Ein benutzerdefiniertes Timeout. Die Ressourcen-DLL wartet darauf, dass die Speicherabbilddatei abgeschlossen wird, bevor die Ressourcen-DLL den SQL Server-Dienst beendet.
  • SqlDumperDumpPath Der Speicherort, an dem das Hilfsprogramm SQLDumper. exe die Speicherabbilddatei generiert.
  • SqlDumperDumpFlags Flags, die das Dienstprogramm SQLDumper. exe verwendet.

Wenn eine der Eigenschaften nicht eingerichtet ist, kann das Hilfsprogramm SQLDumper. exe die Speicherabbilddatei nicht generieren. Eine Warnmeldung wird sowohl im Ereignisprotokoll als auch im Clusterprotokoll protokolliert, sobald die Ressource online geschaltet wird.

Für SQL Server 2012 und höher

Sie können den Befehl Alter Server Configuration (T-SQL) verwenden, um diese Eigenschaften zu ändern. Beispiel:

Alter Server-Konfigurationssatz-Failover-Cluster Eigenschaft SqlDumperDumpTimeOut = 0;

Alter Server-Konfigurationssatz-Failover-Cluster Eigenschaft SqlDumperDumpPath = ' C:\temp\ ';

Alter Server-Konfigurationssatz-Failover-Cluster Eigenschaft SqlDumperDumpFlags = 296;

Alternativ können Sie PowerShell-Skripts verwenden. Beispiel für eine benannte Instanz sql2017a:

Get-ClusterResource-Name "SQL Server (SQL2017AG)" | Satz-Clusterparameter-Name "SqlDumperDumpPath"-Wert "C:\temp"

Get-ClusterResource-Name "SQL Server (SQL2017AG)" | Satz-Clusterparameter-Name "SqlDumperDumpFlags"-Wert 296

Get-ClusterResource-Name "SQL Server (SQL2017AG)" | Satz-Clusterparameter-Name "SqlDumperDumpTimeOut"-Wert 0

Um zu überprüfen, ob die Einstellungen angewendet wurden, können Sie diesen PowerShell-Befehl ausführen:

Get-ClusterResource-Name "SQL Server (SQL2017AG)" | Get-Clusterparameter

Für SQL Server 2008/2008 R2 oder Windows 2012 und früher

Verwenden von DBCC STACKDUMP

Die DBCC STACKDUMP Befehl kann Ihnen beim Erstellen eines Speicherabbilds im Protokollverzeichnis Ihrer SQL Server-Instanzen helfen. Der Befehl erstellt standardmäßig ein Miniabbild mit allen Threads, die über eine begrenzte Größe verfügen und den Status des SQL Server-Prozesses entsprechend darstellen. Führen Sie einfach den folgenden Befehl in einem SQL Server-Client aus:

DBCC STACKDUMP

Um diese Methode zum Erstellen eines gefilterten Dumps zu aktivieren, aktivieren Sie Ablaufverfolgungsflags 2551 mit folgendem Befehl:

dbcc traceon(2551, -1) godbcc stackdump

Verwenden Sie zum Erstellen eines vollständigen Dumps das Ablaufverfolgungsflag 2544.

Hinweis nachdem Sie die Speicherabbilddatei abgerufen haben, sollten Sie das Ablaufverfolgungsflag deaktivieren, indem Sie den folgenden Befehl verwenden, um zu vermeiden, dass alle weiteren Selbstdiagnose-Miniabbilder von SQL Server versehentlich auf größere Dumps aktualisiert werden:

DBCC TRACEOFF (TraceNumber, -1);   GO

Wobei tracenumber das Ablaufverfolgungsflag ist, das Sie zuvor wie 2551 oder 2544 aktiviert haben.

Wenn Sie nicht sicher sind, welches Ablaufverfolgungsflag weiterhin aktiv ist, können Sie Folgendes ausführen:

DBCC TRACESTATUS(-1)

Eine leere Ergebnismenge gibt an, dass kein traceflag aktiv ist. Wenn 2551 jedoch weiterhin aktiv ist, sehen Sie Folgendes:

Globale Sitzung des TraceFlag-Status

--------- ------ ------ -------

2551 1 1 0

HinweisDas von DBCC TRACEON aktivierte TraceFlags wird nach einem Neustart des Diensts zurückgesetzt (entfernt).

Verwenden eines PowerShell-Skripts zum Generieren einer Speicherabbilddatei mit SQLDumper. exe

  • Speichern Sie den folgenden Code als PS1-Datei, beispielsweise SQLDumpHelper. ps1:
  • Führen Sie es über die EingabeAufforderung als Administrator aus, indem Sie den folgenden Befehl verwenden:
    Powershell.exe -File SQLDumpHelper.ps1
  • Oder führen Sie es über die Windows PowerShell-Konsoleaus, und führen Sie den folgenden Befehl als Administrator aus:
    .\SQLDumpHelper.ps1

Hinweis Wenn Sie noch nie PowerShell-Skripts auf Ihrem System ausgeführt haben, wird möglicherweise die folgende Fehlermeldung angezeigt:

Datei... SQLDumpHelper. ps1 kann nicht geladen werden, da ausgeführte Skripts auf diesem System deaktiviert sind.

Sie müssen die Möglichkeit zur Ausführung mithilfe der folgenden Schritte aktivieren:

  1. Starten Sie die Windows PowerShell-Konsole mit der Option "als Administrator ausführen". Nur Mitglieder der Gruppe Administratoren auf dem Computer können die Ausführungsrichtlinie ändern.
  2. Aktivieren Sie das Ausführen von nicht signierten Skripts mit dem folgenden Befehl:
    Set-ExecutionPolicy RemoteSigned

    Hinweis Hiermit können Sie nicht signierte Skripts ausführen, die Sie auf dem lokalen Computer erstellen, und signierte Skripts aus dem Internet.