Delen via


Het hulpprogramma Sqldumper.exe gebruiken om een dumpbestand te genereren in SQL Server

Dit artikel bevat algemene richtlijnen voor het hulpprogramma Sqldumper.exe dat deel uitmaakt van SQL Server. Dit hulpprogramma wordt gebruikt om verschillende soorten dumpbestanden te genereren.

Oorspronkelijke productversie: SQL Server 2019, SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012, SQL Server 2008, SQL Server 2005
Origineel KB-nummer: 917825

Samenvatting

Het hulpprogramma Sqldumper.exe is opgenomen in Microsoft SQL Server. Het genereert geheugendumpbestanden van SQL Server en gerelateerde processen voor foutopsporing. In dit artikel wordt beschreven hoe u Sqldumper.exe gebruikt om een dumpbestand te genereren voor watson-foutrapportage- of foutopsporingstaken.

In het artikel worden ook twee andere methoden beschreven om dumpbestanden te genereren:

  • Met het bijgevoegde PowerShell-script worden SQLDumper.exe opdrachtregelopties geautomatiseerd.
  • De opdracht DBCC STACKDUMP Transact-SQL (T-SQL) kan worden gebruikt om een dumpbestand te genereren in SQL Server.

Sqldumper.exe handmatig uitvoeren

Voer het hulpprogramma Sqldumper.exe uit in de context van de map waarin SQL Server het hulpprogramma oorspronkelijk hebt geïnstalleerd.

Het installatiepad van Sqldumper.exe is <standaard SQLServerInstall Drive>:\Program Files\Microsoft SQL Server\90\Shared\SQLDumper.exe. U ziet dat <SQLServerInstall Drive> een tijdelijke aanduiding is voor het station waarop u SQL Server hebt geïnstalleerd.

Voer de volgende stappen uit om een dumpbestand te genereren met behulp van het hulpprogramma Sqldumper.exe:

  1. Open <SQLServerInstall Drive>:\Program Files\Microsoft SQL Server\<number>\Shared folder.

    In dit mappad <is getal> een tijdelijke aanduiding voor een van de volgende:

    • 150 voor SQL Server 2019
    • 140 voor SQL Server 2017
    • 130 voor SQL Server 2016
    • 120 voor SQL Server 2014
    • 110 voor SQL Server 2012
    • 100 voor SQL Server 2008
    • 90 voor SQL Server 2005
  2. Zorg ervoor dat het Dbghelp.dll bestand zich in deze map bevindt.

  3. Selecteer Start>Run, typ cmd en selecteer vervolgens OK.

  4. Typ de volgende opdracht bij de opdrachtprompt en druk op Enter:

    cd <SQLServerInstall Drive>:\Program Files\Microsoft SQL Server\<number>\Shared
    

    Opmerking

    In dit mappad <is nummer> dezelfde tijdelijke aanduiding die verandert met de SQL Server-versie, zoals eerder is beschreven.

  5. Als u een specifiek type dumpbestand wilt genereren, typt u de bijbehorende opdracht bij de opdrachtprompt en drukt u op Enter:

    • Volledig dumpbestand:

      Sqldumper.exe <ProcessID> 0 0x01100
      
    • Minidumpbestand:

      Sqldumper.exe <ProcessID> 0 0x0120
      
    • Minidumpbestand met indirect geheugen waarnaar wordt verwezen (dit is de aanbevolen optie en wordt ook standaard gebruikt door SQL Server wanneer het automatisch geheugendumpbestanden genereert):

      Sqldumper.exe <ProcessID> 0 0x0128
      
    • Gefilterd dumpbestand:

      Sqldumper.exe <ProcessID> 0 0x8100
      

    Opmerking

    <ProcessID> is een tijdelijke aanduiding voor de proces-id van de Windows-toepassing waarvoor u een dumpbestand wilt genereren.

Als Sqldumper.exe wordt uitgevoerd, genereert het hulpprogramma een dumpbestand in de map waarin het hulpprogramma is geïnstalleerd.

Het dumpbestand dat Sqldumper.exe genereert, heeft een bestandsnaampatroon dat lijkt op SQLDmpr<xxxx.mdmp>.

In dit patroon <is xxxx> een toenemend aantal dat wordt bepaald op basis van andere bestanden met een vergelijkbare bestandsnaam in dezelfde map. Als u al bestanden in de map hebt met bestandsnamen in het opgegeven patroon, moet u mogelijk de datum en tijd vergelijken waarop het bestand is gemaakt om het gewenste bestand te identificeren.

Een Microsoft Windows-toepassingsproces-id verkrijgen

Als u een dumpbestand wilt genereren met behulp van het hulpprogramma Sqldumper.exe, moet u beschikken over de proces-id van de Windows-toepassing waarvoor u een dumpbestand wilt genereren. U kunt de proces-id als volgt verkrijgen:

  1. Druk op Ctrl+Alt+Delete en selecteer Taakbeheer.
  2. Selecteer in het dialoogvenster Windows Taakbeheer het tabblad Processen .
  3. Selecteer in het menu Beeldde optie Kolommen selecteren.
  4. Schakel in het dialoogvenster Kolommen selecteren het selectievakje PID (proces-id) in en selecteer vervolgens OK.
  5. Noteer de proces-id van de Windows-toepassing waarvoor u een dumpbestand wilt genereren. Noteer voor de SQL Server toepassing de proces-id van het Sqlservr.exe proces.
  6. Sluit Taakbeheer.

U kunt ook het SQL Server-foutenlogboekbestand gebruiken om de proces-id op te halen van de SQL Server toepassing die op uw computer wordt uitgevoerd. Een deel van het SQL Server foutenlogboekbestand lijkt op het volgende voorbeeld:

2021-09-15 11:50:32.690 Server       Microsoft SQL Server 2019 (RTM-CU12) (KB5004524) - 15.0.4153.1 (X64)
    Jul 19 2021 15:37:34
    Copyright (C) 2019 Microsoft Corporation
    Enterprise Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19043: ) (Hypervisor)
2021-09-15 11:50:32.690 Server       UTC adjustment: -5:00
2021-09-15 11:50:32.690 Server       (c) Microsoft Corporation.
2021-09-15 11:50:32.690 Server       All rights reserved.
2021-09-15 11:50:32.690 Server       Server process ID is 7028.

Het nummer dat na Server process ID wordt weergegeven, is de proces-id voor het Sqlservr.exe proces.

Uitvoerpad voor geheugendumpbestanden

SQLDumper.exe bestaat voornamelijk voor het genereren van geheugendumpbestanden voor het SQL Server proces in scenario's waarin een geheugendump nodig is om specifieke problemen op te lossen (zoals uitzonderingen, asserts, niet-opleverende schedulers). In dergelijke gevallen roept SQL Server de SQLDumper.exe aan om een geheugendumpbestand van het proces te genereren. Standaard wordt het geheugendumpbestand opgeslagen in de map MSSQL\LOG\ van sql-exemplaar.

Het standaardpad wijzigen

Als de grootte van het dumpbestand bijvoorbeeld te groot is, kunt u het pad als volgt wijzigen:

  1. Open SQL Server Configuration Manager.
  2. Zoek onder SQL Server Services het SQL Server exemplaar dat wordt onderzocht.
  3. Klik met de rechtermuisknop op die vermelding, selecteer Eigenschappen en ga vervolgens naar het tabblad Geavanceerd .
  4. Wijzig de dumpmap in het gewenste pad en selecteer VERVOLGENS OK.
  5. Start SQL Server (indien mogelijk) opnieuw om de nieuwe instelling van kracht te laten worden.

Wanneer het hulpprogramma Sqldumper.exe handmatig wordt gebruikt om een dumpbestand te genereren voor een Windows-toepassing, kan het dumpbestand net zo groot zijn als het geheugen dat de Windows-toepassing momenteel gebruikt. Zorg ervoor dat er voldoende schijfruimte beschikbaar is op het station waarnaar Sqldumper.exe het dumpbestand schrijft.

Een aangepaste uitvoermap opgeven in de opdracht

U kunt de map opgeven waarin het hulpprogramma Sqldumper.exe het dumpbestand moet schrijven. De map moet al bestaan voordat u Sqldumper.exe uitvoert. Anders mislukt Sqldumper.exe. Gebruik geen UNC-pad als locatie voor het dumpbestand. Hier volgt een voorbeeld van het opgeven van de locatie van het dumpbestand van het minidumpbestand:

  1. Selecteer Start>Run, typ cmd en selecteer vervolgens OK.

  2. Typ de volgende opdracht bij de opdrachtprompt en druk op Enter:

    cd <SQLServerInstall Drive>:\Program Files\Microsoft SQL Server\<number>\Shared
    
  3. Typ de volgende opdracht bij de opdrachtprompt en druk op Enter:

    Sqldumper.exe ProcessID 0 0x0128 0 <MdumpPath>
    

    Opmerking

    <MdumpPath> is een tijdelijke aanduiding voor de map waarin het hulpprogramma Sqldumper.exe het dumpbestand moet schrijven. Het bestand wordt standaard naar de huidige map geschreven.

Als u een volledig dumpbestand of een gefilterd dumpbestand opgeeft dat moet worden gegenereerd, kan Sqldumper.exe enkele minuten duren om het dumpbestand te genereren. De tijd die nodig is, is afhankelijk van de volgende variabelen:

  • De hoeveelheid geheugen die Sqlservr.exe momenteel gebruikt.
  • De snelheid van het station waarnaar het hulpprogramma het dumpbestand schrijft.

Gedurende deze tijd verwerkt het hulpprogramma Sqldumper.exe geen opdrachten. U ziet dat de server niet meer reageert. Daarnaast kan er een clusterfailover optreden.

Machtigingsvereisten

Als u Sqldumper.exe wilt uitvoeren, moet u zich op een van de volgende manieren aanmelden bij Windows:

  • Gebruik een account dat lid is van de beheerdersgroep op de computer.
  • Gebruik hetzelfde gebruikersaccount waaronder de SQL Server-service wordt uitgevoerd.

Het hulpprogramma Sqldumper.exe werkt alleen goed via Extern bureaublad of via Terminal Services als u Extern bureaublad of Terminal Services in de consolemodus start. Als u extern bureaublad bijvoorbeeld wilt starten in de consolemodus, selecteert u Uitvoeren starten>, typt u mstsc /console en selecteert u vervolgens OK. Als op de doelserver Windows 2000 wordt uitgevoerd, wordt de optie /console op de achtergrond genegeerd. U kunt verbinding maken met de server via Extern bureaublad, maar u gebruikt de consolesessie niet.

Als u merkt dat er geen dumpbestand is gegenereerd in de huidige map nadat u Sqldumper.exe hebt uitgevoerd, bekijkt u de informatie die het hulpprogramma heeft gegenereerd op de opdrachtregel om te proberen de mogelijke oorzaak van de fout te achterhalen. Deze informatie wordt ook vastgelegd in het Sqldumper_errorlog.log-bestand in de huidige map. Hier volgen twee mogelijke foutberichten en de bijbehorende oorzaken:

Bericht Oorzaak
"OpenProcess mislukt 0x57 - De parameter is onjuist" Er is een ongeldige proces-id doorgegeven aan het hulpprogramma Sqldumper.exe.
'Ongeldige waarde voor thread-id - <ongeldige parameterparameterfout> ' Er is een ongeldige parameter doorgegeven aan het hulpprogramma Sqldumper.exe.

Als er een foutbericht wordt gegenereerd dat lijkt op een van de volgende, kunt u dit bericht veilig negeren:

  • "Onbekend callbacktype tijdens minidump 6"
  • "Onbekend callbacktype tijdens minidump 7"

Impact van dumpgeneratie

Wanneer een dumpbestand van een proces in de gebruikersmodus wordt aangevraagd (zoals in dit artikel wordt besproken, in tegenstelling tot kerneldumps van het besturingssysteem, die buiten ons bereik vallen), wordt het doelproces (hier SQLServer.exe) geblokkeerd voor de duur die nodig is om de dumpinhoud te serialiseren naar het bestandsdoel.

Geblokkeerd betekent dat het proces geen gebruikersaanvragen of interne bewerkingen kan uitvoeren, met inbegrip van een mechanisme voor resourcepeiling, zoals de implementatie van IsAlive en Looks Alive van Windows Clustering (zie de sectie Geheugendumps bij clusterfailovers voor meer informatie over hoe u met die situatie omgaat). Elke time-out die afhankelijk is van de kloktijd van de wand, kan ook worden geschonden vanwege de blokkering.

Zoals uit de vorige verklaring kan worden afgeleid, is de duur van de blokkering hier daarom de kritieke factor en wordt deze bepaald door het volgende:

  • Het type dump dat is geselecteerd.
  • De grootte van SQL Server proces in het geheugen, dat in het geval van één actief exemplaar waarop standaardparameters worden uitgevoerd, vaak dicht bij het totale fysieke RAM-geheugen van de server ligt.
  • De prestaties van de schijf die wordt gebruikt als doel voor de dump.

Bovendien moet de grootte van het dumpbestand op schijf worden gepland, met name als meerdere dumps mogelijk zijn en als er grote, niet-standaarddumptypen zijn geselecteerd. Controleer de dumptypen om te weten wat u kunt verwachten. Bij sommige dumpmethoden wordt de dump standaard gemaakt in de map \Log van SQL Server instance. In de standaard eenvoudige configuratie worden ook de systeemschijf en data+logboekschijf voor SQL Server. De verzadiging van die schijf heeft ernstige gevolgen voor de beschikbaarheid van SQL Server en/of het systeem.

De impact op geclusterde systemen beheren

Het proces wordt tijdelijk onderbroken tijdens het genereren van de dump. Dit kan van invloed zijn op de SQL Server de beschikbaarheid van de service en de failover van resources activeren in AlwaysOn-contexten (zowel failoverclusterexemplaren als beschikbaarheidsgroep). De dumpgeneratie van verschillende processen heeft een verschillende invloed op resources. Lees de secties Impact van dumpgeneratie en Dumptypen zorgvuldig door.

Bij het vastleggen van een SQL Server dump op een failoverclusterexemplaar of een exemplaar van een beschikbaarheidsgroep (AG) van SQL Server, kan de geclusterde SQL Server of AG een failover uitvoeren naar een ander knooppunt als de dump te lang duurt. Dit kan met name problematisch zijn op systemen die zeer grote hoeveelheden RAM gebruiken of als u een gefilterde of een volledige geheugendump genereert. Als u failover wilt voorkomen, gebruikt u de volgende instellingen voordat u het dumpbestand vastlegt. De wijziging kan worden hersteld nadat een dumpbestand is uitgevoerd:

  • Voor failoverclusterexemplaar (FCI):
    • Klik met de rechtermuisknop op SQL Server resource in Clusterbeheerder en selecteer Als de resource mislukt, start u niet opnieuw op het tabblad Beleid.
    • Verhoog op het tabblad Eigenschappen de time-out statuscontrole. Stel bijvoorbeeld de waarde van de eigenschap in op 180 seconden of hoger. Als deze time-out is bereikt, wordt het beleid als de resource mislukt, niet opnieuw opstarten genegeerd en wordt de resource toch opnieuw opgestart.
    • Wijzig op het tabblad Eigenschappen de waarde FailureConditionLevel in nul.
  • Voor AG past u alle volgende instellingen toe:
    • Verhoog sessietime-out, bijvoorbeeld 120 seconden voor alle replica's. Klik in SQL Server Management Studio (SSMS) met de rechtermuisknop op de replica die moet worden geconfigureerd en selecteer vervolgens Eigenschappen. Wijzig het veld Sessietime-out (seconden) in 120 seconden. Zie De Session-Timeout periode voor een beschikbaarheidsreplica (SQL Server) wijzigen voor meer informatie.
    • Wijzig de automatische failover van alle replica's in handmatige failover. Klik in SSMS met de rechtermuisknop op replica, selecteer Eigenschappen en wijzig de automatische failover van alle replica's in handmatige failover op het tabblad Eigenschappen. Zie De failovermodus van een beschikbaarheidsreplica (SQL Server) wijzigen voor meer informatie.
    • Verhoog de LeaseTimeout naar 60.000 ms (60 seconden) en wijzig HealthCheckTimeout in 90.000 ms (90 seconden). Klik in Clusterbeheerder met de rechtermuisknop op AG-resource, selecteer Eigenschappen en ga vervolgens naar het tabblad Eigenschappen om beide instellingen te wijzigen. Zie Instellingen voor de eigenschap HealthCheckTimeout configureren voor meer informatie.

Productverbeteringen om de impact op SQL Server te verminderen

Er zijn vier belangrijke verbeteringen toegevoegd aan recente versies van SQL Server om de grootte van het dumpbestand en/of de tijd voor het genereren van de geheugendump te verminderen:

Mechanisme voor bitmapfiltering

SQL Server wijst een bitmap toe die geheugenpagina's bijhoudt die moeten worden uitgesloten van een gefilterde dump. Sqldumper.exe leest de bitmap en filtert pagina's uit zonder dat u andere metagegevens van Geheugenbeheer hoeft te lezen. U ziet de volgende berichten in het SQL Server foutenlogboek wanneer de bitmap respectievelijk is ingeschakeld of uitgeschakeld:

Page exclusion bitmap is enabled. en Page exclusion bitmap is disabled.

  • SQL Server 2016

    Vanaf SQL Server 2016 SP2 CU13 is bitmapfiltering standaard ingeschakeld.

  • SQL Server 2017

    • Dit is niet beschikbaar in RTM tot en met CU15.
    • In SQL Server 2017 CU16 kunt u het bitmapfilter via T8089 inschakelen en uitschakelen door T8089 uit te schakelen.
    • Vanaf SQL Server 2017 CU20 is bitmapfiltering standaard ingeschakeld. Traceringsvlag T8089 is niet meer van toepassing en wordt genegeerd als deze is ingeschakeld. Het filteren van bitmaps kan worden uitgeschakeld via T8095.
  • SQL Server 2019

    Dit is standaard ingeschakeld in SQL Server 2019 RTM. Deze kan worden uitgeschakeld via T8095.

Verwijdering van herhaalde dumps bij hetzelfde probleem

Herhaalde geheugendumps op hetzelfde probleem worden geëlimineerd. Met behulp van een stack-handtekening houdt de SQL-engine bij of er al een uitzondering is opgetreden en produceert deze geen nieuwe geheugendump als er al een is. Dit geldt voor toegangsschendingen, stackoverflow, asserties en uitzonderingen voor indexbeschadiging. Dit vermindert de hoeveelheid schijfruimte die wordt gebruikt door geheugendumps aanzienlijk en blokkeert het proces niet tijdelijk om een dump te genereren. Dit is toegevoegd in SQL Server 2019.

Verkorte uitvoer in het foutenlogboek

De inhoud die in het SQL Server foutenlogboek van één geheugendump wordt gegenereerd, kan niet alleen overweldigend zijn, maar kan ook het proces van het genereren van een geheugendump vertragen vanwege de tijd die nodig is voor het serialiseren van al deze informatie in een tekstindeling in het foutenlogboek. In SQL Server 2019 is de inhoud die is opgeslagen in het foutenlogboek bij het genereren van dumps aanzienlijk verminderd en kan deze er als volgt uitzien:

DateTimespidS pid    **Dump thread - spid = 0, EC = 0x0000015C7169BF40
DateTimespidS pid    *
DateTimespidS pid    *User initiated stack dump. This is not a server exception dump.
DateTimespidS pid    *
DateTimespidS pid    Stack Signature for the dump is 0x00000000788399E5
DateTimespidS pid    External dump process return code 0x20000001.
External dump process returned no errors.

Eerder SQL Server informatie afdrukken voor elke sessie of thread wanneer bijvoorbeeld een handmatige dump door de gebruiker werd geactiveerd.

Parallelle compressie van geheugendumps

Om dumps sneller te genereren en kleiner te maken, is een functie voor gecomprimeerde geheugendump geïntroduceerd in SQL Server 2022 CU8 en SQL Server 2019 CU23. Wanneer dit is geactiveerd, maakt Sqldumper.exe meerdere threads om het geheugen van een proces tegelijkertijd te lezen, het te comprimeren en vervolgens op te slaan in het dumpbestand. Deze parallelle compressie met meerdere threads vermindert de bestandsgrootte en versnelt het dumpproces bij gebruik met volledige en gefilterde dumps.

U kunt traceringsvlag 2610 inschakelen om gecomprimeerde geheugendump in te schakelen:

DBCC TRACEON (2610,-1)
GO
DBCC STACKDUMP with FILTERED_DUMP
GO
DBCC TRACEOFF (2610,-1)

U kunt ook als opstartparameter toevoegen -T2610 aan uw SQL Server-exemplaar, zodat er altijd gecomprimeerde geheugendumps worden gemaakt.

Als u Sqldumper.exe handmatig uitvoert, kunt u de -zdmp parameter gebruiken om een gecomprimeerde geheugendump vast te leggen. Bijvoorbeeld:

Sqldumper.exe <ProcessID> 0 0x8100 0 d:\temp -zdmp

U kunt ook beperken hoeveel kernen Sqldumper.exe kunt gebruiken om de gecomprimeerde dump te maken met behulp van de -cpu:X parameter, waarbij X het aantal CPU's is. Deze parameter is alleen beschikbaar wanneer u Sqldumper.exe handmatig uitvoert vanaf de opdrachtregel:

Sqldumper.exe <ProcessID> 0 0x8100 0 d:\temp -zdmp -cpu:8

Factoren die het maken van geheugendumps voorkomen of vertragen

Van de volgende factoren is bekend dat ze vertragingen veroorzaken of het maken van geheugendumps voorkomen.

  • Het IO-pad waar geheugendumps worden geschreven, presteert slecht. In dergelijke gevallen is het onderzoeken en oplossen van schijf-I/O-prestaties de volgende logische stap.
  • Een antivirusprogramma of andere bewakingssoftware verstoort SQLDumper.exe. In sommige gevallen wordt de functie ReadProcessMemory door software van derden omleiding. Dit kan de duur van de dump aanzienlijk verhogen. Als u de meeste van deze problemen wilt oplossen, schakelt u de storende software uit of voegt u SQLDumper.exe toe aan een uitsluitingslijst.

Dumptypen

De volgende methoden kunnen worden gebruikt om drie verschillende typen dumps te genereren: minidumps, volledige dumps en gefilterde dumps.

Minidumps met geheugen waarnaar wordt verwezen

Dit type geheugendump is een momentopname van alle actieve threads van het proces ('threadstacks'), samen met een beperkt extract van het geheugen waarnaar wordt verwezen door de threadstacks en enkele andere belangrijke proces- of threadgegevens. Ze zijn meestal een paar megabytes groot en kunnen snel worden gegenereerd (van minder dan een seconde tot een paar seconden). Zelfs grotere serversystemen (met honderden CPU's die indirect een enorm aantal threads in SQL Server proces aandrijven) zullen zelden groter zijn dan 20-30 MB: de grootte van een minidump neemt niet toe met de grootte van SQL Server proces. Dit dumptype is het standaardtype dat door SQL Server wordt gebruikt bij het automatisch genereren van geheugendumps bij uitzonderingen, problemen met scheduler, vergrendelingsproblemen, databasebeschadiging, asserties.

Opmerking

SQL Server, als onderdeel van de ingebouwde instrumentatie, in sommige specifieke situaties geautomatiseerde 'diagnostische minidumps' genereert. Deze bewerking wordt daarom als veilig beschouwd zodat SQL Server deze automatisch kan activeren wanneer dat nodig is.

Volledige dumps

Een volledig geheugendump is een volledige kopie van de actieve doelprocesruimte. Dit omvat dus alle threadstatus, alle aan het proces toegewezen geheugen en alle geladen modules. Volledige dumps hebben daarom een grootte, die ongeveer hetzelfde is als SQL Server proces, dat op zijn beurt bijna net zo groot kan zijn als het totale systeem-RAM-geheugen. Op grote servers die zijn toegewezen aan één SQL Server-exemplaar, kan dit een bestand zijn dat enkele honderden gigabytes of meer is. Onnodig te zeggen dat een dergelijk bestand lang duurt om te genereren en daarom langdurige bevriezen zal veroorzaken. Schijfprestaties voor het bestandsdoel van de dump hebben een aanzienlijke invloed op de vriestijd. Dit type dump wordt tegenwoordig zelden gebruikt voor SQL Server, zoals beschreven in de volgende uitleg.

Gefilterde dumps

Naarmate de RAM-grootte van typische servers met SQL Server gestaag toeneemt, worden volledige dumps onhandiger. Gefilterde dumps worden daarom geïmplementeerd. Een gefilterde dump is een subset van een volledige dump, waarbij grote delen van SQL Server geheugen onmiddellijk worden uitgesloten en niet naar de schijf worden geschreven. Meestal heeft het uitgesloten geheugen geen toegevoegde waarde voor het oplossen van problemen. Voorbeelden zijn gegevens-/indexpagina's en enkele interne caches, zoals Hekaton-gegevenspagina's en logboekgroepgeheugen. Deze gefilterde dump resulteert in een kleiner bestand dan een volledige dump, maar de dump behoudt nog steeds bijna alle bruikbaarheid. Gefilterde dumps hebben volledige dumps vervangen als de voorkeursoptie in een overgrote meerderheid van situaties waarin minidumps niet voldoende zijn. De afname in grootte kan variëren in vergelijking met een volledige dump, maar het is nog steeds een vrij groot bestand, dat vaak 30-60% van SQL Server procesgrootte is. Daarom is het het beste om te plannen voor een mogelijke grootte zo groot als een volledige dump als een slechtste optie, die een goede veiligheidsmarge laat. Een gefilterde dump kan niet noodzakelijkerwijs sneller worden gegenereerd dan een volledige dump: het is een kwestie van of de winst met betrekking tot het aantal vermeden I/O groter is dan de tijd die nodig is om de filterlogica te implementeren (schijfsnelheid en CPU/RAM-snelheid zullen dat beïnvloeden).

U kunt de volgende query gebruiken om een ruwe schatting te maken van de gefilterde dumpgrootte. Hoewel de verwachting is dat de meeste gegevens- of indexpagina's worden uitgesloten van de dump, worden de pagina's die uitsluitend worden vastgemaakt en gewijzigd, niet weggelaten.

SELECT SUM(pages_kb)
FROM sys.dm_os_memory_clerks
WHERE type != 'MEMORYCLERK_SQLBUFFERPOOL'

Omdat u Sqldumper.exe kunt gebruiken om een dumpbestand op aanvraag te genereren voor elke Microsoft Windows-toepassing, kunt u overwegen om de gefilterde dumpoptie te gebruiken. Een gefilterd dumpbestand is echter alleen van toepassing en zinvol in de context van SQL Server. U kunt nog steeds een minidump, een volledig dumpbestand of niet-SQL Server toepassingen genereren.

Het SQL Server-proces roept het hulpprogramma Sqldumper.exe intern aan om een dumpbestand te genereren wanneer het proces uitzonderingen ondervindt. SQL Server geeft parameters door aan Sqldumper.exe. U kunt traceringsvlagken gebruiken om de parameters te wijzigen die SQL Server standaard aan het hulpprogramma doorgeeft wanneer er een uitzondering of assertie optreedt. Deze traceringsvlagmen liggen tussen 2540 en 2559. U kunt een van deze traceringsvlagken gebruiken om het standaarddumptype SQLDumper.exe genereren te wijzigen (de standaardwaarde is een minidump met geheugen waarnaar wordt verwezen). Bijvoorbeeld:

  • Traceringsvlag 2551: produceert een gefilterde geheugendump.
  • Traceringsvlag 2544: produceert een volledige geheugendump.
  • Traceringsvlag 8026: SQL Server wist een dumptrigger nadat de dump eenmaal is gegenereerd.

Als er twee of meer traceringsvlagmen actief zijn, wordt de optie die de grootste geheugendump aangeeft, gehonoreerd. Als bijvoorbeeld traceringsvlag 2551 en 2544 worden gebruikt, maakt SQL Server een volledige geheugendump.

Een geheugendump genereren bij clusterfailovers

In scenario's voor clusterfailover kan de SQL Server resource-DLL een dumpbestand verkrijgen voordat de failover plaatsvindt om te helpen bij het oplossen van problemen. Wanneer de SQL Server resource-DLL bepaalt dat een SQL Server resource is mislukt, gebruikt de SQL Server resource-DLL het hulpprogramma Sqldumper.exe om een dumpbestand van het SQL Server proces te verkrijgen. Als u er zeker van wilt zijn dat het hulpprogramma Sqldumper.exe het dumpbestand genereert, moet u de volgende drie eigenschappen instellen als vereisten:

  • SqlDumperDumpTimeOut

    Een door de gebruiker opgegeven time-out. De resource-DLL wacht tot het dumpbestand is voltooid voordat de resource-DLL de SQL Server-service stopt.

  • SqlDumperDumpPath

    De locatie waar het Sqldumper.exe-hulpprogramma het dumpbestand genereert.

  • SqlDumperDumpFlags

    Vlaggen die Sqldumper.exe gebruikt.

Als een van de eigenschappen niet is ingesteld, kan Sqldumper.exe het dumpbestand niet genereren. Een waarschuwingsbericht wordt zowel in het gebeurtenislogboek als in het clusterlogboek geregistreerd wanneer de resource online wordt gebracht.

Clusterconfiguratie voor SQLDumper op SQL Server 2012 en latere versies

U kunt de ALTER SERVER CONFIGURATION opdracht (T-SQL) gebruiken om deze eigenschappen te wijzigen. Bijvoorbeeld:

ALTER SERVER CONFIGURATION SET FAILOVER CLUSTER PROPERTY SqlDumperDumpTimeOut = 0;
ALTER SERVER CONFIGURATION SET FAILOVER CLUSTER PROPERTY SqlDumperDumpPath = 'C:\temp\';
ALTER SERVER CONFIGURATION SET FAILOVER CLUSTER PROPERTY SqlDumperDumpFlags = 296;

U kunt ook PowerShell-scripts gebruiken. Bijvoorbeeld voor een benoemd exemplaar SQL2017AG:

Get-ClusterResource -Name "SQL Server (SQL2017AG)" | Set-ClusterParameter -Name "SqlDumperDumpPath" -Value "C:\temp"
Get-ClusterResource -Name "SQL Server (SQL2017AG)" | Set-ClusterParameter -Name "SqlDumperDumpFlags" -Value 296
Get-ClusterResource -Name "SQL Server (SQL2017AG)" | Set-ClusterParameter -Name "SqlDumperDumpTimeOut" -Value 0

Als u wilt controleren of de instellingen zijn toegepast, kunt u deze PowerShell-opdracht uitvoeren:

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

Clusterconfiguratie voor SQLDumper op SQL Server 2008/2008 R2 of Windows 2012 en eerdere versies

Voer de volgende stappen uit om de eigenschappen van het hulpprogramma Sqldumper.exe voor clusterfailover in te stellen met behulp van de opdracht clusterresource :

  1. Selecteer Start>Run, typ cmd en selecteer vervolgens OK.
  2. Typ voor elke eigenschap de bijbehorende opdracht bij de opdrachtprompt en druk op Enter:
    • De SqlDumperDumpFlags eigenschap

      Als u de SqlDumperDumpFlags eigenschap voor een specifiek type dumpbestand wilt instellen, typt u de bijbehorende opdracht bij de opdrachtprompt en drukt u op Enter:

      • Volledig dumpbestand van thread

        • Standaardexemplaar

          cluster resource "SQL Server" /priv SqlDumperDumpFlags = 0x01100
          
        • Benoemd exemplaar

          cluster resource "SQL Server (INSTANCE1)" /priv SqlDumperDumpFlags = 0x01100
          
      • Alle thread minidumpbestand

        • Standaardexemplaar

          cluster resource "SQL Server" /priv SqlDumperDumpFlags = 0x0120
          
        • Benoemd exemplaar

          cluster resource "SQL Server (INSTANCE1)" /priv SqlDumperDumpFlags = 0x0120
          
      • Alle threaddumpbestanden gefilterd

        • Standaardexemplaar

          cluster resource "SQL Server" /priv SqlDumperDumpFlags = 0x8100
          
        • Benoemd exemplaar

          cluster resource "SQL Server  (INSTANCE1)" /priv SqlDumperDumpFlags = 0x8100
          
    • De SqlDumperDumpPath eigenschap

      cluster resource "SQL Server" /priv SqlDumperDumpPath = <DirectoryPath>
      

      Opmerking

      <DirectoryPath> is een tijdelijke aanduiding voor de map waarin het dumpbestand wordt gegenereerd en moet tussen aanhalingstekens (" ") worden opgegeven.

    • De SqlDumperDumpTimeOut eigenschap

      cluster resource "SQL Server" /priv SqlDumperDumpTimeOut = <Timeout>
      

      Opmerking

      <Time-out> is een tijdelijke aanduiding voor de time-out in milliseconden (ms).

De tijd die het hulpprogramma nodig heeft om een dumpbestand van een SQL Server proces te genereren, is afhankelijk van de computerconfiguratie. Voor een computer met veel herinneringen kan de tijd aanzienlijk zijn. Als u een schatting wilt krijgen van de tijd die het proces in beslag neemt, gebruikt u het hulpprogramma Sqldumper.exe om handmatig een dumpbestand te genereren. De geldige waarden voor de SqlDumperDumpTimeOut eigenschap liggen tussen 10.000 ms en MAXDWORD. MAXDWORD vertegenwoordigt de hoogste waarde in het bereik van het DWORD-gegevenstype (4294967295).

Als u wilt controleren of de instellingen zijn ingeschakeld, kunt u de volgende opdracht uitvoeren:

cluster resource "SQL Server" /priv

Sqldumper.exe eigenschappen voor clusterfailover verwijderen

Voer de volgende stappen uit om de eigenschappen van het hulpprogramma Sqldumper.exe voor clusterfailover te verwijderen:

  1. Selecteer Start>Run, typ cmd en selecteer vervolgens OK.
  2. Voor een specifieke eigenschap typt u de bijbehorende opdracht bij de opdrachtprompt en drukt u op Enter:
    • De SqlDumperDumpFlags eigenschap

      • Standaardexemplaar

          cluster resource "SQL Server" /priv:SqlDumperDumpFlags /usedefault
        
      • Benoemd exemplaar

          cluster resource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpFlags /usedefault
        
    • De SqlDumperDumpPath eigenschap

      • Standaardexemplaar

        cluster resource "SQL Server" /priv:SqlDumperDumpPath /usedefault
        
      • Benoemd exemplaar

        cluster resource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpPath /usedefault
        
    • De SqlDumperDumpTimeOut eigenschap

      • Standaardexemplaar

        cluster resource "SQL Server" /priv:SqlDumperDumpTimeOut /usedefault
        
      • Benoemd exemplaar

        cluster resource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpTimeOut /usedefault
        

DBCC STACKDUMP gebruiken

Met de DBCC STACKDUMP opdracht kunt u een geheugendump maken in de LOG-map van de installatie van uw SQL Server-exemplaar. Met de opdracht wordt standaard een minidump gemaakt met alle threads, die een beperkte grootte heeft en voldoende is om de status van SQL Server proces weer te geven. Voer de volgende opdracht uit in een SQL Server-client:

DBCC STACKDUMP

Zie Uitgebreide DBCC STACKDUMP-functionaliteit geïntroduceerd in SQL Server 2019 voor uitgebreide functionaliteit van DBCC STACKDUMP in SQL Server 2019.

Als u deze methode wilt inschakelen om een gefilterde dump te maken, schakelt u traceringsvlagken 2551 in met behulp van de volgende opdracht:

DBCC TRACEON(2551, -1)
GO
DBCC STACKDUMP

Gebruik traceringsvlag 2544 om een volledige dump te maken.

Nadat u het dumpbestand hebt opgeslagen, moet u de traceringsvlag uitschakelen met behulp van de opdracht DBCC TRACEOFF (<TraceNumber>, -1); om te voorkomen dat alle verdere SQL Server zelfdiagnose minidumps per ongeluk worden upgraden naar grotere dumps. In de opdracht is TraceNumber> de traceringsvlag die u eerder hebt ingeschakeld, <zoals 2551 of 2544. Bijvoorbeeld:

DBCC TRACEOFF(2551, -1)

Als u niet zeker weet welke traceringsvlag actief blijft, voert u de volgende opdracht uit:

DBCC TRACESTATUS(-1)

Een lege resultatenset geeft aan dat er geen traceringsvlag actief is. Als 2551 nog steeds actief is, ziet u het volgende:

TraceFlag Status Wereldwijd Sessie
2551 1 1 0

Opmerking

De traceflag ingeschakelde door DBCC TRACEON worden opnieuw ingesteld (verwijderd) nadat de service opnieuw is gestart.

Uitgebreide DBCC STACKDUMP-functionaliteit geïntroduceerd in SQL Server 2019

Vanaf SQL Server 2019 CU2 is de DBCC STACKDUMP opdracht uitgebreid om het genereren van dumps van verschillende typen te ondersteunen: mini-, gefilterde en volledige dumps. Met deze opdracht hoeft u geen traceringsvlagmen meer te gebruiken. Hiermee kunt u ook de tekstuitvoer beperken in het andere tekstbestand dat wordt gegenereerd met de geheugendump. Dit kan een zichtbare prestatieverbetering opleveren in de tijd die SQLDumper.exe nodig is om een geheugendump te genereren.

DBCC STACKDUMP WITH MINI_DUMP | FILTERED_DUMP | FULL_DUMP [, TEXT_DUMP = LIMITED | DETAILED]

De TEXT_DUMP = LIMITED is de standaardoptie. Als u gedetailleerde uitvoer in het SQLDump000X.txt-bestand wilt ontvangen, kunt u gebruiken TEXT_DUMP = DETAILED.

Voer de volgende opdracht uit om een gefilterde dump met beperkte uitvoer in het .txt-bestand te genereren:

DBCC STACKDUMP WITH FILTERED_DUMP , TEXT_DUMP = LIMITED

Een PowerShell-script gebruiken om een dumpbestand te genereren met SQLDumper

  • Sla de volgende code op als een PS1-bestand, bijvoorbeeld SQLDumpHelper.ps1:

    Codedetails

    $isInt = $false
    $isIntValDcnt = $false
    $isIntValDelay = $false
    $SqlPidInt = 0
    $NumFoler = ""
    $OneThruFour = ""
    $SqlDumpTypeSelection = ""
    $SSASDumpTypeSelection = ""
    $SSISDumpTypeSelection = ""
    $SQLNumfolder = 0
    $SQLDumperDir = ""
    $OutputFolder = ""
    $DumpType = "0x0120"
    $ValidPid
    $SharedFolderFound = $false
    $YesNo = ""
    $ProductNumber = ""
    $ProductStr = ""
    
    Write-Host ""
    Write-Host "`******************************************************************"
    Write-Host "This script helps you generate one or more SQL Server memory dumps"
    Write-Host "It presents you with choices on:`
                -target SQL Server process (if more than one)
                -type of memory dump
                -count and time interval (if multiple memory dumps)
    You can interrupt this script using CTRL+C"
    Write-Host "***********************************************************************"
    
    # check for administrator rights
    # debugging tools like SQLDumper.exe require Admin privileges to generate a memory dump
    
    if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
    {
        Write-Warning "Administrator rights are required to generate a memory dump!`nPlease re-run this script as an Administrator!"
        return
    }
    
    # what product would you like to generate a memory dump
    while ($true)
    {
        Write-Host "Which product would you like to generate a memory dump of?" -ForegroundColor Yellow
        Write-Host "1) SQL Server"
        Write-Host "2) SSAS (Analysis Services)"
        Write-Host "3) SSIS (Integration Services)"
        Write-Host "4) SSRS (Reporting Services)"
        Write-Host "5) SQL Server Agent"
        Write-Host ""
        $ProductNumber = Read-Host "Enter 1-5>"
    
        if ($ProductNumber -in 1,2,3,4,5)
        {
            break
        }
        Write-Host "`nPlease enter a valid number from list above!`n"
        Start-Sleep -Milliseconds 300
    }
    
    if ($ProductNumber -eq "1")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq sqlservr*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SQL Server"
    }
    elseif ($ProductNumber -eq "2")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq msmdsrv*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SSAS (Analysis Services)"
    }
    elseif ($ProductNumber -eq "3")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq msdtssrvr*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SSIS (Integration Services)"
    }
    elseif ($ProductNumber -eq "4")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq reportingservicesservice*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SSRS (Reporting Services)"
    }
    elseif ($ProductNumber -eq "5")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq sqlagent*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SQL Server Agent"
    }
    
    if ($SqlTaskList.Count -eq 0)
    {
        Write-Host "There are currently no running instances of $ProductStr. Exiting..." -ForegroundColor Green
        break
    }
    
    # if multiple SQL Server instances, get the user to input PID for desired SQL Server
    if ($SqlTaskList.Count -gt 1)
    {
        Write-Host "More than one $ProductStr instance found."
    
        $SqlTaskList | Select-Object PID, "Image name", Services | Out-Host
    
        # check input and make sure it is a valid integer
        while ($true)
        {
            Write-Host "Please enter the PID for the desired SQL service from list above" -ForegroundColor Yellow
            $SqlPidStr = Read-Host ">"
    
            if( $SqlPidStr -in $SqlTaskList.PID)
            {
                $SqlPidInt = [int]$SqlPidStr
                break
            }
        }
    
        Write-Host "Using PID=$SqlPidInt for generating a $ProductStr memory dump" -ForegroundColor Green
        Write-Host ""
    
    }
    else # if only one SQL Server/SSAS on the box, go here
    {
        $SqlTaskList | Select-Object PID, "Image name", Services | Out-Host
        $SqlPidInt = [convert]::ToInt32($SqlTaskList.PID)
    
        Write-Host "Using PID=", $SqlPidInt, " for generating a $ProductStr memory dump" -ForegroundColor Green
        Write-Host ""
    }
    
    # dump type
    
    if ($ProductNumber -eq "1")  # SQL Server memory dump
    {
        # ask what type of SQL Server memory dump
        while($true)
        {
            Write-Host "Which type of memory dump would you like to generate?" -ForegroundColor Yellow
            Write-Host "1) Mini-dump"
            Write-Host "2) Mini-dump with referenced memory " -NoNewLine; Write-Host "(Recommended)"
            Write-Host "3) Filtered dump " -NoNewline; Write-Host "(Not Recommended)" -ForegroundColor Red
            Write-Host "4) Full dump  " -NoNewline; Write-Host "(Do Not Use on Production systems!)" -ForegroundColor Red
            Write-Host ""
            $SqlDumpTypeSelection = Read-Host "Enter 1-4>"
    
            if ($SqlDumpTypeSelection -in 1,2,3,4)
            {
                break
            }
            Write-Host "`nPlease enter a valid type of memory dump!`n"
            Start-Sleep -Milliseconds 300
        }
    
        Write-Host ""
    
        switch ($SqlDumpTypeSelection)
        {
            "1" { $DumpType="0x0120"; break }
            "2" { $DumpType="0x0128"; break }
            "3" { $DumpType="0x8100"; break }
            "4" { $DumpType="0x01100"; break }
            default { "0x0120"; break }
        }
    }
    elseif ($ProductNumber -eq "2")  # SSAS dump
    {
        # ask what type of SSAS memory dump
        while($true)
        {
            Write-Host "Which type of memory dump would you like to generate?" -ForegroundColor Yellow
            Write-Host "1) Mini-dump"
            Write-Host "2) Full dump  " -NoNewline; Write-Host "(Do Not Use on Production systems!)" -ForegroundColor Red
            Write-Host ""
            $SSASDumpTypeSelection = Read-Host "Enter 1-2>"
    
            if ($SSASDumpTypeSelection -in 1,2)
            {
                break
            }
            Write-Host "`nPlease enter a valid type of memory dump!`n"
            Start-Sleep -Milliseconds 300
        }
    
        Write-Host ""
    
        switch ($SSASDumpTypeSelection)
        {
            "1" {$DumpType="0x0";break}
            "2" {$DumpType="0x34";break}
            default {"0x0120"; break}
        }
    }
    elseif ($ProductNumber -in 3,4,5)  # SSIS/SSRS/SQL Agent dump
    {
        # ask what type of SSIS memory dump
        while($true)
        {
            Write-Host "Which type of memory dump would you like to generate?" -ForegroundColor Yellow
            Write-Host "1) Mini-dump"
            Write-Host "2) Full dump"
            Write-Host ""
            $SSISDumpTypeSelection = Read-Host "Enter 1-2>"
    
            if ($SSISDumpTypeSelection -in 1,2)
            {
                break
            }
            Write-Host "`nPlease enter a valid type of memory dump!`n"
            Start-Sleep -Milliseconds 300
        }
    
        Write-Host ""
    
        switch ($SSISDumpTypeSelection)
        {
            "1" { $DumpType="0x0"; break }
            "2" { $DumpType="0x34"; break }
            default { "0x0120"; break }
        }
    }
    
    # Sqldumper.exe PID 0 0x0128 0 c:\temp
    # output folder
    while($OutputFolder -eq "" -or !(Test-Path -Path $OutputFolder))
    {
        Write-Host ""
        Write-Host "Where would your like the memory dump stored (output folder)?" -ForegroundColor Yellow
        $OutputFolder = Read-Host "Enter an output folder with no quotes (e.g. C:\MyTempFolder or C:\My Folder)"
        if ($OutputFolder -eq "" -or !(Test-Path -Path $OutputFolder))
        {
            Write-Host "'" $OutputFolder "' is not a valid folder. Please, enter a valid folder location" -ForegroundColor Yellow
        }
    }
    
    # strip the last character of the Output folder if it is a backslash "\". Else Sqldumper.exe will fail
    if ($OutputFolder.Substring($OutputFolder.Length-1) -eq "\")
    {
        $OutputFolder = $OutputFolder.Substring(0, $OutputFolder.Length-1)
        Write-Host "Stripped the last '\' from output folder name. Now folder name is  $OutputFolder"
    }
    
    # find the highest version of SQLDumper.exe on the machine
    $NumFolder = dir "C:\Program Files\Microsoft SQL Server\1*" | Select-Object @{name = "DirNameInt"; expression={[int]($_.Name)}}, Name, Mode | Where-Object Mode -Match "da*" | Sort-Object DirNameInt -Descending
    
    for( $j=0; $j -lt $NumFolder.Count; $j++)
    {
        $SQLNumfolder = $NumFolder.DirNameInt[$j]   # start with the highest value from sorted folder names - latest version of dumper
        $SQLDumperDir = "C:\Program Files\Microsoft SQL Server\" + $SQLNumfolder.ToString() + "\Shared\"
        $TestPathDumperDir = $SQLDumperDir + "sqldumper.exe"
    
        if (Test-Path -Path $SQLDumperDir)
        {
            break
        }
    }
    
    # build the SQLDumper.exe command e.g. (Sqldumper.exe 1096 0 0x0128 0 c:\temp\)
    
    $cmd = "$([char]34)"+$SQLDumperDir + "sqldumper.exe$([char]34)"
    $arglist = $SqlPidInt.ToString() + " 0 " +$DumpType +" 0 $([char]34)" + $OutputFolder + "$([char]34)"
    Write-Host "Command for dump generation: ", $cmd, $arglist -ForegroundColor Green
    
    # do-we-want-multiple-dumps section
    Write-Host ""
    Write-Host "This utility can generate multiple memory dumps, at a certain interval"
    Write-Host "Would you like to collect multiple memory dumps (2 or more)?" -ForegroundColor Yellow
    
    # validate Y/N input
    while ($true)
    {
        $YesNo = Read-Host "Enter Y or N>"
    
        if ($YesNo -in "y","n")
        {
            break
        }
        Write-Host "Not a valid 'Y' or 'N' response"
    }
    
    # get input on how many dumps and at what interval
    if ($YesNo -eq "y")
    {
        [int]$DumpCountInt=0
        while (1 -ge $DumpCountInt)
        {
            Write-Host "How many dumps would you like to generate for this $ProductStr ?" -ForegroundColor Yellow
            $DumpCountStr = Read-Host ">"
    
            if ([int]::TryParse($DumpCountStr, [ref]$DumpCountInt) -and $DumpCountInt -gt 1)
            {
                break
            }
            Write-Host "Please enter a number greater than one." -ForegroundColor Red
        }
    
        [int]$DelayIntervalInt=0
        while ($true)
        {
            Write-Host "How frequently (in seconds) would you like to generate the memory dumps?" -ForegroundColor Yellow
            $DelayIntervalStr = Read-Host ">"
    
            if ([int]::TryParse($DelayIntervalStr, [ref]$DelayIntervalInt) -and $DelayIntervalInt -gt 0)
            {
                break
            }
            Write-Host "Please enter a number greater than zero." -ForegroundColor Red
        }
    
        Write-Host "Generating $DumpCountInt memory dumps at a $DelayIntervalStr-second interval" -ForegroundColor Green
    
        # loop to generate multiple dumps
        $cntr = 0
        while ($true)
        {
            Start-Process -FilePath $cmd -Wait -Verb runAs -ArgumentList $arglist
            $cntr++
    
            Write-Host "Generated $cntr memory dump(s)." -ForegroundColor Green
    
            if ($cntr -ge $DumpCountInt)
            {
                break
            }
            Start-Sleep -S $DelayIntervalInt
        }
    
        # print what files exist in the output folder
        Write-Host ""
        Write-Host "Here are all the memory dumps in the output folder '$OutputFolder'" -ForegroundColor Green
        $MemoryDumps = $OutputFolder + "\SQLDmpr*"
        Get-ChildItem -Path $MemoryDumps
    
        Write-Host ""
        Write-Host "Process complete"
    }
    else # produce just a single dump
    {
        Start-Process -FilePath $cmd -Wait -Verb runAs -ArgumentList $arglist
    
        # print what files exist in the output folder
        Write-Host ""
        Write-Host "Here are all the memory dumps in the output folder '$OutputFolder'" -ForegroundColor Green
        $MemoryDumps = $OutputFolder + "\SQLDmpr*"
        Get-ChildItem -Path $MemoryDumps
    
        Write-Host ""
        Write-Host "Process complete"
    }
    
    Write-Host "For errors and completion status, review SQLDUMPER_ERRORLOG.log created by SQLDumper.exe in the output folder '$OutputFolder'.`nOr if SQLDumper.exe failed, look in the folder from which you are running this script."
    
  • Voer de opdracht uit vanaf de opdrachtprompt als beheerder met behulp van de volgende opdracht:

    Powershell.exe -File SQLDumpHelper.ps1
    
  • U kunt deze ook uitvoeren vanuit Windows PowerShell console en uitvoeren als beheerder met behulp van de volgende opdracht:

    .\SQLDumpHelper.ps1
    

Opmerking

Als u Nog nooit PowerShell-scripts op uw systeem hebt uitgevoerd, wordt mogelijk het volgende foutbericht weergegeven:

"Bestand ...SQLDumpHelper.ps1 kan niet worden geladen omdat het uitvoeren van scripts is uitgeschakeld op dit systeem."

Als u de mogelijkheid wilt inschakelen om de opdrachten uit te voeren, voert u de volgende stappen uit:

  1. Start Windows PowerShell-console met behulp van de optie Als administrator uitvoeren. Alleen leden van de beheerdersgroep op de computer kunnen het uitvoeringsbeleid wijzigen.

  2. Schakel het uitvoeren van niet-ondertekende scripts in met de volgende opdracht:

    Set-ExecutionPolicy RemoteSigned
    

    Opmerking

    Hiermee kunt u niet-ondertekende scripts uitvoeren die u op uw lokale computer maakt en scripts ondertekend vanaf internet.