Problemen oplossen voor de volledige SQL Server of de databasetoepassing die traag lijkt te zijn

Van toepassing op: SQL Server

Wanneer u query's uitvoert op een SQL Server-exemplaar of een bepaalde toepassing, zijn alle query's traag. Voer de volgende stappen uit om het probleem op te lossen:

Stap 1: Problemen met toepassingen oplossen

Controleer de toepassingslaag. Voer een query uit vanuit de toepassing, voer deze handmatig uit op een SQL Server-exemplaar en bekijk hoe deze wordt uitgevoerd. Test op deze manier verschillende query's. Als query's sneller zijn op het SQL Server-exemplaar, kan het probleem zich in de laag van de toepassing of toepassingsserver bevinden.

Als de toepassing wordt uitgevoerd op een andere server, controleert u de prestaties van de toepassingsserver (zie stap 2: problemen met het besturingssysteem oplossen voor het oplossen van problemen ). Mogelijk moet u contact opnemen met het ontwikkelteam van de toepassing om te controleren op problemen met de toepassing.

Stap 2: Problemen met het besturingssysteem oplossen

Controleer of het besturingssysteem waarop SQL Server wordt uitgevoerd, langzaam reageert. De muis beweegt bijvoorbeeld langzaam, vensters reageren niet gedurende lange perioden, extern bureaublad-toegang tot de server is traag of verbinding maken met een share op de server is traag.

Dit probleem kan worden veroorzaakt door een andere service of toepassing. Gebruik Perfmon om problemen op te lossen.

Zie de documentatie voor het oplossen van prestatieproblemen met Windows Server voor andere prestatieproblemen in het besturingssysteem.

Veelvoorkomende problemen zijn:

Dit probleem kan worden veroorzaakt door andere toepassingen, het besturingssysteem of stuurprogramma's die op het systeem worden uitgevoerd.

Als u dit probleem wilt oplossen, gebruikt u Taakbeheer, Prestatiemeter of Resource monitor om dit probleem te identificeren. Zie de richtlijnen voor het oplossen van problemen met hoog CPU-gebruik voor meer informatie.

Stap 3: netwerkproblemen oplossen

Het probleem kan zich in de netwerklaag bevinden, wat trage communicatie tussen de toepassing en SQL Server veroorzaakt. Gebruik de volgende methoden om dit probleem op te lossen:

  • Een symptoom hiervan kan worden ASYNC_NETWORK_IO gewacht aan de zijde van SQL Server. Zie Problemen met trage query's oplossen die het gevolg zijn van ASYNC_NETWORK_IO wachttype voor meer informatie.

  • Neem contact op met uw netwerkbeheerder om te controleren op netwerkproblemen (firewall, routering, enzovoort).

  • Verzamel een netwerktracering en controleer op de gebeurtenissen voor het opnieuw instellen en opnieuw verzenden van het netwerk. Zie onregelmatige of periodieke netwerkproblemen voor het oplossen van problemen.

  • Schakel Prestatiemeteritems in om de netwerkprestaties op netwerkinterfaceniveau (NIC) te controleren. Er moeten nul genegeerde pakketten en foutpakketten zijn. Controleer de bandbreedte van de netwerkinterface:

    • Netwerkinterface\Ontvangen pakketten verwijderd
    • Network Interface\Packets Received Errors
    • Netwerkinterface\Uitgaande pakketten verwijderd
    • Netwerkinterface\Uitgaande fouten in pakketten
    • Netwerkinterface\Totaal aantal bytes per seconde
    • Netwerkinterface\Huidige bandbreedte

Stap 4: Problemen met hoog CPU-gebruik in SQL Server oplossen

Als CPU-intensieve query's worden uitgevoerd op het systeem, kunnen ze ervoor zorgen dat andere query's worden verhongerd van de CPU-capaciteit. Vaker kan een hoog CPU-gebruik dat afkomstig is van query's een indicatie zijn dat query's moeten worden geoptimaliseerd. Volg deze stappen om het probleem op te lossen:

  1. Zoek eerst uit of SQL Server een hoog CPU-gebruik veroorzaakt (met behulp van Prestatiemeteritems).
  2. Identificeer query's die bijdragen aan het CPU-gebruik.
  3. Statistieken bijwerken.
  4. Ontbrekende indexen toevoegen.
  5. Parametergevoelige problemen onderzoeken en oplossen.
  6. Problemen met SARGability onderzoeken en oplossen.
  7. Schakel zware tracering uit.
  8. Los spinlockconflicten op SOS_CACHESTORE .
  9. Configureer uw virtuele machine.
  10. Schaal het systeem omhoog door meer CPU's toe te voegen.

Zie Problemen met hoog CPU-gebruik in SQL Server oplossen voor gedetailleerde stappen voor probleemoplossing.

Stap 5: Problemen met overmatige I/O oplossen die traagheid veroorzaken in SQL Server

Een andere veelvoorkomende reden voor de waargenomen algehele traagheid van SQL Server-workloads zijn I/O-problemen. Traagheid van I/O kan van invloed zijn op de meeste of alle query's in het systeem. Gebruik de volgende methoden om het probleem op te lossen:

  • Controleren op hardwareproblemen:

    • ONJUISTE SAN-configuratie (switch, kabels, HBA, opslag).
    • I/O-capaciteit overschreden (verdeeld over het hele SAN-netwerk, niet alleen back-endopslag, I/O-doorvoer van alle servers die het SAN delen).
    • Problemen met stuurprogramma's of firmware of updates.
  • Controleer op suboptimale SQL Server-query's die veel I/O veroorzaken en verzadiging van schijfvolumes met I/O-aanvragen.

    • Zoek de query's die een groot aantal logische leesbewerkingen (of schrijfbewerkingen) veroorzaken en stem deze query's af om de I/O-schijf te minimaliseren met behulp van de juiste indexen.
    • Houd statistieken bijgewerkt wanneer ze de queryoptimalisatie bieden met voldoende informatie om het beste plan te kiezen.
    • Het opnieuw ontwerpen van query's en soms tabellen kan helpen met verbeterde I/O.
  • Filterstuurprogramma's: de I/O-reactie van SQL Server kan ernstig worden beïnvloed als stuurprogramma's voor bestandssysteemfilters intensief I/O-verkeer verwerken.

    • Sluit gegevensmappen uit van antivirusscans en filterstuurprogrammaproblemen die zijn gecorrigeerd door softwareleveranciers om een impact op I/O-prestaties te voorkomen.
  • Andere toepassingen: Een andere toepassing op dezelfde computer met SQL Server kan het I/O-pad overbelasten met overmatige lees- of schrijfaanvragen. Deze situatie kan het I/O-subsysteem buiten de capaciteitslimieten duwen en I/O-traagheid veroorzaken voor SQL Server. Identificeer de toepassing en stem deze af of verplaats deze ergens anders om het effect op de I/O-stack te elimineren. Dit probleem kan ook worden veroorzaakt door toepassingen die worden uitgevoerd op andere computers, maar dezelfde SAN delen met deze SQL Server-machine. Werk samen met uw SAN-beheerder om I/O-verkeer te verdelen (zie Controleren op hardwareproblemen).

Voor gedetailleerde probleemoplossing van I/O-gerelateerde problemen met SQL Server raadpleegt u Problemen met trage SQL Server-prestaties oplossen die worden veroorzaakt door I/O-problemen.

Stap 6: Geheugenproblemen oplossen

Weinig geheugen op het systeem in het algemeen of in SQL Server kan leiden tot traagheid wanneer query's wachten op geheugentoekenningen (RESOURCE_SEMAPHORE) of compileergeheugen (RESOURCE_SEMAPHORE_QUERY_COMPILE). Gebruik de volgende methoden om het probleem op te lossen:

  • Controleer op extern geheugen op besturingssysteemniveau met behulp van Prestatiemeteritems:

    • Geheugen\Beschikbare MBytes
    • Proces(*)\Werkset (alle exemplaren)
    • Proces(*)\Privébytes (alle exemplaren)
  • Voor interne geheugenbelasting gebruikt u SQL Server-query's om query's uit te voeren op sys.dm_os_memory_clerks of DBCC MEMORYSTATUS te gebruiken.

  • Controleer het SQL Server-foutenlogboek op 701-fouten .

Zie Problemen met onvoldoende geheugen of onvoldoende geheugen in SQL Server oplossen voor gedetailleerde stappen voor probleemoplossing.

Stap 7: blokkeringsproblemen oplossen

Vergrendelingsverwerving wordt gebruikt om resources in een databasesysteem te beveiligen. Als vergrendelingen lange tijd worden verkregen en andere sessies uiteindelijk wachten op die vergrendelingen, krijgt u te maken met een blokkerend scenario.

Korte blokkering vindt altijd plaats op databasesystemen zoals SQL Server. Maar langdurige blokkering, met name wanneer de meeste of alle query's wachten op een vergrendeling, kan ertoe leiden dat de hele server als niet reageert.

Gebruik de volgende stappen om het probleem op te lossen:

  1. Identificeer de hoofdblokkeringssessie door de kolom blocking_session_id in sys.dm_exec_requests DMV-uitvoer of de kolom BlkBy in sp_who2 opgeslagen procedure-uitvoer te bekijken.

  2. Zoek de query('s) die door de blokblokkeringsketen worden uitgevoerd (wat vergrendelingen gedurende een langere periode vasthoudt).

    Als er geen query's actief worden uitgevoerd op de hoofdblokkeringssessie, is er mogelijk een zwevende transactie vanwege toepassingsproblemen.

  3. Ontwerp of stem de hoofdblokkeringsquery opnieuw in om sneller te worden uitgevoerd of verminder het aantal query's in een transactie.

  4. Bekijk de transactieisolatie die in de query wordt gebruikt en pas deze aan.

Zie Sql Server-blokkeringsproblemen begrijpen en oplossen voor gedetailleerde probleemoplossing van blokkeringsscenario's.

Stap 8: Scheduler-problemen oplossen (niet-rendement, impasseplanner, niet-opleverende IOCP-listener, resourcemonitor)

SQL Server maakt gebruik van een coöperatief planningsmechanisme (Schedulers) om de threads beschikbaar te maken voor het besturingssysteem voor planning op de CPU. Als er problemen zijn met betrekking tot SQL Schedulers, kunnen SQL Server-threads stoppen met het verwerken van query's, aanmeldingen, afmeldingen, enzovoort. Als gevolg hiervan lijkt SQL Server mogelijk niet meer te reageren, gedeeltelijk of volledig, afhankelijk van het aantal planners. Scheduler-problemen kunnen het gevolg zijn van een breed scala aan problemen, waaronder productfouten, externe stuurprogramma's en hardwareproblemen.

Volg deze stappen om deze problemen op te lossen:

  1. Controleer uw SQL Server-foutenlogboek op fouten zoals de volgende op het moment van het gemelde gebrek aan reactie van SQL Server:

    • ***********************************************
      *
      * BEGIN STACK DUMP:
      * 03/10/22 21:16:35 spid 22548
      *
      * Non-yielding Scheduler
      *
      ***********************************************
      
    • **********************************************
      *
      * BEGIN STACK DUMP:
      * 03/25/22 08:50:29 spid 355
      *
      * Deadlocked Schedulers
      *
      * ********************************************
      
      
    • * *******************************************************************************                                
      *                                                                                                                
      * BEGIN STACK DUMP:                                                                                              
      * 09/07/22 23:01:04 spid 0                                                                                     
      *                                                                                                                
      * Non-yielding IOCP Listener                                                                                     
      *                                                                                                                
      * *******************************************************************************   
      
    • * ********************************************
      *
      * BEGIN STACK DUMP:
      * 07/25/22 11:44:21 spid 2013
      *
      * Non-yielding Resource Monitor
      *
      * ********************************************
      
  2. Als u een van deze fouten vindt, identificeert u welke versie cumulatieve update (CU) van SQL Server u gebruikt. Controleer of er problemen zijn opgelost in CU's die na uw huidige CU zijn verzonden. Zie de meest recente updates die beschikbaar zijn voor momenteel ondersteunde versies van SQL Server voor de oplossingen van SQL Server. Voor een gedetailleerde lijst met oplossingen kunt u dit Excel-bestand downloaden.

  3. Gebruik het oplossen van problemen met SQL Server-planning en -opbrengst voor meer ideeën.

  4. Controleer op zware blokkerende scenario's of enorme parallellismequery's die kunnen leiden tot impasseplanners. Zie De Tao van een impasse scheduler voor gedetailleerde informatie.

  5. Controleer voor een niet-rendementende IOCP-listener of uw systeem weinig geheugen heeft en SQL Server wordt uitgepaginad. Een andere reden is dat antivirussoftware of inbraakpreventiesoftware I/O API-aanroepen onderschept en de threadactiviteit vertraagt. Zie Voor meer informatie, is de IOCP-listener daadwerkelijk luisteren? en prestatie- en consistentieproblemen wanneer bepaalde modules of filterstuurprogramma's worden geladen.

  6. Voor problemen met Resource Monitor hebt u mogelijk niet per se te maken met dit probleem. Zie Resource Monitor voert een niet-rendementsvoorwaarde in op een server waarop SQL Server wordt uitgevoerd voor meer informatie.

  7. Als deze resources niet helpen, zoekt u de geheugendump die is gemaakt in de submap \LOG en opent u een ondersteuningsticket met Microsoft CSS door de geheugendump voor analyse te uploaden.

Stap 9: Zoek naar resource-intensieve Profiler- of XEvent-traceringen

Zoek naar actieve uitgebreide gebeurtenissen of SQL Server Profiler-traceringen, met name met filteren op tekstkolommen (databasenaam, aanmeldingsnaam, querytekst, enzovoort). Schakel indien mogelijk de traceringen uit en kijk of de queryprestaties verbeteren. Afhankelijk van de geselecteerde gebeurtenis kan elke thread extra CPU verbruiken, waardoor de algehele traagheid wordt veroorzaakt. Zie sys.dm_xe_sessions en voor Profiler-traceringen sys.traces om de actieve traceringen voor uitgebreide gebeurtenissen te identificeren.

SELECT * FROM sys.dm_xe_sessions
GO
SELECT * FROM sys.traces